web-dev-qa-db-ja.com

PerconaXtraDBクラスターノードのリカバリ

XtraDBクラスタリングを確認し、P.o.Cを作成しました。 4つのインスタンスを使用するOpenstack上の環境。これは、レジリエンステスト中にフォールオーバーしました。

Pxcのドキュメントによると: http://www.percona.com/doc/percona-xtradb-cluster/howtos/virt_sandbox.html これは私が4番目に選んだ3ノードのインストールをカバーしています。

  1. 初期セットアップの完全なデータロードテストに合格し、1.6GBのテストSQLファイルを使用してすべてのノードが同期的に更新されてデータベースがロードされました。
  2. ノードの障害と復元が開始されました。このテストでは、ノードでmysqlサービスを停止し、データベースを作成してからドロップし、存続しているノードレプリケーションをテストし、ダウンしたノードを起動して再同期しました。[.____]
    1. これはノード4、3、2で正常に機能しました。
    2. Pxcドキュメントごとに本質的にコントローラーであるNode1は、クラスターに再参加しません。

だから私の質問は次のとおりです:

  1. 存続しているノードにデータが書き込まれた場合に、コントローラーノードをサービスに戻す方法
  2. 4つのノードを参照として使用して、node1のこの単一障害点を削除する方法はありますか? (生き残ったノードがコントローラー(node1)のダウン/非同期で再起動した場合、そのノードも失敗します)。
2
Oneiroi

ノード1の症状に基づいて、使用しています

 wsrep_cluster_address = gcomm:// 

構成ファイル内。これは、ノードが新しいクラスターを開始することを意味します。これは、wsrep_cluster_size変数がnode1で1、その他で3であることで確認できます。 node1を既存のクラスターに参加させる場合は、次のように指定する必要があります

 wsrep_cluster_address = gcomm://(ここで実行中のノードのIP)

この場合、node1はクラスターに再参加します。

いくつかの追加の考え:

  • PXC(Percona Xtradb Cluster)のクォーラムメカニズムのため、4ノードで実行することはお勧めしません。奇数のノードを使用することをお勧めします。これにより、ネットワーク分割の場合、分割されたクラスターの一部が過半数を占めることができます。

  • Wsrep_cluster_addressの代わりに、[mysqld_safe]セクションでwsrep_urlsを使用できます。

免責事項:私はPerconaで働いています。

6
Peter Boros

この問題をさらに調査すると、これは実行可能な方法のようです(誰かがより良い設定で返信した場合に備えて、この回答は今のところ受け入れられません)。

  1. 循環セットアップ
    1. pxcごとのドキュメントでは、すべてのノードがノード1から同期されます
    2. node2を停止してnode3を再ポイントし、node2を開始します
    3. node3を停止してnode4を再ポイントし、node3を開始します
    4. node1を停止してnode2を再ポイントし、node1を開始します

この設定は、少なくとも切断によるノードの損失を許容し、ノードの復元時に問題なく同期するように見えます。

1
Oneiroi