免責事項:これまでレプリケーションを扱ったことがありませんが、すべての調査を行っています。 MySQLに関する深い知識があまりないため、多くのドキュメントが理解しにくくなっています。
リモートサーバーと多くの「オンサイト」サーバーがあります。このアプリはミッションクリティカルであり、サイトでのインターネット接続の信頼性が低いため、オンサイトマシンにはアプリケーションの完全に機能するインスタンスがあります。オンサイトマシンはさまざまなファイアウォールの背後にあり、通常は相互にアクセスできません。クラウドDBがオンサイトDBと通信できるようにSSHトンネルを設定できます。
ここに簡単な図があります:
非同期マルチマスターレプリケーションが最善の策であるように見えますが、ほとんどのドキュメントでは、マルチソースレプリケーションはスレーブに対してのみ機能し、マルチマスターレプリケーションは循環的にのみ機能し、単一のマスター(この場合、クラウドサーバー)は、他の複数のマスターに直接複製することはできません。
私はこれを間違って解釈していますか(単にこれを行う方法に関するドキュメントを見つけることができません)、またはこれは事実ですか?もしそうなら、私たちが使用できるタングステンやガレラのようなサードパーティのパッケージはありますか?ただし、可能な限りバニラMySQLを使用することをお勧めします。
明確にするために編集します。これは、2マスターセットアップについて記述したmy.cnfセクションです。これらをクラウドサーバーにN個設定し、オンサイトサーバーに1つ(クラウドサーバー)だけ設定します。 my.cnfを使用してすべてを実行し、mysqlシェルコマンドの使用/スクリプト化を回避したいと思います。
master-Host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306
Galeraを使用する場合は、Percona XtraDB Clusterを入手してください。すぐに使用できるGaleraライブラリーが内部に組み込まれています。 Galeraを有効にするには、my.cnfに wsrepオプション を追加するだけです。詳細については、 PXCドキュメント を参照してください。
EC2を使用している場合は、 EC2のPXCセットアップガイド も使用できます。
マルチソースレプリケーションはスレーブでのみ機能します
これは正しいです。用語はそれが言うことと一致します。複数のマスターから複製できるスレーブです。これは、 MariaDB および MySQL 5.7 で可能です。
バニラ(シュガーフリーのような)MySQL 5.1/5.5/5.6でマルチソースレプリケーションを実行する場合は、ラウンドロビンとして設定する必要があります。 本のページ227,228(ISBN 0596807309)
ロビンロビンマルチソースレプリケーションを行うためのアルゴリズムがあります
- 1つのマスターから複製するようにスレーブを設定します。これをcurrent masterと呼びます。
- スレーブを一定期間複製させます。スレーブは現在のマスターから読み取り、スイッチの処理を担当するクライアントがスリープ状態のときにそれらを適用します。
- STOP SLAVE IO_THREADを使用してスレーブのI/Oスレッドを停止します。
- リレーログが空になるまで待ちます。
- STOP SLAVE SQL_THREADを使用してSQLスレッドを停止します。 CHANGE MASTERでは、両方のスレッドを停止する必要があります。
- SHOW SLAVE STATUS出力のExec_Master_Log_PosおよびRelay_Master_Log_File列の値を保存して、現在のマスターのスレーブ位置を保存します。
- 以前に保存された位置を取得し、CHANGE MASTERを使用してレプリケーションをセットアップすることにより、スレーブを次のマスターから順番に複製するように変更します。
- START SLAVEを使用してスレーブスレッドを再起動します。
- 手順2から始まるシーケンスを繰り返します。
本を読む前にこのテクニックについての投稿を書いた
Apr 26, 2011
: MySQLのスタートポロジ(StackOverflow)Apr 28, 2011
: スタートポロジのMySQL(ServerFault)ところで 本のページ228,229 にはPythonのサンプルコードがあります
レプリケーションを接続するためのオプションをmy.cnf
に含めないでください。
それらはMySQL 5.5から廃止されました
MySQL 5.6 Documentation の見出しの下にそのように書かれています
廃止されたレプリケーションスレーブオプション
MySQL 5.5では、次のオプションが削除されています。 MySQL 5.6でこれらのオプションのいずれかを使用してmysqldを起動しようとすると、サーバーは不明な変数エラーで異常終了します。以前これらのオプションに関連付けられていた複製パラメーターを設定するには、CHANGE MASTER TO ...ステートメントを使用する必要があります(セクション13.4.2.1「CHANGE MASTER TO構文」を参照)。
影響を受けるオプションをこのリストに示します。
--master-Host
--master-user
- マスターパスワード
--master-port
--master-connect-retry
--master-ssl
--master-ssl-ca
--master-ssl-capath
--master-ssl-cert
--master-ssl-cipher
--master-ssl-key
同様の問題を持つ人のために、私はMariaDBを使いました。これは、ノードごとに複数のマスターをサポートします(CHANGE MASTER TOを指定するときのconnection_name変数)。 MySQLはこれを5.7以降でサポートするとされていますが、そのリリースを待ちたくありません。