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

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

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

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

handlerはシステムに存在する任意の実行可能ファイルです。

DRBDバージョン8.2.6以降では、 DRBDディストリビューションにスプリットブレインハンドラのスクリプトが含まれており、 /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でスプリットブレインからの自動復旧ポリシーを設定する際には、 DRBDにはこのために複数の構成オプションがあることにご注意ください。 スプリットブレインを検出すると、 DRBDがプライマリロールのノードの数にもとづいて スプリットブレイン回復手続きを適用します。 このためにDRBDが次のキーワードを調べます。 これらはすべてリソースのnet構成セクションに含まれています。

  • after-sb-0priスプリットブレインは検出されますが、 この時点ではいずれのホストでもリソースがプライマリロールになっていません。 このオプションでは、DRBDが次のキーワードを認識します。

    • disconnect自動復旧は実行されません。 split-brain ハンドラスクリプト(設定されている場合)を呼び出し、 コネクションを切断して切断モードで続行します。

    • discard-younger-primary最後にプライマリロールだったホストに加えられた変更内容を 破棄してロールバックします。

    • discard-least-changes変更が少なかったほうのホストの変更内容を 破棄してロールバックします。

    • discard-zero-changes変更がなかったホストがある場合は、 他方に加えられたすべての変更内容を適用して続行します。

  • after-sb-1priスプリットブレインが検出され、 その時点で1つのホストでリソースがプライマリロールになっています。 このオプションでは、DRBDが次のキーワードを認識します。

    • 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;
    ...
  }
  ...
}