2つのマスターでデータベースを複製することで得られるパフォーマンスはそれほど多くありません。ただし、アプリケーションを正しくコーディングすると、わずかなフェイルオーバーが発生します。
マスター-マスターのセットアップは基本的にスレーブ-マスターのセットアップと同じですが、両方のスレーブが開始され、各ボックスの構成ファイルに重要な変更が加えられています。
マスターMySQL1:
auto_increment_increment = 2
auto_increment_offset = 1
マスターMySQL2:
auto_increment_increment = 2
auto_increment_offset = 2
これらの2つのパラメーターは、2つのサーバーが何らかの理由で主キーをめぐって競合しているときに、それらが複製されて複製が強制終了されないようにします。 1ずつインクリメントする代わりに、自動インクリメントフィールドはデフォルトで2ずつインクリメントします。1つのボックスでは1からオフセットを開始し、シーケンス1 3 5 7 91113などを実行します。2番目のボックスでは2からオフセットを開始します。 2 4 6 8 10 12などに沿って実行します。現在のテストから、自動インクリメントは、前に残っている番号ではなく、次の空き番号を取得するように見えます。
例:サーバー2が4番目のレコードを挿入するときにサーバー1が最初の3つのレコード(1 3と5)を挿入すると、6のキーが与えられます(2ではなく、未使用のままになります)。
設定が完了したら、両方をスレーブとして起動します。
次に、両方が正常に機能していることを確認し、両方のマシンに接続して、コマンドSHOW SLAVE STATUS
を実行します。 Slave_IO_Running
の両方に注意する必要があります およびSlave_SQL_Running
各ボックスで両方とも「はい」と言う必要があります。
次に、もちろん、テーブルにいくつかのレコードを作成し、一方のボックスが奇数番号の主キーのみを挿入し、もう一方のボックスが偶数番号の主キーのみをインクリメントしていることを確認します。
次に、すべてのテストを実行して、各ボックスですべての標準アプリケーションを実行し、他のボックスに複製できることを確認します。
一度実行すると比較的簡単です。
しかし、前述のように、MySQLはそれを推奨せず、アプリケーションコードを作成するときにこの機能に注意することをお勧めします。
編集: オフセットが正しいことなどを確認すれば、理論的にはマスターを追加できると思います。ただし、より現実的には、スレーブをいくつか追加することもできます。