スプリットブレインが検出されると、 DRBDはつねにsplit-brainハンドラを呼び出します(設定されている場合)。このハンドラを設定するには、リソース構成に次の項目を追加します。
resourceresourcehandlers { split-brainhandler; ... } ... }
handlerはシステムに存在する任意の実行可能ファイルです。
DRBDバージョン8.2.6以降では、/usr/lib/drbd/notify-split-brain.sh という名前のスプリットブレインハンドラが提供されています。これは指定したアドレスに電子メールで通知を送信するだけのシンプルなものです。root@localhost (このアドレス宛のメールは実際のシステム管理者に転送されると仮定)にメッセージを送信するようにハンドラを設定するには、 split-brain handlerを次のように記述します。
resource resource
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
...
}
...
}
実行中のリソースで上記の変更を行い(ノード間で設定ファイルを同期すれば)、後はハンドラを有効にするための他の操作は必要ありません。次にスプリットブレインが発生すると、 DRBDが新しく設定したハンドラを呼び出します。
スプリットブレインからの自動復旧ポリシーには、状況に応じた複数のオプションが用意されています。DRBDは、スプリットブレインを検出したときのプライマリロールのノードの数にもとづいてスプリットブレイン回復手続きを適用します。以下のオプションは設定ファイルのnetセクションに記述します。
after-sb-0pri. スプリットブレインが検出されたときに両ノードともセカンダリロールの場合に適用されるポリシーを定義します。次のキーワードを指定できます。
disconnect. 自動復旧は実行されません。split-brain ハンドラスクリプト(設定されている場合)を呼び出し、コネクションを切断して切断モードで続行します。
discard-younger-primary. 最後にプライマリロールだったホストに加えられた変更内容を破棄してロールバックします。
discard-least-changes. 変更が少なかったほうのホストの変更内容を破棄してロールバックします。
discard-zero-changes. 変更がなかったホストがある場合は、他方に加えられたすべての変更内容を適用して続行します。
after-sb-1pri. スプリットブレインが検出されたときにどちらか1つのノードがプライマリロールである場合に適用されるポリシーを定義します。次のキーワードを指定できます。
disconnect. after-sb-0priと同様に、 split-brainハンドラスクリプト(構成されている場合)を呼び出し、コネクションを切断して切断モードで続行します。
consensus. after-sb-0priで指定したものと同じ復旧ポリシーが適用されます。これらのポリシーを適用した後で、スプリットブレインの犠牲ノードを選択できる場合は自動的に解決します。それ以外の場合は、disconnectを指定した場合と同様に動作します。
call-pri-lost-after-sb. after-sb-0priで指定した復旧ポリシーが適用されます。これらのポリシーを適用した後で、スプリットブレインの犠牲ノードを選択できる場合は、犠牲ノードでpri-lost-after-sbハンドラを起動します。このハンドラはhandlersセクションで設定する必要があります。
discard-secondary. これはクラスタからノードを強制的に削除します。
after-sb-2pri. スプリットブレインが検出されたときに両ノードともプライマリロールである場合に適用されるポリシーを定義します。
このオプションはafter-sb-1priと同じキーワードを受け入れます。ただし、discard-secondaryとconsensus は除きます。
![]() | 注記 |
|---|---|
上記の3つのオプションで、DRBDは追加のキーワードも認識しますが、これらはめったに使用されないためここでは省略します。ここで取り上げた以外のスプリットブレイン復旧キーワードについては、 drbd.conf(5)を参照してください。 |
たとえば、デュアルプライマリモードでGFSまたはOCFS2ファイルシステムのブロックデバイスとして機能するリソースの場合、次のように復旧ポリシーを定義できます。
resource resource {
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root"
...
}
net {
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
...
}
...
}