CentOS5.3: Slony-I 2.0を使ってみた (3.1)
(3) のテイクオーバー(Slonyの用語ではスイッチオーバー)に続いて、フェイルオーバーも試してみた。
フェイルオーバーは一度行うと落ちた側のデータを全て削除しないと復旧が難しいらしい。基本的には行いたくないが、ハードウェア障害などの時にはフェイルオーバー以外の方法がないので、あくまで緊急での対応として実施する。。
方法は簡単で、
$ slonik_failover | slonik
と打つだけである。一応どちらで打ってもよいようだが、普通はFailしなかった方で打つことになるだろう。 ww
問題なのは実施した後の復旧方法なのだが、Failしていない方は依然としてSlony-I が使用するスキーマも持ってしまっているため、単純にslonik_init_cluster を使うことはできない。正しい方法なのかどうかはわからないが、筆者は次の方法でFailノードを復旧することができた。
1 両ノードで slon_kill 2 FailしたノードでDB再作成, createlang, テーブル作成を実施 3 slon_tool.conf でマスターノードをFailしなかったノードに変更 4 slonik_store_node でFailしたノードに、メタデータ再作成 5 slonik_drop_set でsetの情報を削除(Failしなかった側のため) 6 slonik_create_set でsetの情報を再作成 7 両ノードで slon_start 8 slonik_subscribe_node でレプリケーション開始 => レプリケーションが行われていることを確認する 9. (レプリケーションがが追いつくまで待つ) 10. slon_tool.conf でマスターノードをFailしたノードに変更 11. slonik_move_set でマスターノードを変更
ハマりポイントとしては、3. でMASTERNODE の項目を編集することがある。忘れると、新規作成のDBからレプリケーションが行われてしまいデータが消えてしまう orz ので注意が必要だ。。
それと、5, 6 ではFailしなかった側にset の情報が残っていたので一旦drop_set, create_set で復旧したのだが、これが正しい手順なのかはよくわからない。
10, 11 はマスターノードを元のノードに戻すために行っているが、そのままの筐体で動かすなら特に行わなくてもよさそうだ。
実際にやってみてわかったのだが、復旧作業はかなり繊細な作業で、メタデータの不整合などで操作が上手くいかないことも多々あった。一応上記の方法で上手くいきそうなのだが、何度か試してみてノウハウを集めることも必要そうだ。 orz