web-dev-qa-db-ja.com

MySQL Clusterで高可用性を実現するにはどうすればよいですか?

この質問は、サーバーのインストール方法やその機能に関するものではなく、設計上の質問です。

だから私はMySQLサーバーのクラスターを持っています。
DNSレコード "data.example.com"もあります。

MySQLクラスターにはつのMySQL /クエリノード(アプリケーションが接続するクラスターのエンドポイント)があります。
その背後には、そのクラスターの残りのサーバー(データ/管理)があります。

目的はこのクラスターを1つの固体ユニットとして扱う(外部の観点から)です。

ここで、外部アプリ(Webサーバーなど)がデータベースに対して動作(書き込み/読み取り)したいと考えています。手順は次のとおりです。
1)DNS「data.example.com」を解決します。
2)IPに接続します(これはSQLノードです)。
3)作業を行います。

最初の問題発生する、より簡単なものは次のとおりです。
その単一のDNSを介して3つのSQLノードすべてを公開するにはどうすればよいですか?
-DNSサーバーレベルでのラウンドロビン?
-SQLノードの3つのIPを指すようにそのDNSレコードを設定しますか?

2番目の問題発生します。DNSが10.0.0.7に解決されたとしましょう。これは、3つのSQLノードのうちの1つにすぎません。そのノードがダウンした場合はどうなりますか?
クラスター全体はまだ問題ありませんが、そのノードに接続しようとするアプリケーションは、そのノードが実際にダウンしているため、クラスターを「ダウン」と見なし、「高可用性」を失っています。

だから私の質問は簡単です:
問題を解決するために何をしますか?詳細に説明してください。複雑さは私を怖がらせません:)

ここで負荷分散などについて質問しますが、この質問を「オープン」にして、より幅広い解決策を聞くことをお勧めします。ありがとう!

1
Poni

高可用性は通常、VIP(仮想IPアドレス)と呼ばれるものを使用して行われます。したがって、このIPは、各クラスターに割り当てられた "staticly"とは異なる必要があります。ノード。このVIPは、使用している高可用性ソリューションによって "動的"に割り当てられる必要があります。したがって、この場合、1つのノードのみがリクエストを処理します。そのノードに障害が発生すると、高可用性ソフトウェアがVIPをクラスター内の別のノードに割り当てます。これにより、あるノードからのフェイルオーバー中のごく一部の時間を除いて、ダウンタイムが発生することはありません。他のノードへ。

負荷分散を行う場合は、2つの負荷分散ノードと少なくとも2つのクラスターノードが必要になります。 VIPは、負荷分散ノードの1つに割り当てられます。アプリケーション要求は、負荷分散ノードの1つを介してクラスターノードに送信されます。

心配すべき重要な点は、特に負荷分散のシナリオでのクラスターノード間のデータ同期です。たとえば、あるノードに書き込み、別のノードから読み取りを行っているとします。もちろん、これは適切な同期/負荷分散メカニズムが適用されない限り機能しません。

編集:

VIPは通常、高可用性ソフトウェアによってクラスター内のアクティブノードに割り当てられたプライベートIPアドレスです。これは、各ノードの元のIPとは異なるIPアドレスです。単純な場合もあります。同じサブネットから割り当てられます。クラスターノードにNATを介してアクセスできるようにする場合は、パブリックIPアドレスをVIPにNATする必要があります。これは、アクティブノードがどちらであるかに関係なくサービスにアクセスできるようにするために重要です。

1
Khaled

SQLノードの負荷を分割し、DNSをそのロードバランサーのIPアドレスに解決するには、ロードバランサーをデプロイする必要があります

0
m0ntassar