web-dev-qa-db-ja.com

MySQLCluster-管理Node冗長性

サービスプロバイダーのネットワーク用に完全に冗長なMySQLCluster実装を設計しようとしています。このクラスター内のノードは、サービスプロバイダーが存在する州の町の間で地理的に分離されます。 MySQLClusterにGeographicReplicationを使用するには非同期レプリケーション構成が必要であることを理解していますが、クラスターノードが存在する2つのデータセンターは高帯域幅(10Gbps)、低遅延パイプ(〜2ms)を介して接続されているため、私の目標はこれらのデータセンター間で地理的な多様性と同期レプリケーションがあります。

データセンターごとのノードは次のように分類されます。

データセンターA:

  • 管理Node 1
  • SQL(API)ノード1および2
  • データNode 1(ノードグループ1)およびデータNode 2(ノードグループ2)

データセンターB:

  • 管理Node 2
  • SQL Node 3
  • データNode 3(ノードグループ1)およびデータNode 4(ノードグループ2)

このシナリオでは、各ノードグループのノードが各データセンターに存在し、ノードグループ1(データセンターAまたはBのいずれか)の特定のデータノードの半分が存在することを考慮すると、データノードの冗長性は強力です(私は信じています)。この同じデータセンター内の他のノードグループのデータノードがデータの残りの半分を持っている間、データ。データセンターを分解する分離イベントまたはその他のタイプの障害の場合、各場所には少なくともデータの完全なコピーがあります。

私の懸念は、各データセンターに管理ノードを配置することです。管理ノードの冗長性がこの方法で最適に実装されているかどうかはわかりません。私がMySQLClusterについて理解していることから、データセンターの1つ(たとえばデータセンターA)で分離イベントが発生し、これら2つの場所間の接続が失われた場合、データセンターBのデータノードは次の管理ノード2を調べ始めます。このデータセンターは、元々はアービトレーターであったデータセンターAの管理ノード1ではなく、アービトレーターとして機能します。

私の考えでは、この状況はスプリットブレイン操作を作成します。各データセンターは独自のアービトレーターを監視しているため、クラスター内のすべてのデータノードがまだ有効になっていますが、保存場所の半分しか書き込まれていません。に。同期環境を壊します。

代わりに、別の物理リソースのデータセンターAに冗長管理ノードを配置する必要がありますか、それともクラスターのロジックについて何も変更しませんか?先に進み、代わりにデータベースの非同期レプリケーション環境を作成し、2つの地理的な場所の間でクラスターを分割するのではなく、各データセンターに独自のクラスターを格納する必要がありますか?

警告:これは私の最初のデータベースプロジェクトなので、私はこのようなものにまったく慣れていません。私はこの設計実装を完全に破壊しているかもしれません。

1
Chris Telinde

脳の半分の状況で正確に分割した場合、MySQL Clusterはそれを解決し、1つのノードをマスターとして指定します。以下のndb_mgm出力を調べると、ノード10行の終わりにアスタリスクがあります。マスターをマークします。

これは、クラスターが2つの等しい部分に分割される場合、マスターを含む半分が実行を継続することを意味します。残りの半分のノードはシャットダウンされます。

ndb_mgm> show
Connected to Management Server at: 10.1.1.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=10   @10.1.1.20  (mysql-5.6.24 ndb-7.3.9, Nodegroup: 0, *)
id=11   @10.1.1.21  (mysql-5.6.24 ndb-7.3.9, Nodegroup: 0)
0