※ 整理した情報ではなく、ad hocに試したことをメモ書き。なので結構怪しいです。
- version: 0.7.25 (api:79/proto:74)
slave側が落ちて、heartbeat、drbdを再起動してもstatusが戻らない状態からの復旧メモ。以下"all"となっているresourceは各自の環境ごとにr0,drbd0 などに読み替える。resourceが1つならallでもいいけど。
とりあえずやってみる
slave側で。
## status再確認 cat /proc/drbdでもいい drbdadm state all drbdadm cstate all ## drbd 切断/接続 drbdadm down all drbdadm up all ## status再確認 drbdadm state all drbdadm cstate all
cstateがConnection、stateがSecondary/PrimaryになってたらOK。単にsecondary側のサーバが死んでただけ(standaloneになって書き込みしてないとか)の場合、これだけで復旧するかも。
(起動スクリプトでdrbdが起動した時点で直ってる可能性も十分あり)
drbdのstatusについて
cat /proc/drbdかdrbdadm state、drbdadm cstateなどで確認する。
drbdadm state all
- 正常:
- Secondary/Primary
- Primary/Secondary
- 異常:
- Secondary/Secondary
- Primary/Unknown
- Secondary/Unknown
drbdadm cstate all
- 正常:
- Connected
- 異常:
- StandAlone
- 待機状態
- WFConnection
- 一度何かで切断された状態?おそらくdrbdadm connect allとかで直るはず
drbd 復旧
secondary側で
drbdadm invalidateはdrbdが非同期になったことを判断させるコマンド。
(drbdadm attach allは不要かも)
drbdadm down all drbdadm attach all drbdadm invalidate all drbdadm up all drbdadm connect all
primary側で
- status確認
drbdadm cstate all
- 再接続
drbdadm connect all
SyncSourceになって同期が始まればOK。
こんな感じ?
同期する速度が遅い問題
drbd.conf にsyncer を
syncer { rate 100M; }
こんな風に設定していても、再同期の速度が ひどく遅いときがある。どうも再同期している時に(?) syncer の設定を読んでなくて、default の設定で同期されているようなので設定を反映させる。primary、secondary 両方で以下のコマンド実行。
drbdadm adjust all
20091228 追記
適当にメモった割には、参考にしてくださっている人がいて大変恐縮です。(記憶が定かではないですが)このエントリを書いた経緯は実際に障害が起きたときのメモではなく、構築中のサーバで意図的にdual masterな状態を発生させて、その後どうやって直せばいいのかを確認してなんとなく書いてたような気がします。ですが、参考になったとコメント頂いてるので、この方法で概ね問題はないかなーと思ってます。
あと、DRBDユーザーズガイドにもスプリットブレイン(両ノードがプライマリになってしまう)からの回復手順が書いてあるので、ここも参考になるかと思います。
DRBDユーザーズガイド: スプリットブレインからの手動回復
- 変更データを破棄したいサーバ (セカンダリにしたいサーバ)
drbdadm secondary resource drbdadm -- --discard-my-data connect resource
- 生存ノード (プライマリにしたいサーバ)
drbdadm connect resource