1つのスレーブ、複数のマスターMySql


9

1つのスレーブが2つの異なるマスターをリッスンするようにMySqlレプリケーションを設定することは可能ですか?

回答:


3

設計上、1つのmysqldプロセスが2つの異なるマスターを同時にリッスンすることはできません。

CHANGE MASTER TOコマンドでは、1つのマスターを読み取るソースとしてのみ設定できます。

これをエミュレートするには、プログラムで2つのマスターを切り替える必要があります。どうやってやるの?

StackOverflowで、スレーブを異なるマスターに手動で接続する方法を説明しました。各マスターはラップトップで、スレーブは中央コンピューターでした。

ここに基本的な考え方があります

  • マスターM1
  • マスターM2
  • スレーブS1

このようにM1からS1へのレプリケーションを設定し、次にM2からS1へのレプリケーションを設定

  • 1)S1にM1をソースとしてCHANGE MASTER TOを実行させる
  • 2)スレーブを開始します。
  • 3)しばらくの間レプリケーションを実行する
  • 4)スレーブを停止します。
  • 5)M2をソースとしてS1にCHANGE MASTER TOを実行させる
  • 6)スレーブを開始します。
  • 7)しばらくの間レプリケーションを実行する
  • 8)スレーブを停止します。
  • 9)ステップ1に戻る

あるマスターから別のマスターに切り替えるたびに、2つの値を記録する必要があります。 SHOW SLAVE STATUS\G

  1. Relay_Master_Log_file
  2. Exec_Master_Log_Pos

これらの2つの値は、マスターから送信され、スレーブで次に実行される最後のSQLステートメントを表します。

重要な注意点が1つあります。M1とM2が相互に排他的なデータベースを更新している限り、このアルゴリズムで十分です。

信じられないかもしれませんが、私は2011年5月にServerFaultでこのような質問に対処しました。本「ハイパフォーマンスMySQL」に基づいて、BLACKHOLEストレージエンジンを使用して真のマルチマスター/シングルスレーブをエミュレートする方法を実際に説明しました。


私自身はまだそれを必要としていませんが、この問題については以前から考えていました。基本的に2番目のマスターのバイナリログをmysqlスレーブにパイプすることはできないのでしょうか。通常のレプリケーションスレーブスレッドと同じように、各クエリの結果も監視し、エラーで停止するツールを用意するのが最善の方法だと思います。しかし、本質的には単純なパイプも行うべきです。もちろん、両方のマスターが同じデータベース/テーブルに書き込むと、すぐにトリッキーになります。教祖たちが熟考するための何か?
Jannes

1
MySQL 5.6はこれを実行しませんが、5.7は複数のマスターをサポートすることを回答に追加する価値があると思います。
Phil Sumner

4

Rolandoのソリューションには多くの注意点があります。1つ目のレプリカストリームは、他のストリームが機能している間は必ずしもレプリケーションされません。これはあなたのスレーブが同期していない期間をあなたに与えるでしょう。ここで、「ターン」が発生したときに追いつくのに十分な時間を確保するために、繊細なバランスをとる必要があります。

説明したように、あなたはまた切り替えるためにログポジションのブックキーパーをプレイしなければなりません。これは本当にバグがあり、データが失われたり一貫性がない場合にウィンドウを開いたり、複製が失敗した場合にログを壊したりします(ログの位置に「1つだけ」のエラーが発生した場合でも発生します)。

複数のmysqlインスタンスを実行することをお勧めします。同じマシン上で2つ以上のmysqlを実行することを妨げるものは何もありません。もちろん、両方を同じポートで操作することはできません。すべてのクライアントとライブラリで3306以外のものを指定できるので、私はこれが問題であるとは本当に思っていません。

port = 3307(または.cnfファイルの1つにあるもの)を指定するだけです。

また、個別に構成されたバッファプールと他のメモリ構成が互いに矛盾しないように注意する必要があります。レプリケートされる個々のデータベースの特定の要件に合わせてこれらの設定をより細かく調整できるため、これは実際には利点です。

この方法では、2つのレプリケーションストリームが同じサーバーで実行されるだけです。決して遅れることはなく、本の保管も、「スワッピング」スクリプトも必要ありません。


私は誰かが簿記の狂気を理解してうれしいです。いい答えも。+1 !!!
RolandoMySQLDBA 2012


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.