(大ハマリ)VMのコピーによるUUIDの重複

誤ってz151のVMを削除してしまったため、z152のVMをコピーしてz151をコピーしたものの、ノードID(dc-uuid)が重複したためか、どうしてもcrm_monがうまく表示されない
と思ったらこんなところに正解があった
hnakamur’s blog: CentOSでheartbeatでVIP引き継ぎ

当初uuidfrom nodenameの行を忘れてはまったので注意。この指定が無いと、/var/lib/heartbeat/hb_uuidをマシンのUUIDとして使うので、仮想イメージファイルをクローンして作ったためか同じ内容になってしまい、以下のようなエラーが延々とログに出ることになります。
heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent1 uuid changed to cent2
heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent2 uuid changed to cent1
heartbeat[14054]: 2009/11/12_18:17:32 WARN: nodename cent1 uuid changed to cent2

[root@z151 ha.d]# tail /var/log/ha-debug
Nov 01 10:57:20 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
Nov 01 10:57:20 z151.drbd heartbeat: [13065]: debug: displaying uuid table
Nov 01 10:57:20 z151.drbd heartbeat: [13065]: debug: uuid=252d3c17-5fce-4ca1-ba4d-42d3adc90b3a, name=z152.drbd
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: WARN: nodename z151.drbd uuid changed to z152.drbd
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: debug: displaying uuid table
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: debug: uuid=252d3c17-5fce-4ca1-ba4d-42d3adc90b3a, name=z151.drbd
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: ERROR: should_drop_message: attempted replay attack [z152.drbd]? [gen = 1286169071, curgen = 1286169073]
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: debug: displaying uuid table
Nov 01 10:57:24 z151.drbd heartbeat: [13065]: debug: uuid=252d3c17-5fce-4ca1-ba4d-42d3adc90b3a, name=z152.drbd
[root@z151 ha.d]# tail /var/log/ha-log
Nov 01 10:57:35 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
Nov 01 10:57:38 z151.drbd heartbeat: [13065]: WARN: nodename z151.drbd uuid changed to z152.drbd
Nov 01 10:57:38 z151.drbd heartbeat: [13065]: ERROR: should_drop_message: attempted replay attack [z152.drbd]? [gen = 1286169071, curgen = 1286169073]
Nov 01 10:57:38 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
Nov 01 10:57:42 z151.drbd heartbeat: [13065]: WARN: nodename z151.drbd uuid changed to z152.drbd
Nov 01 10:57:42 z151.drbd heartbeat: [13065]: ERROR: should_drop_message: attempted replay attack [z152.drbd]? [gen = 1286169071, curgen = 1286169073]
Nov 01 10:57:42 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
Nov 01 10:57:45 z151.drbd heartbeat: [13065]: WARN: nodename z151.drbd uuid changed to z152.drbd
Nov 01 10:57:45 z151.drbd heartbeat: [13065]: ERROR: should_drop_message: attempted replay attack [z152.drbd]? [gen = 1286169071, curgen = 1286169073]
Nov 01 10:57:45 z151.drbd heartbeat: [13065]: WARN: nodename z152.drbd uuid changed to z151.drbd
[root@z151 ha.d]# more /var/lib/heartbeat/hb_uuid
%-<_MB・
        
[root@z152 ha.d]# more /var/lib/heartbeat/hb_uuid
%-<_MB・
        
(どのエンコーディング形式にしてもどうしても文字化けされて表示される)

もっと早くログ見とけばよかた・・やっぱログは大事ですね
こんな重要な設定なのに、どういうわけかどの本にも載っていなかった
以下
〔対応手順〕
Heartbeat: ノード間の通信トラブル

これは Heartbeat のペアが、マシンに固有の uuid で互いを識別し合っていることに起因する。設定ファイル /etc/ha.d/ha.cf 中で
uuidfrom nodename
と設定していない場合、uuid は /var/lib/heartbeat/hb_uuid として保存される。我が家では当時この設定になっていて、詳しくは調査していないが何らかのハッシュ値を元に生成されているであろう uuid は、同じ VM でもコピーすると変わってしまう。同じホスト名を名乗りつつ uuid が異なるマシンが登場したことで、正常な側から 「お前、本当にあいつなのか?」 と疑われてしまっていたわけだ。
このトラブルを解消するには、具合の悪い方 (今回はスタンバイ側) で Heartbeat の自動起動を無効にしてから、ムリヤリでも何でもいいので、とにかく再起動させる。次に正常な方 (同アクティブ側) の hb_uuid ファイルを削除かリネームで過去の記憶を抹消し、具合が悪い側で Heartbeat を起動させると、通信できるようになる。

[root@z151 ha.d]# chkconfig --list heartbeat
heartbeat       0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@z152 ha.d]# chkconfig --list heartbeat
heartbeat       0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@z151 ha.d]# vi ha.cf
(最下行に以下の行を追加)
uuidfrom nodename
[root@z152 ha.d]# vi ha.cf
(最下行に以下の行を追加)
uuidfrom nodename

再起動後、二つ生成されてしまった

# crm configure show
node $id="252d3c17-5fce-4ca1-ba4d-42d3adc90b3a" z152.drbd
node $id="4b6dd4d0-21f5-cd4c-2ca1-f8a45c55b02f" z151.drbd
node $id="c7c991cf-414b-8daa-6e5d-8c4e2e4bb197" z152.drbd
node $id="d2c277ef-9c3f-42f0-84ad-e4575ae0390d" z151.drbd

ので、crm configure editで両方とも削除したら、commitしてないのに再表示すると

# crm configure show
node $id="4b6dd4d0-21f5-cd4c-2ca1-f8a45c55b02f" z151.drbd
node $id="c7c991cf-414b-8daa-6e5d-8c4e2e4bb197" z152.drbd

なぜか二つだけになっていた
これにより、両ノードとも無事crm_monの稼動を確認

# crm_mon
============
Last updated: Mon Nov  1 11:18:05 2010
Stack: Heartbeat
Current DC: z152.drbd (c7c991cf-414b-8daa-6e5d-8c4e2e4bb197) - partition with
 quorum
Version: 1.0.9-89bd754939df5150de7cd76835f98fe90851b677
2 Nodes configured, unknown expected votes
1 Resources configured.
============

Online: [ z152.drbd z151.drbd ]

 Resource Group: group_1
     IPaddr2_1  (ocf::heartbeat:IPaddr2):       Started z151.drbd
     drbddisk_2 (heartbeat:drbddisk):   Started z151.drbd        
     Filesystem_3       (ocf::heartbeat:Filesystem):    Started z151.drbd

ただ、

新しい hb_uuid は、Heartbeat を起動した際に自動生成される。

というのはウソだろう。特に生成されなかった

# mv /var/lib/heartbeat/hb_uuid /var/lib/heartbeat/hb_uuid_back
# service heartbeat start
Starting High-Availability services:                       [  OK  ]
# ll /var/lib/heartbeat/hb_uuid
ls: /var/lib/heartbeat/hb_uuid: そのようなファイルやディレクトリはありません