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

ノード間の接続が可能になると、ノード間で初期ハンドシェークのプロトコルが交換されます。この時点で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つのノードが再び完全に一致した冗長レプリケーションストレージシステムとして機能します。