YakstYakstは、海外の役立つブログ記事などを人力で翻訳して公開するプロジェクトです。5.7開発版と合わせてアナウンスされた、マルチソースレプリケーション。マルチマスタとの違いと、マルチソース環境の概要を、実際の設定や動きを交えながら解説する。Nieto最近Oracleは、この記事を書いている時点でバージョン5.7.2の最新MySQL開発版に対して、数々の新機能をアナウンスした。これらの多くは、新しいリリースが非常に素晴らしいものになるであろうことを予感させるパフォーマンスやレプリケーション関係の機能だ。この記事で、新しいマルチソースレプリケーションの機能をどう動かすかの簡単な手順と、テストのためにどう設定すべきかを説明しようと思う。これは開発版なので、すぐに本番環境で使えるものではないことをあらかじめ指摘しておこう。いずれにしても、開発環境において、新しい機能を試してみたい人や、アプリケーションとどう組み合わせて動くのか見たい人のための記事だ。マルチソースレプリケーションとは?まず、マルチマスタとマルチソースが同じではないということをはっきりさせる必要がある。マルチマスタレプリケーションとは一般的に、どのサーバに書き込んでもデータが全てのノードにレプリケーションされるような、循環レプリケーションのことだ。マルチソースはこれとは違う。MySQLのレプリケーションには、この新しいバージョンで改善されるまで、1つのスレーブは1つのマスタしか持てないという制約があった。これは、レプリケーション環境をデザインする際の制限事項だった。これを何とか動かすようにする「裏技」もあったが、今回これに対する公式な方法ができたということだ。マルチソースとは1台のスレーブが2台以上のマスタを持つ構成のこと。以下のようなレプリケーション環境だ。これにより、過去には不可能だったレプリケーションの階層構造を作ることが可能になった。自分のオフィスにあるスレーブに、世界中に散らばる各オフィスのサーバからデータをレプリケーションしてくることができる。動いているのかここで、コミュニケーションチャネルというコンセプトがある。各コミュニケーションチャネルは、バイナリログイベントを受け取るためにスレーブからマスタに張るコネクションだ。これはつまり、IO_THREADを書くコミュニケーションチャネルごとに持つことだ。MASTER」コマンドを実行する必要がある。CHANNEL="name_of_channel";とても簡単だ。ひとつだけ前提条件がある。5.6のクラッシュセーフ機能が有効な状態に設定されていなければならないということだ。これはつまり、master.infoやrelay-log.infoの情報がテーブル上にあるということも意味している。それでは設定してみよう。さあ例を見せてくれ!まずは試験版のMySQLをここからダウンロードしてくる必要がある。2台のマスタと1台のスレーブからなるサンドボックス環境を用意しよう。server_idやバイナリログ、レプリケーションユーザの設定についてはここでは詳しく書かない。それらは既に設定してあるものと仮定する。スレーブをクラッシュセーフにしなければならない。relay_log_info_repository=TABLE;スレーブを再起動したら、「master1」と「master2」というチャネルを作成できるようになる。channel="master2";スレーブのプロセスを開始するには、どのチャネルを使うかを指定する必要がある。channel="master2";ここで、スレーブのステータスを見てみよう。sec)おっと、空っぽだ。どのチャネルの情報を見るのか指定しなければならないのだ。Yes[...]さらに、IO_THREADとSQL_THREADが動いているかも確認してみよう。|+----+-------------+-----------------------------------------------------------------------------+さあ試してみよう。+--------------------+動いた。新しいマルチソースレプリケーションの機能によって、今までは複雑な「裏技」なしには実現できなかった新しいレプリケーション環境を構築できるようになった。この新しいアーキテクチャを考慮してアプリケーションのデザインや開発をする必要があることは考慮すべきだ。マルチマスタ環境と同じく、マルチソース環境でも、データがごちゃごちゃにならないように特に注意しなければならない。MySQLのレプリケーション機能は、リリースのたびに設定やパフォーマンス、デザインの可能性をどんどん広げていっている。これら全ての機能は一緒に使うことができる。あなたのレプリケーション環境は、最近追加された新しい機能(古い機能も)一緒に使うことで、さらに良くすることができるだろう。GTIDや、スキーマ単位のマルチスレッドスレーブ、データベース間のマルチスレッドスレーブを有効にすることもできる。@yakstcom_req_jaYakstYakstお問い合わせ。