スプリットブレインからの手動回復

接続が再度可能になると、DRBD がスプリットブレインを検出し、 対向ノード間でDRBDの初期プロトコルハンドシェークが交換されます。 両方のノードがプライマリロールであること (または切断中のある時点でプライマリロールであったこと)を検出すると、 DRBDは即座にレプリケーション接続を切断します。 その場合、システムログにたとえば次のようなメッセージが記録されます。

Split-Brain detected, dropping connection!

スプリットブレインが検出されると、 1つのノードが必ず StandAlone接続状態でリソースを保持します。 もう1つのノードは、 同様にStandAlone状態になるか(両方のノードが同時にスプリットブレインを検出した場合)、 または WFConnection 状態になります (一方のノードのスプリットブレインを検出する前に対向ホストが切断した場合)。

DRBDがスプリットブレインから自動的に回復するように設定されていない場合は、 この時点で手動で介入して、変更内容を破棄するほうのノードを選択する必要があります (このノードは スプリットブレインの犠牲ノードと呼ばれる)。 この介入は次のコマンドで行います。


drbdadm secondary resource 
drbdadm -- --discard-my-data connect resource

他方のノード( スプリットブレインの生存ノード)の接続状態も StandAlone の場合は、次のコマンドを入力します。


drbdadm connect resource

ノードがすでにWFConnection状態の場合は自動的に再接続するので、 この手順は省略できます。

スプリットブレインの影響を受けるリソースが、 スタックリソースの場合は、 単なるdrbdadmではなく drbdadm --stackedを使用します。

接続すると、スプリットブレインの犠牲ノードの接続状態が すぐにSyncTargetに変化し、 残ったプライマリノードによって変更内容が上書きされます。

[注意]注意

スプリットブレインの犠牲ノードは、 デバイスのフル同期の対象にはなりません。 代わりに、ローカル側での変更がロールバックされ、 スプリットブレインの生存ノードに対して加えられた変更が犠牲ノードに伝播されます。

再同期が完了すると、スプリットブレインが解決したとみなされ、 2つのノードが再び完全に一致した冗長レプリケーションストレージシステムとして機能します。