MySQL クラスタを完全にフェイルセーフにするにはどうすればよいでしょうか?

MySQL クラスタを完全にフェイルセーフにするにはどうすればよいでしょうか?

そこで、高可用性を備えた MySQL データベース サーバーをセットアップしたいと考え、2 台のデバイス (Banana Pi) を入手し、MySQL クラスター ソフトウェアのインストール方法に関するチュートリアルに従いました。2 台のデバイスの組み合わせは、MySQL クラスターの本来の使用方法ではないことは承知していますが、ハードウェア コストを節約するために、今のところは 2 台のデバイスのみを入手しました。

これまでのところ、次の構成になっています (sqlnode1 と sqlnode2 はデバイスのホスト名です)。

管理ノード (ndb_mgmd):

  • sqlnode1 (ノードID: 1)
  • sqlnode2 (ノードID: 2)

ストレージ エンジン (ndbd):

  • sqlnode1: ローカルホストの管理ノードを使用するように構成されています (ノード ID: 3)
  • sqlnode2: ローカルホストの管理ノードを使用するように構成されています (ノード ID: 4)

MySQL サーバー (mysqld):

  • sqlnode1: 両方の ndbd ノードを使用するように構成されています (ノード ID: 5)
  • sqlnode2: 両方の ndbd ノードを使用するように構成されています (ノード ID: 6)

つまり、基本的にすべてのデバイスで ndb_mgmd、ndbd、mysqld が稼働しています。

私が実現したいのは、デバイスの 1 つに障害が発生した場合でも、他のデバイスが完全に使用可能であることです (いくつかの非常に特殊な理由により、ここでは単純なデータベース レプリケーションを使用できません)。

すべてのコンポーネントを起動すると、すべて正常に動作します。1 つの MySQL ホストでデータを変更すると、もう 1 つのホストでもその変更が直ちに適用されます (その逆も同様)。

ただし、いずれかのデバイスの LAN ケーブルを外すと、次のようになります。

  • sqlnode2 を切断しています: 機能しているノード (sqlnode1) は短時間ハングしますが、その後は正常に動作し続けます (基本的にこれが私の希望です)
  • sqlnode1の切断: 機能しているノード(sqlnode2)が短時間ハングし、その後まったく機能しない- すべてのクエリは「4009 Cluster Failure」で終了し、クエリは、切断されたノードのネットワーク接続が復元された後にのみ再び機能し始めます。その後、ndb_mgmd デーモンを監視すると、ノード ID 4 (sqlnode2 上の ndbd) が強制的にシャットダウンされたことがわかります。

要約すると、システム全体が sqlnode1 に依存しているように見えますが、コンポーネントがドロップアウトしても (同じタイプの別のコンポーネントが利用可能であれば) すべてが引き続き実行されると考えていたため、なぜこのようなことが起こるのか本当に不思議です。

2 つの異なる管理ノードを設定するには、次のチュートリアルに従いました。http://www.clusterdb.com/mysql-cluster/deploying-mysql-cluster-over-multiple-hosts

何か見逃したのでしょうか? あるいは、MySQL クラスタリングの仕組みを誤解していたのでしょうか?

答え1

私はMySQL Clusterを使ったことがありませんが、MySQL Clusterではレプリケーションが実行できるはずです。また、レプリケーションだけが必要な場合、MySQL Clusterはおそらく必要以上の機能を提供します。MySQL Clusterには、1つのSQLサーバーがダウンした場合に別のSQLサーバーに即座にルーティングする機能があるため、ホスト名のDNSレコードを毎回変更したり、一時的なSQLサーバーを設定したり、修復されるまでそのまま放置したりする必要性が減ります。他の機能も使用できます。そのため、MySQL ClusterよりもユーザーフレンドリーなMySQLコミュニティエディションを使用することをお勧めします。

mysql コミュニティ エディションを入手してください。これにより、レプリケーションが可能になります。したがって、1 つの mysql サーバーをマスターとして設定し、すべての編集を行い、2 番目の mysql サーバーをスレーブとして設定し、マスターが持っているものを構成可能な間隔で取得できます。将来的にも、スレーブを簡単に追加できます。また、スレーブは必ずしも別のマシン上にある必要はなく、MySQL のインスタンスを複数実行できます。ただし、これではレプリケーションの目的が損なわれ、フェイルセーフになります。これがおそらく、あなたが探しているものです。また、mysql の Web サイトには、mysql コミュニティ エディションのレプリケーションを設定するためのガイドがあります。

MySQL コミュニティ サーバー

答え2

私は、まさに私が望んでいること、必要としていることを実現していると思われる Galera MySQL クラスターに切り替えることで問題を解決しました。

関連情報