はじめに
NSO 5.7 では、HA クラスタにスプリットブレイン対策が実装されました。
これまでの NSO の HA クラスタでは、アクティブなプライマリノードとスタンバイノード間のネットワーク通信が遮断されると、スタンバイノードはプライマリノードに障害が発生したと見なしてアクティブノードに昇格しました。
この時、障害の発生ポイントが両ノード間のネットワーク通信のみで、実際にはプライマリノードは正常に稼働していた場合、両ノードがそれぞれアクティブノードとして稼働し、ノード間の CDB の一貫性が保たれなくなる状態、すなわちスプリットブレイン状態となることがありました。
NSO 5.7 の HA クラスタでは、ルールベースのコンセンサスアルゴリズムにより、スプリットブレイン状態を回避する機能が追加実装されています。
クラスタの構成
NSO 5.7 の HA クラスタは、3 台のノードで構成され、それぞれ以下の役割を持ちます。
(2 ノード構成とすることも可能です。末尾の補足をご確認ください。)
Nominal master
プライマリノードに相当します。通常運用状態ではこのノードがアクティブノードになります。
Failover master
スタンバイノードに相当します。プライマリノードとのネットワーク通信が遮断されると、このノードがアクティブノードに昇格します。
Perpetual slave
一般的なフェールオーバークラスターにおけるクォーラムの機能を持ちます。
構成例
以下の例では、 nominal master (n1)、failover master (n2)、perpetual slave (n3) の 3 台の NSO サーバーで構成された HA クラスタを示します。
admin@ncs% show high-availability
ha-node n1 {
address 192.168.0.1;
nominal-role master;
}
ha-node n2 {
address 192.168.0.2;
nominal-role slave;
failover-master true;
}
ha-node n3 {
address 192.168.0.3;
nominal-role slave;
}
settings {
enable-failover true;
}
admin@ncs% set high-availability settings consensus enabled
admin@ncs% show high-availability settings consensus | details
enabled;
algorithm rule-based;
admin@ncs% commit
Commit complete.
クラスタの動作
正常運用時
正常運用時、show high-availability コマンドで各ノードの状態を確認すると、以下のような出力となります。
high-availability status mode が、nominal master n1 でのみ master と表示されている点にご留意ください。
$ ssh –p2024 –ladmin 192.168.0.1
admin@n1> show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id n1
high-availability status assigned-role master
high-availability status read-only-mode false
ID ADDRESS
---------------
n2 192.168.0.2
n3 192.168.0.3
$ ssh -p2024 –ladmin 192.168.0.2
admin@n2> show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id n2
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id n1
high-availability status read-only-mode false
$ ssh –p2024 –ladmin 192.168.0.3
admin@n3> show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id n3
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id n1
high-availability status read-only-mode false
Nominal master との疎通が遮断された時
Nominal master n1 との疎通が遮断された場合、failover master n2 がアクティブに昇格します。
high-availability status mode が、failover master n2 で master と表示されている点にご留意ください。
$ ssh –ladmin 192.168.0.1
admin@n1$ sudo systemctl stop ncs
admin@n1$
$ ssh –p2024 –ladmin 192.168.0.2
admin@n2> show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id n2
high-availability status assigned-role master
high-availability status read-only-mode false
ID ADDRESS
---------------
n3 192.168.0.3
$ ssh –p2024 –ladmin 192.168.0.3
admin@n3> show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id n3
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id n2
high-availability status read-only-mode false
Nominal master、および Slave との疎通が遮断された時
Nominal master n1、および Slave n3 との疎通が遮断された場合、failover master n2 はアクティブに昇格しますが、CDB の変更ができないよう、ロックされます。
high-availability status read-only-mode が、true と表示されている点にご留意ください。
一般的に、n1、n3 2 台との接続が同時に遮断された場合、各サーバー間のネットワークに障害が発生した、つまり、スプリットブレイン状態となった可能性が高いと考えられます。
NSO 5.7 の HA クラスタは、このような方式によってスプリットブレイン状態を回避し、各ノード間の CDB の一貫性を担保するように実装されています。
$ ssh –ladmin 192.168.0.3
admin@n3$ sudo systemctl stop ncs
admin@n3$
$ ssh –p2024 –ladmin 192.168.0.2
admin@n2> show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id n2
high-availability status assigned-role master
high-availability status read-only-mode true
この状態で、Slave n3 との疎通が回復すると、CDB のロックが解除され、failover master n2 は通常のアクティブノードに復帰します。
high-availability status read-only-mode が、false と表示されている点にご留意ください。
$ ssh –ladmin 192.168.0.3
admin@n3$ sudo systemctl start ncs
admin@n3$
$ ssh –p2024 –ladmin 192.168.0.2
admin@n2> show high-availability
high-availability enabled
high-availability status mode master
high-availability status current-id n2
high-availability status assigned-role master
high-availability status read-only-mode false
ID ADDRESS
---------------
n3 192.168.0.3
$ ssh –p2024 –ladmin 192.168.0.3
admin@n3> show high-availability
high-availability enabled
high-availability status mode slave
high-availability status current-id n3
high-availability status assigned-role slave
high-availability status be-slave-result initialized
high-availability status master-id n2
high-availability status read-only-mode false
補足
本稿の例では、slave n3 を含む 3 ノードクラスタをご紹介しましたが、n3 を配置せず 2 ノード構成とすることも可能です。
この場合、failover master n2 は、n1 とのネットワークが遮断されるとアクティブに昇格しますが、CDB の変更ができないよう、ロックされたままの状態となります。
CDB のロックは、/high-availability/read-only アクションで mode を false に変更することで、手動で解除することができます。
詳細に関しましては、NSO 5.7 Administration Guide のセクション NSO built-in HA をご参照ください。