mysql proxy設置・運用

 

できること
  • 負荷分散
  • フェイルオーバー(冗長化)
  • クエリの解析
  • クエリのフィルタリングや書き換え

 

mysql proxyを使いこなせるためはLuaというスクリプトを理解する必要がある

Luaスクリプトが呼ばれるのはクライアントがアクションを起こしたときのみ

接続に関わる関数
connect_server クライアントからMySQL Proxyに接続が行われた際、バックエンドとの接続を行う前に呼び出される
実際に接続および認証を行うサーバを選択できる唯一の場所
read_handshake MySQL Proxyとバックエンドとの接続が行われた後、バックエンドから送り返されたハンドシェイクのための情報をクライアントに転送する前に呼び出される
クライアントのIPが取得できるのでIPを見て切断するといった制御が可能
read_auth ハンドシェイクに続き、クライアントから受けとった認証情報をバックエンドに転送する前に呼び出される
認証が成功するのかどうかはこの時点ではわからない
read_auth_result バックエンドでの認証が終了した後、バックエンドから受けとった認証結果をクライアントに通知する前に呼び出される
。認証の成否がわかるので、認証成功(失敗)後に行いたい処理を記述できる

 

リクエストに関わる関数
read_query クライアントから何らかのリクエストが送られたとき、それをバックエンドに転送する前に呼び出される
read_query_result クエリ結果がバックエンドから返されたとき、それをクライアントに転送する前に呼び出される

 

その他の関数
disconnect_client サーバとクライアントの接続が切断されるときに呼び出される
mysqlproxy設置

環境:centos6.5(vmware)

用意したゲストOS:

host名 IP
masterdb 192.168.116.118
mysqlproxy 192.168.116.119
slavedb 192.168.116.121
slavedb2 192.168.116.122
client 192.168.116.129

 

mysqlproxy(192.168.116.119)設置

cd /usr/local

wget ftp://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-Proxy/mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

tar xfz mysql-proxy-0.8.4-linux-rhel5-x86-64bit.tar.gz

mv mysql-proxy-0.8.4-linux-rhel5-x86-64bit mysql-proxy

 

mysqlproxy(192.168.116.119)実行

cd /usr/local/mysql-proxy/bin

./mysql-proxy –proxy-address=:3306 –plugins=admin –plugins=proxy –admin-username=root –admin-password=root    –proxy-backend-addresses=192.168.116.118:3306 –proxy-backend-addresses=192.168.116.121:3306 –admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua

実行状態&終了

[root@localhost bin]# ./mysql-proxy –proxy-address=:3306 –plugins=admin –plugins=proxy –admin-username=root –admin-password=root    –proxy-backend-addresses=192.168.116.118:3306 –proxy-backend-addresses=192.168.116.121:3306 –admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
2014-02-27 15:55:33: (critical) plugin admin 0.8.4 started
2014-02-27 15:55:33: (critical) plugin proxy 0.8.4 started

終了はctrl+c

現在192.168.116.121と118にmysqlの設置すらできてないが動作的に動いてるぽい

 

設定ファイル(/usr/local/etc/my.cnf)を利用した場合は以下のようになる

[mysql-proxy]
daemon = true
pid-file = /var/run/mysql-proxy.pid
log-file = /var/log/mysql-proxy.log
log-level = debug
admin-password=root
admin-username=root
admin-lua-script=/usr/local/lib/mysql-proxy/lua/admin.lua
proxy-address = :3306
proxy-backend-addresses = 192.168.116.118:3306,192.168.116.121:3306

実行

./mysql-proxy --plugins=admin --plugins=proxy --defaults-file=/usr/local/etc/my.cnf

停止法(この場合はdaemonになるのでkillで終了)

kill `cat /var/run/mysql-proxy.pid`
rm /var/run/mysql-proxy.pid

 

動作テスト

clientサーバ側から以下のようにアクセスするとmysql proxyの管理モードに入れる

mysql --host=192.168.116.119 --port=4041 -u root –p

上記のrootパスワードはmysql proxyを起動した時の「–admin-username=root –admin-password=root」に準じる

次は以下のselectをして設定した項目が出れば動作してるということになる

mysql> SELECT * FROM backends;
+-------------+----------------------+-------+------+------+-------------------+
| backend_ndx | address              | state | type | uuid | connected_clients |
+-------------+----------------------+-------+------+------+-------------------+
|           1 | 192.168.116.118:3306 | up    | rw   | NULL |                 0 |
|           2 | 192.168.116.121:3306 | up    | rw   | NULL |                 0 |
+-------------+----------------------+-------+------+------+-------------------+
2 rows in set (0.00 sec)

 

 

 

エラー

[root@localhost ~]# mysql -u root -p -h 192.168.116.119 -p 3306
Enter password:
ERROR 1105 (HY000): (proxy) all backends are down

まさにバックエンド側のmysqlが落ちてる場合出る

 

[root@localhost ~]# mysql -u root -p -h 192.168.116.119 -p 3306
Enter password:
ERROR 1130 (HY000): Host '192.168.116.119' is not allowed to connect to this MySQL server

http://blog.negabaro.com/1188.html <<にて解決(外からアクセスさせるためには権限の付与設定が必要)

 


参考したURL:

  1. http://pub.ne.jp/netstat/?entry_id=4536347
  2. http://vndfbfkd.tistory.com/543
  3. http://www.hanbit.co.kr/network/view.html?bi_id=1423
  4. http://blogs.ricollab.jp/webtech/2010/04/mysql_proxy/
  5. http://blog.daum.net/urlover/17050197
  6. file:///C:/Users/kim/Downloads/Mysql%20Proxy%20query%20filter_incle.pdf
  7. http://www.myservlab.com/177

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です