MySQL-Cluster(NDB)の設定について説明が必要です
完全なHAを実現したいのですが、サーバーの予算が少なく、取り組んでいる単純なソリューションのために数十台のサーバーを借りる余裕がありません。
1つのノードに障害が発生した場合に完全なHAを実現するためのホストの最小数はいくつですか?
つまり、単一の物理サーバーに障害が発生しても、クラスターはエラーなしで引き続き動作するはずです。障害が発生したサーバーは、任意のMySQL Clusterコンポーネント(管理、SQL、またはデータ)である可能性があります
極端なパフォーマンスは必要ありません。少数のサーバーでのサーバー障害処理を完全に自動化するだけです。
MySQL Clusterのドキュメントから、少なくとも2つの完全なデータコピー(レプリカ)が必要であることを知っています。 1つのレプリカを複数のホストに配置する必要がありますか?
4台のサーバーでHAを実現できますか? 2つの管理ノード(小さなVPSの一種)+ 2つの物理サーバーでそれぞれSQLおよびデータノードを実行していますか?
MySQLマスタースレーブを知っていますが、自動フェイルオーバーを提供せず、アプリケーションの書き換えが必要です
あなたは本当に探している "HA"のレベルを定義する必要があります量的に-ある人の「夜に寝ること」は別の人の「これ」です-カードの家」。
システムの最小数は2です。-アクティブレプリカとスタンバイレプリカ(フェイルオーバーを処理する heartbeat またはカスタム作成スクリプトなど)。
MySQLクラスタでは、これは少なくとも2つのSQLノードと2つのデータノードを意味します(いずれかのノードで障害が発生した場合でもリクエストの処理を継続するため)。 (管理サーバーの機能の冗長性も必要な場合は、そのうちの2つも必要になります)。
ここでの重要な部分は開発環境でのフェイルオーバーのテストです-つまり、少なくともさらに2台のマシン(または仮想マシン)。また、アップグレードおよびメンテナンスプロセスをテストして、意図しない結果を引き起こさないことを確認する必要があります(理想的には、開発でテストおよび実証されていない本番環境に対しては何もすべきではありません)。
適切にテストできなかった場合、フェイルオーバーがトリガーされる可能性があります。これは、フェイルオーバーの手続き上の(場合によってはビジネス上の)コストが発生することを意味します。通常、以前のアクティブサーバーを再構築して新しいスタンバイサーバーにする必要があります。
これにより、ハードウェア障害(電源、NIC、ディスク、スイッチ(それらが別々のスイッチ上にある場合))から保護されます。
これはDBサーバーに適用されるだけではないことに注意してください-* EVERYTHINGの2つが必要です:Webサーバー、DBIサーバー、ファイアウォール、DNSサーバー。 ..
スタックに単一の障害点が多数ある場合、1つのコンポーネントの冗長性は意味がありません。
次のレベルの保護はネットワーク障害です(「ISPがダウンした場合はどうなりますか?」)。これには、リモートのデータセンターに冗長環境全体を複製する必要があります。
ここで重要なのは、ネットワーク接続や電力などを多様化することです。メインの施設と同じ電力とファイバーが供給されている通りの向こう側にスタンバイデータセンターを配置したくありません。
私が相談した会社には、DRに使用されるリモート施設が「少なくとも経度15度離れている」(つまり、「次のタイムゾーン内」)必要があるという要件がありました。米国の一般的な慣行は、イーストコースト/ウェストコースト、またはニューヨーク/シカゴLA /テキサスです。
その上の次のレベルは、真に分散されたリソース(Googleを考える)であり、レプリケーションとシャーディング(MongoDBを考える)をサポートするデータベースシステムが必要です。
適切に実装されている場合、本当の「機能停止」の可能性はほとんどありませんが、サービスが低下したり、回復に時間がかかる場合があります。
あなたの質問への回答:2。
これらすべてのデータ、SQL、および管理ノードは、単一のマシンで実行できます。このような3ノードマシンが2つあれば、完全な冗長性が得られます。
NDBはインメモリであることを覚えておいてください。すべてのノードで障害が発生すると、「サービスが一時的に利用できなくなる」のではなく、「すべてのデータが永久に失われる」ということになります。そのような設定で夜にスリープするために必要なノードの数がわかりません。少なくとも一部のレプリケーションをディスクデータベースに追加します。
私の個人的な結論は、MySQLクラスターをまったく使用しないことでした。今日、たくさんのクラスター化されたデータベースがあります。
ネットワークが十分に堅牢であると確信している場合、完全なHAには2台の物理サーバーで十分です。それ以外の場合は、クラスターの調停のために追加の小さな物理サーバーが必要です。データノード間でネットワーク接続が失われた場合にスプリットブレインを回避するためです。
デフォルトで推奨されるレプリカの数は2です。これは、指定されたデータが「メイン」ノードと「バックアップ」ノードの2つのノードに格納されることを意味します。詳細は https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-ndbd-definition.html#ndbparam-ndbd-noofreplicas を参照してください。
私の現在のセットアップは、実際には4台のマシンです。
4つすべてで、管理ノードを実行します。
最初のノード(1、2)でWebアプリ+管理ノードを実行します
他のノード(3、4)では、data/management /およびsqlノード。
Webサーバーは、SQLノードの負荷分散されたIPを介して接続するため、常に1つがアクティブであると認識されます。私のために働く。
評価と開発の目的で、すべてのノードを単一のホストで実行できます。完全な冗長性とフォールトトレランスを実現するには、6台以上の物理ホストが必要です。
2 xデータノード2 x SQL/NoSQLアプリケーションノード2 x管理ノード多くのユーザーが管理ノードとアプリケーションノードを同じ場所に配置し、ノードの数を4つに減らしています。