2010年5月11日火曜日

"MySQL Proxy"で"RW Splitting"

スズキです。

"RW Splitting"とは、レプリケーションされたMySQL群が用意されているとき、
書き出しはマスターへ、読み込みスレーブへと、SQLの性質によって、
接続先のMySQLを使い分けることです。

上記の処理は、アプリケーションのフレームワークや、独自実装などで、
よく実現されています。

この"RW Splitting"、下記で導入した"MySQL Proxy"でも実現が可能で、
http://blog.suz-lab.com/2010/05/centosmysql-proxy.html
lua言語で書かれた"RW Splitting"のスクリプトが、以下に用意されています。
/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua

次のように設定して、"MySQL Proxy"を再起動すれば、
"RW Splitting"として機能するようになります。

--------【my.cnf】--------
[mysql-proxy]
max-open-files=1024
log-file=/var/log/mysql-proxy.log
log-level=message
proxy-address=:3306
proxy-backend-addresses=master.internal
proxy-read-only-backend-addresses=slave.internal
proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
--------
※ "MySQL Proxy"のポートは3306に変更
※ マスターMySQLは"master.internal"
※ スレーブMySQLは"slave.internal"

ログはこんな感じです。

--------【mysql-ploxy.log】--------
...
...: (message) proxy listening on port 3306
...: (message) added read/write backend: master.internal
...: (message) added read-only backend: slave.internal
...
--------

"master.internal"が"read/write"のMySQLとして、
"slave.internal"が"read-only"のMySQLとして、登録されていることがわかります。

"RW Splitting"の検証も、書いておきたいなー...

--------
http://www.suz-lab.com

0 コメント: