web-dev-qa-db-ja.com

MySQLファブリックが単一障害点になるのを回避する

複数のMySQLサーバーノードを管理するMySQLファブリックをインストールして構成することができました。マスターノードに直接接続してテストし、データを操作(挿入、削除)したため、非常にうまく機能します。スレーブノードはマスターと同一になります。

これで、ファブリックサーバーがすべてを管理できるようになります。したがって、アプリケーションはマスターノードではなくファブリックに接続する必要があります。このようにして、マスターに障害が発生すると、ファブリックは新しいスレーブを指定します。

Q1:ファブリックサーバー自体が単一障害点になるのを防ぐにはどうすればよいですか?

Q2:ファブリックの実装経験がある人はいますか?私がやろうとしているのはベストプラクティスですか?

よろしく、

4
Nabeel

MySQLファブリックノード自体は現在冗長ではありませんが、 MySQLファブリックFAQ に記載されています。

現在、MySQLファブリックノードのインスタンスは1つだけです。そのプロセスが失敗した場合は、そのマシンまたは別のマシンで再起動し、状態とルーティング情報を既存の状態ストア(MySQLデータベース)または状態ストアの複製コピーから読み取ります。

MySQLファブリックノードは利用できませんが、ファブリック対応コネクタは、ルーティングデータのキャッシュされたコピーに基づいて、クエリとトランザクションを正しいMySQLサーバーにルーティングし続けます。ただし、プライマリに障害が発生した場合、MySQLファブリックノードがサービスに戻るまで自動フェイルオーバーは発生しないため、できるだけ早くプロセスを回復することが重要です。

ベストプラクティスの観点から、この MySQL Fabricブログの投稿 は、MySQLファブリックを使用するエンドツーエンドの作業例を提供し、次に MySQL Fabricのホワイトペーパー で概要をさらに追加しますおよびコンテキスト情報。

最後に、次のことができます MySQLファブリックウェビナーのリプレイを見て、Q&Aトランスクリプトを読んでください -いくつかの良い技術的な質問と回答があります。

このトピックに関する詳細なディスカッションを探している場合は、専用の MySQLファブリック、シャーディング、HA、ユーティリティ用のフォーラム もあります。

4
Andrew Morgan

私はこれが少し古いことを知っていますが、MySQLファブリックでいくつかのクラスターをセットアップすることを検討していたところ、同じ質問に遭遇しました。

私が見つけた最良の答えは、PacemakerとCorosyncを使用することです。それを決定した後、私は-幸運なことに-MySQL Utilities Manualに正確にそれを設定する方法に関するセクションがすでにあることを発見しました。

http://dev.mysql.com/doc/mysql-utilities/1.5/en/fabric-pacemaker.html

1
lusional

関連トピックの回答を探しているときにこの質問を見つけました。私がやったことは、MySQLファブリックコントローラーをマルチマスターレプリケーションを備えたサーバーのペアとして設定し、最初のサーバーのmysqlfabricプロセスでハートビートを探して再起動し、最初のサーバーの場合は2番目のサーバーのmysqlfabricを起動することです。再起動を拒否します。

なぜ機能するのか:

  • すべてのファブリック情報はファブリックコントローラデータベースに格納されるため、データベースを複製するとファブリックに冗長性が提供されます。
  • アクティブなシャード情報はコネクターにキャッシュされるため、コントローラーに障害が発生すると、基本的に管理、障害検出、および新しいセッションを追加する機能が失われますが、構成の変更が行われない限りセッションを実行する機能は失われます。
  • (2台目のマシンで)ファブリックコントローラーの2番目のインスタンスを再起動または起動するのに数秒しかかからないため、アプリケーションが何を試行するかを認識している限り、ユーザーに一時的な問題が発生することはほとんどありません。

機能しないもの:

  • サーバーにも障害が発生した場合、トランザクションが失敗するとトランザクションは失われます。つまり、コネクタはシャーディングとプライマリサーバーの情報をキャッシュしますが、その情報が変更されたかどうかはわかりません。これは少々用心深く聞こえるかもしれませんが、考えてみてください。ファブリックコントローラーは最も安定したプロセスではありませんが、ネットワークスイッチの問題またはデータを取り出す可能性のある問題が原因で失敗する可能性がある多くの状況があります。プール内のサーバー。

費用はいくらですか:

  • 手動介入が必要です。 (2番目のインスタンスが引き継いだ後に最初のインスタンスを再起動する必要はありません-すぐに壊滅的なものになるわけではありませんが、両方が実行されている間にいずれかのmysqlfabricインスタンスがサーバーの昇格などの管理を開始すると、災害の可能性が高くなります。 。)
  • 管理する権限マスクを2倍にします-mysqlサーバーレベル(mysqlfabric)ではこれは透過的ですが、たとえば、特定のip:portの組み合わせからのトラフィックのみを許可するファイアウォールでハードサーバーを実行する場合は、アクセスを一致させる必要があります。ファブリックサーバー。
1
Eljuan

DRBDレプリケーションを使用して、アクティブ/パッシブMySQLファブリックを有効にします。データベースファームの管理に2つのMySQLファブリックを使用しています。アクティブファブリックに障害が発生した場合、論理ドライブ内の複製されたデータを使用して、他のファブリックインスタンスに自動的に切り替えます。

このセットアップでは次を使用しています。

  • DRBD
  • ペースメーカー
  • コロシンク
1
owliber

[〜#〜]免責事項[〜#〜]:MySQLファブリックは私にとって新しいので、あまり言うことはできません。

それにもかかわらず、 MySQLファブリックのFAQ は次のように述べています:

8.7.8:MySQLファブリックノード自体はフォールトトレラントですか? MySQLファブリックノードが利用できない場合はどうなりますか?

現在、MySQLファブリックノードのインスタンスは1つだけです。そのプロセスが失敗した場合は、そのマシンまたは別のマシンで再起動し、状態とルーティング情報を既存の状態ストア(MySQLデータベース)または状態ストアの複製コピーから読み取ります。

MySQLファブリックノードは利用できませんが、ファブリック対応コネクタは、ルーティングデータのキャッシュされたコピーに基づいて、クエリとトランザクションを正しいMySQLサーバーにルーティングし続けます。ただし、プライマリに障害が発生した場合、MySQLファブリックノードがサービスに戻るまで自動フェイルオーバーは発生しないため、できるだけ早くプロセスを回復することが重要です。

対照的に、MySQL Clusterには複数の管理ノードを許可するテクノロジーがあります。今後のリリースでは、MySQLファブリックの複数インスタンスの使用を探す必要があります。それはオラクルのロードマップ上でなければなりません。

非常にワイルドな提案

VMWareまたはAmazon EC2を使用する場合は、次のOSインスタンスを作成する必要があります。

  • MySQLファブリックがインストールされている
  • すべてのMySQLサーバーを表示するように構成するMySQLファブリック

次に、VMを複数回複製し、オンデマンドでインスタンスを起動します。

エピローグ

MySQLファブリックファームのマスターに直接接続することはベストプラクティスではありません。どうして? MySQLファブリックが戻ってきて、別のMySQLサーバーを新しいマスターとして選出するとします。接続しているマスターがスレーブになると、MySQLファブリックによってマスターが読み取り専用になる可能性があります。これは、MySQLファブリックを混乱させる可能性もあります。これは、マスターの独立した使用法を認識していない場合があるためです。本質的に、あなたはファブリックをリッピングし、すべて一緒に縫う必要があります

UPDATE 2016-03-18 18:20 EDT

MySQLファブリックを1週間試してみて、すぐに何かを学びました。ファブリックノードが停止する断続的な時間があります。 Fabricサービスを終了して、再開するだけです。私はすでにドキュメンテーションから言及しましたが、実際にそれを見ました。 ファブリック対応コネクタは実際に機能しますが、ファブリックノードが長く続くことを許可しないでください

0
RolandoMySQLDBA