フェイルオーバー シナリオを設定するために MySQL をレプリケートまたはクラスタ化するにはどうすればよいですか?

フェイルオーバー シナリオを設定するために MySQL をレプリケートまたはクラスタ化するにはどうすればよいですか?

ドイツのプロバイダーから大規模なデータ障害が発生したため、フェイルオーバー シナリオに対処せざるを得なくなりました。しかし、実際に答えが見つからない質問がいくつかあります。誰か助けていただければ幸いです。

現在、server1 では、別々の Docker コンテナで 2 つの MySQL データベースを実行しています。これらは、2 番目のサーバーに複製される必要があります。server1 に障害が発生した場合は、ClusterIP を介して比較的迅速に server2 に切り替えることができます。

知っておくべき重要な点: データベースを使用するソフトウェアは、データベースに対して大量の書き込み操作を実行するスポーツ競技管理システムです (テストは行われていませんが、読み取り操作で書き込みは行われません)。

私にとっての疑問は次の通りです。

  • どのレプリケーション方法が最も適していますか?
  • 私の理解では、MASTER <-> MASTER が最も適切でしょう。しかし、問題が発生する可能性があることもここで何度も読みました。
  • MASTER <-> SLAVE の場合、スレーブは読み取りのみ可能であるという疑問が生じます。マスターに障害が発生した場合はどうなりますか? スレーブは自動的にマスターになり、書き込みもできるようになりますか?
  • それとも、クラスターが最善の解決策でしょうか? 現時点では、アクティブなノードは 1 つだけです。将来的には、米国に別の DB ノードが追加される可能性があります。ただし、現時点では存在しません。

すぐに機能するソリューションが必要であり、この一般的なトピックは非常に大きく、それほど簡単ではないと思われるため、どのようなご助力も本当にありがたく思います。

答え1

あなたは2つの問題を提起しています。

MySQL トポロジ順番に(OKからベストまで)

  • プライマリ -> レプリカ - 「フェイルオーバー」は実現できますが、手作業が必要となり、時間がかかります。
  • プライマリ <=> プライマリ - セットアップが少し複雑になりますが、他のサーバーを「即座に」使用できます。
  • 少なくとも 3 台のサーバーのクラスター。これにより、フェイルオーバーがさらに自動化されます。「InnoDB CLuster」(MySQL 8) または「Galera」(MariaDB に付属) を参照してください。

地理 - データ センターでも障害が発生する可能性があることに注意してください。たとえば、フロリダ州のどのくらいの範囲が、1 回のハリケーンでオフラインになる可能性がありますか?

「スプリット ブレイン」シナリオに注意してください。これは、サーバーが 2 台しかなく、両方とも正常に動作しているが、ネットワークがダウンしている状況です。サーバーもユーザーも状況がわかりません。各サーバーが、自分だけが動作しているサーバーであると判断して書き込みを続行すると、混乱が生じます。そのため、代わりに、システム全体がダウンしていると想定する必要があります。

結論として、物理的に分離された少なくとも 3 台のサーバーが必要です。

プロキシ

問題は依然としてクライアントデータベース システムのどの部分がアクティブであるか (読み取りおよび/または書き込み) を知ること。「読み取り」のみが重要な場合は、任意の数のレプリカを持つ多くのトポロジで十分であり、「無制限」のスケーリングが提供されます。「書き込み」こそが真の課題です。

1 台のサーバーがダウンしていることを検知し、別のサーバーに再ルーティングするという「適切な処理」を実行するのが得意なサードパーティ製品がいくつかあります。それらを調べてください。

コーディング

障害が発生すると、コードに何らかのエラーが発生する可能性があります。エラーをチェックする必要があります。エラーの中には、自動的に修復されないものもあります。また、ほとんどのネットワーク エラーは、気づくまでに時間がかかります。

関連情報