10bet网址
MySQL 5.6リファレンスマニュアル
下载本手册
PDF(美国高级主任)- 26.8 mb
PDF (A4)- 26.8 mb


MySQL 5.6リファレンスマニュアル/.../ MySQL集群レプリケ,ション:マルチマスタ,と循環レプリケ,ション

18.6.10 MySQL集群レプリケーション:マルチマスターと循環レプリケーション

マルチマスターレプリケーションでMySQL集群を使用することは可能です(多くのMySQL集群間の循環レプリケーションを含みます)。

循環レプリケ,ションの例次のいくかのパラグラフでは,次のようなレプリケションセットアップの例にいて検討します。このセットアップは,番号が1,2,3のつのMySQL集群で構成され,クラスタ1はクラスタ2のレプリケーションマスターとして動作し,クラスタ2はクラスタ3のマスターとして動作し,クラスタ3はクラスタ1のマスターとして動作します。各クラスタは2つのSQLノードを持ち,SQLノードとBはクラスタ1に属し,SQLノードCとDはクラスタ2に属し,SQLノードEとFはクラスタ3に属しています。

これらのクラスタを使用する循環レプリケ,ションは,次の条件を満たすかぎり,サポ,トされます。

  • すべてのマスタとスレブのSQLノドは同じ

  • レプリケションのマスタおよびスレブとして動作するすべてのSQLノドが——log-slave-updatesオプションを使用して起動される

このタ。

すべてのマスターSQLノードがスレーブでもある,MySQL集群循環レプリケーションのスキームです。

このシナリオでは,クラスタ1のSQLノード一はクラスタ2のSQLノードCに複製し,SQLノードCはクラスタ3のSQLノードEに複製し,SQLノードEはSQLノード一に複製します。言い換えると,レプリケーションライン(図中の赤の矢印)は,レプリケーションのマスターおよびスレーブとして使用されるすべてのSQLノードを直接接続します。

ここで示すように,すべてのマスターSQLノードが必ずしもスレーブというわけではない場合に,循環レプリケーションをセットアップすることも可能です。

すべてのマスターSQLノードが必ずしもスレーブではない,MySQL集群循環レプリケーションのスキームです。

この場合,各クラスタの異なるSQLノードはレプリケーションのマスターおよびスレーブとして使用されます。ただし,sqlノ,ドを——log-slave-updatesを使用して起動する必要はありません。レプリケーションのライン(これも図中の赤の矢印)が連続的でないMySQL集群のこのタイプの循環レプリケーションスキームは,可能性はありますが,まだ完全にはテストされていないため,実験的なものだと考えるようにしてください。

NDBネティブのバックアップとリストアを使用したスレ,ブMySQL集群の初期化循環レプリケーションをセットアップする場合,バックアップを作成するMySQL集群で管理クライアントの备份コマンドを使用してから,ndb_restoreを使用して別のMySQL集群でこのバックアップを適用すると,スレーブクラスタを初期化できます。ただし,これによってバイナリログが,レプリケーションスレーブとして動作する2番目のMySQL集群のSQLノードに,自動的に作成されることはありません。バ▪▪ナリログが作成されるようにするには,対象のSQLノ▪▪ドで显示表ステ,トメントを発行する必要があります。これは,开始的奴隶を実行する前に行なってください。

これは,今後のリリ,スで対応する予定の既知の問題です。

マルチマスタのフェルオバの例このセクションでは,3つのMySQL集群のサーバーIDが1,2,および3であるマルチマスターのMySQL集群レプリケーションセットアップでのフェイルオーバーについて説明します。このシナリオでは,クラスタ1はクラスタ2および3に複製し,クラスタ2もクラスタ3に複製します。この関係はここで示すとおりです。

3つのMySQL集群で構成される,マルチマスターMySQL集群レプリケーションセットアップ

つまり,データはクラスタ1からクラスタ3へ異なる2つのルートを介して(直接,およびクラスタ2経由で)複製されます。

マルチマスターレプリケーションに参加するすべてのMySQLサーバーが必ずしもマスターとスレーブの両方の役割を果たさなければならないわけではなく,特定のMySQL集群が異なるレプリケーションチャネルの異なるSQLノードを使用する場合があります。このようなケ,スを次に示します。

マルチマスターMySQL集群レプリケーションセットアップ(各MySQL服务器)

レプリケションスレブとして動作しているMySQLサバは,——log-slave-updatesオプションを使用して実行する必要があります。また,どのmysqldプロセスでこのオプションが必要か,前の図に示されています。

注記

——log-slave-updatesオプションを使用しても,レプリケ,ションスレ,ブとして動作していないサ,バ,には作用しません。

複製しているクラスタの1が停止した場合,。この例では,クラスタ1のサービスが失われ,そのためにクラスタ3がクラスタ1の更新の2つのソースを失うケースを検討します。MySQL集群間のレプリケーションが非同期であるため,クラスタ1から直接生じるクラスタ3の更新が,クラスタ2を経由して受け取った更新よりも新しいという保証はありません。クラスタ1からの更新に関して,クラスタ3が確実にクラスタ2に追いつくことで,これに対処できます。すなわちMySQLサーバーに関して,未処理の更新をMySQLサーバーCからサーバーFに複製する必要があります。

サ,バ,cで,次のクエリ,を実行します。

mysqlC> SELECT @latest:=MAX(epoch) -> FROM mysql。ndb_apply_status -> WHERE server_id=1;mysqlC> SELECT -> @file:=SUBSTRING_INDEX(File, '/', -1), -> @pos:=Position -> FROM mysql。ndb_binlog_index-> WHERE orig_epoch >= @latest -> AND orig_server_id = 1 -> ORDER BY epoch ASC LIMIT 1;
注記

適切な@ @ンデックスをndb_binlog_indexテーブルに追加することで,このクエリーのパフォーマンスを向上できるため,フェイルオーバー時間が大幅に短縮される可能性があります。詳細にいては,セクション18.6.4“MySQL集群レプリケションスキマとテブル”を参照してください。

@fileおよび@posの値を手動でサーバーCからサーバーFにコピーをします(またはアプリケーションで同様に実行させます)。次にサ,バ,fで,次の将master更改为ステ,トメントを実行します。

mysqlF> CHANGE MASTER TO -> MASTER_HOST =' serverC' -> MASTER_LOG_FILE='@file', -> MASTER_LOG_POS=@pos;

この実行後,MySQLサ,バ,Fで开始的奴隶ステートメントを発行でき,サーバーBから生じた,不足している更新がサーバーFに複製されます。

将master更改为ステ,トメントはIGNORE_SERVER_IDSオプションもサポ,トします。このオプションは,カンマ区切りのサーバーのIDを使用し,対応するサーバーから発生したイベントが無視されます。詳細にいては,セクション13.4.2.1 " change master to構文"およびセクション13.7.5.35 " show slave status構文"を参照してください。