ネタが古くてすみません橘べるちぇです。

今回は、各所でちらほら出ているもので、仮想環境なんかでLinux-HAを組むときに、稼働系1ノードをとりあえずインストールして、それをコピーして待機系にしたいなんて話をしてみようと思います。

目的

  1. 仮想環境で1ノード作ってそのディスクイメージをコピーしてHA化したい!

  2. がんがん金太郎飴方式にノードを増やせるようにしたい!

  3. OSのインストールは最近すぐ終わるようになったけどやっぱりめんどい!

  4. UUID重複して怒られちゃったのどうやって対処したらいいの!?対象方法知りたい!

  5. 黒髪ロングストレート最高!

以上のことを実現する方法をちょっと試してみたので今回ここでご紹介します。

動作環境

  • OS : CentOS5.5

  • Heartbeat3.0.4+Pacemaker1.0.10 (Linux-HA Japanのリポジトリ使って☆)

  • 仮想環境(VMWare または VirtualBox 等)

  • NIC: eth0をサービス系、eth1を監視用として使う

今回はOSごとコピーするので、ディスクイメージを簡単にコピーできる仮想環境でやります。今回私はVirtualBoxの仮想アプライアンスのエクスポート・インポート機能を使ってみたかったのでそれでやりました。

稼働系のインストール

説明することはございませんw Linux-HA Japanで公開されているリポジトリで簡単にインストールしちゃってください。

新谷良子ちゃんの声をききながらDRBD-MCでインストールしてもOKです。オススメです。

待機系の準備

VMWareだと.vmdkファイルをコピー、VirtualBoxだと仮想アプライアンスとしてエクスポートしてインポートしたりして稼働系と同じものを作ります。

同じ環境が起動したら、ホスト名とIPアドレスだけ変更します。

▼変更するファイル

  • /etc/sysconfig/network

  • /etc/sysconfig/network-script/ifcfg-eth1

networkはホスト名のところと、ifcfg-eth1はIPアドレスのところを変えてください。

変更ができたら再起動して先ほどの稼働系のOSも一緒に起動しちゃいます。起動できたらPINGなりでネットワークが疎通しているかどうかの確認をしてください。オチとしては仮想環境の設定ミスっててPINGが通らなくておかしくなっていることが多いです。

ぶつけてみる

はい。じゃここまでできたら、Heartbeatを両ノードで起動してぶつけてみましょう(笑)

事象を確認することって重要ですよね。ぶつかるとどういう症状になって、どういうログが出るかを確認しておくと今後の役に立つと思います。すんごい沢山ログが吐かれるので覚悟してください。

……

はい。ぶつかって後から起動したほうまたは両ノードが再起動されちゃいましたね。

これはこのクラスター環境が保有しているUUIDが同一だからです。ホスト名は違う、でもUUIDは一緒…。Heartbeatは下のような会話をします。

HA1のHeartbeat:「おーおー、HA2やんけ。これからなかよくしてなー。携帯電話の番号(UUID)交換しようや」

HA2のHeartbeat:「いやーHA2さんどうもです。こちらこそよろしくなのですよ。あ、これボクの携帯(UUID)」

HA1のHeartbeat:「あ?おまえこれうちの携帯番号やん。」

HA2のHeartbeat:「え?マジこれボクの携帯番号じゃん」

HA1のHeartbeat:「じゃんって言うなや。」(ログの出力)

HA2のHeartbeat:「いや関西弁とか無理なんですけど」(ログの出力)

HA1のHeartbeat:「わしが先輩や、その番号はわしのだー。氏ねやボケが」(再起動命令)

HA2のHeartbeat:「そ、そんな…」(再起動)

簡単に言うとこんな感じです。

じゃ、HA2のHeartbeat君の電話番号(UUID)を変えればいいということになりますね。

UUIDの生成

これ結構聞かれていたので、橘べるちぇ的やりかたでご紹介します。Heartbeatのソースを眺めていたら普通にUUID作ってるだけっぽいので、uuidgen使いますw

[root@ha2 ~]# uuidgen

036054e3-69b5-472f-852e-4df2047fb27c

UUIDの登録

HA2に新しいUUIDを登録します。これはちゃんとコマンドが用意されているので、以下のコマンドで登録してね。

UUIDはさっき生成したやつをコピペが気合いで写してください。ラップスキャンとかしないでいいです。

[root@ha2 ~]# crm_uuid -w 036054e3-69b5-472f-852e-4df2047fb27c

再度接続

違う電話番号を手に入れたHA2のHeartbeat君はHA1のHeartbeat君と仲良くできるでしょうか。楽しみですね。

両ノードでHeartbeatを起動してcrm_monを監視していましょう。

HA1のHeartbeat:「またきよったんか」

HA2のHeartbeat:「マジ携帯番号(UUID)マジGETしてきましたマジセンパイ!どうっすか?」

HA1のHeartbeat:「マジが多いんだよマジがよぅ。お、ええ番号やん。」(UUID認識中)

HA2のHeartbeat:「これからよろしくッス!センパイぇ」(接続)

HA1のHeartbeat:「わーったから。もう入れや」(クラスタノード参加)

HA2のHeartbeat:「あざす!」(クラスタ情報の同期完了)

 

めでたく仲良く接続できました。

いろいろ失敗したりしていると、UUIDがたくさん登録されちゃったりする場合がありますが、この場合以下のようにオンラインのホスト名とオフラインのホスト名が出てきたりします。

こうなったらcrmのconfigureモードからeditでいらなくなったノードを消してあげましょう。

crmのnodeモードではホスト名が一緒で消せないので注意してね!

============
Last updated: Tue Feb  1 14:31:00 2011
Stack: Heartbeat
Current DC: ha2 (174fdb94-a218-42b4-b3bf-3971d5658a50) - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
3 Nodes configured, unknown expected votes
0 Resources configured.
============

Node ha1 (95030479-e34d-4ed8-954e-3d4398cc10af): UNCLEAN (offline)
Online: [ ha2 ha1 ]


Migration summary:
* Node ha2: 
* Node ha1: 

こんな感じ。

で、こんな感じで消すw

node $id="174fdb94-a218-42b4-b3bf-3971d5658a50" ha2
node $id="3b0f1423-f2dd-4a6e-b16c-766f76301d96" ha1
node $id="95030479-e34d-4ed8-954e-3d4398cc10af" ha1
property $id="cib-bootstrap-options" \
        dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
        cluster-infrastructure="Heartbeat"

node $id="174fdb94-a218-42b4-b3bf-3971d5658a50" ha2
node $id="3b0f1423-f2dd-4a6e-b16c-766f76301d96" ha1
property $id="cib-bootstrap-options" \
        dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \
        cluster-infrastructure="Heartbeat"

まとめ

  • UUIDが同じだとHeartbeatは通信ができません。

  • UUIDは重複しなければいいので、uuidgenで作ってしまうと良い。内部でもそれっぽいことしてるし。

  • /var/lib/heartbeat/hb_uuid のファイルを消したりしない。(自動生成されないよ)

  • /var/lib/heartbeat/hostcache を編集しなくていい

今回高良姉妹を出さなかったのは喧嘩させたくなかったからです。