スプリットブレイン時の動作の設定

スプリットブレインの通知

スプリットブレインが検出されると、 DRBDはつねにsplit-brainハンドラを呼び出します(設定されている場合)。このハンドラを設定するには、リソース構成に次の項目を追加します。

resource resource
  handlers {
    split-brain handler;
    ...
  }
  ...
}

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つのノードがプライマリロールである場合に適用されるポリシーを定義します。次のキーワードを指定できます。

    • disconnectafter-sb-0priと同様に、 split-brainハンドラスクリプト(構成されている場合)を呼び出し、コネクションを切断して切断モードで続行します。

    • consensusafter-sb-0priで指定したものと同じ復旧ポリシーが適用されます。これらのポリシーを適用した後で、スプリットブレインの犠牲ノードを選択できる場合は自動的に解決します。それ以外の場合は、disconnectを指定した場合と同様に動作します。

    • call-pri-lost-after-sbafter-sb-0priで指定した復旧ポリシーが適用されます。これらのポリシーを適用した後で、スプリットブレインの犠牲ノードを選択できる場合は、犠牲ノードでpri-lost-after-sbハンドラを起動します。このハンドラはhandlersセクションで設定する必要があります。

    • discard-secondaryこれはクラスタからノードを強制的に削除します。

  • after-sb-2priスプリットブレインが検出されたときに両ノードともプライマリロールである場合に適用されるポリシーを定義します。 このオプションはafter-sb-1priと同じキーワードを受け入れます。ただし、discard-secondaryconsensus は除きます。

[注記]注記

上記の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;
    ...
  }
  ...
}