1

3 つのノードを持つ 2 つの MariaDB Galera クラスターがあります。

クラスタ 1 : MDB-01、MDB-02、MDB-03 クラスタ 2 : MDBDR-01、MDBDR-02、MDBDR-03

これら 2 つのクラスターは、2 つの地理的リージョンにある 2 つの異なるデータ センターにあります。

クラスター 1 は PRODUCTION クラスターであり、クラスター 2 は DR クラスターです。

GTID を使用した非同期レプリケーションは、リンクの指定された構成に従って MDB-01 から MDBDR-01 の間にセットアップされています: http://www.severalnines.com/blog/deploy-asynchronous-replication-slave-mariadb-galera-cluster-gtid -clustercontrol (リンクは、MariaDB Galera クラスターからスタンドアロンの MariaDB インスタンスへの非同期レプリケーションです。ただし、MariaDB Galera クラスターから MariaDB Galera クラスターへの非同期レプリケーション用に同じ構成をセットアップしました)

以下のコマンドで、現在のスレーブ MDBDR-01 => MDB-01 から MDBDR-01 => MDB-02 に切り替えることができます。

マスターを master_host='MDB-02' に変更

ただし、MDBDR-01 がダウンしている場合に、MDBDR-02 => MDB-01 を指す方法に挑戦しています。

ポインティング MDBDR-02 => MDB-01 または MDBDR-03 => MDB-01 を実現するための入力を提供してください。

4

1 に答える 1

0

理解しておく必要があることの 1 つは、その記事で簡単に言及されていることですが、各 MariaDB の GTID 実装がこの状況で問題を引き起こす可能性があるということです。各ノードは GTID の独自のリストを保持し、galera トランザクションには独自の ID がないため、同じ GTID が各サーバーの同じ場所を指していない可能性があります (この記事を参照)。

その問題のため、MariaDB 10.1 なしであなたがしていることを試みません。MariaDB 10.1.8 がリリースされたばかりで、10.1 ラインの最初の GA リリースです。10.1 では GTID の実装が変更されているため、galera トランザクションは独自のserver_id(構成変数を介して設定) を使用します。その後、スレーブでレプリケーションをフィルタリングして、galera id のみをレプリケートできます。

別のスレーブ サーバーに切り替えるには、古いスレーブで実行された最後の GTID を取得する必要があります。gtid_slave_posに格納されますがmysql.gtid_slave_posmysql.*テーブルは複製されません。トランザクションの元の GTID が他のスレーブ galera ノードに渡されるかどうか (つまり、マスター クラスターの galera server_id が 1 で、スレーブ クラスターの galera server_id が 2 であり、 MDBDR-01 は GTID 1-1-123 のスレーブ イベントを取得し、MDBDR-02 はそれを 1-1-123 または 1-2-456 として記録します)。新しい GTID 実装では server_id を変更する必要があるため、そうではないと推測していますが、これを確認できる場合があります。最後に実行されたマスター GTID を別のスレーブ galera ノードから取得することはおそらくできないため、古いスレーブを正常にシャットダウンしない限り、古いスレーブから GTID を取得する必要があります。新しいスレーブの binlog で最後に実行されたトランザクションから GTID を見つけ、それをマスターの binlog のトランザクションと照合する必要がある場合があります。また、使用していない場合はsync_binlog = 1、バイナリログは信頼できず、少し遅れている可能性があります。

各 galera スレーブ ノードはおそらく実行された GTID を認識しておらず、以前の GTID イベントをスキップできないSQL_SLAVE_SKIP_COUNTERため、見つけた GTID が遅れている場合は、正しい位置に到達するために操作する必要がある場合もあります。

GTID (またはその推測) を取得したら、元のスレーブで設定したのと同じ方法で、新しいスレーブでレプリケーションを設定します。次のコマンドでそれを行う必要があります。

SET GLOBAL gtid_slave_pos = "{最後に実行された GTID}";
CHANGE MASTER TO master_host="{Master Address}", master_port={Master Port}, master_user="{Replication User}", master_password={Replication Password}, master_use_gtid=slave_pos;
スレーブを開始します。

また、古いスレーブを再起動する前に複製を無効にして、見逃したイベントが 2 回複製されないようにする必要があります。

実行されたスレーブ GTID が galera を介してレプリケートされるまで (これは決して起こらない可能性があります)、このようなフェイルオーバーは厄介なプロセスになります。

于 2015-10-20T17:48:17.023 に答える