MySQLの負荷分散
データベースの負荷減少に悩んでおられるサーバ管理者は多いことでしょう.
MySQL Clusterという手もありますが,MySQLのレプリケーションだけを使っても,さらにこのソフトを加えることで負荷分散が出来ます.
http://forge.mysql.com/wiki/MySQL_Proxy#Load_Balancing_.26_Failover
What is MySQL Proxy?
MySQL Proxy is a simple program that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Its flexibility allows for unlimited uses; common ones include: load balancing; failover; query analysis; query filtering and modification; and many more.
(意訳)
MySQL Proxyとは?MySQLプロクシは,MySQLサーバとMySQLサーバにアクセスするクライアントの間を結ぶシンプルなプログラムです.MySQLプロクシを使うと,MySQLに対するアクセスの監視・アクセス分析・クエリ転送・負荷分散(ロードバランシング)・クエリフィルタリング等々,色々なことができます.
なお,MySQLプロクシには,LUA言語等のインストールが必要ですし,mysql_configの場所の指定も大抵必要なので(./configure --with-mysql=/usr/local/mysql/bin/mysql_configとか),気をつけて下さい.負荷分散は簡単で,例えばこんな感じにコマンドを打つだけです.各MySQLサーバはレプリケーション等で同内容が保持されてるとします.
./src/mysql-proxy --proxy-backend-addresses=192.168.1.1:3306 --proxy-backend-addresses=192.168.1.1:3306 --proxy-backend-addresses=192.168.1.1:3306 --proxy-backend-addresses=192.168.1.1:3306 --proxy-backend-addresses=192.168.1.2:3306 --proxy-address=localhost:4040
この例では,192.168.1.1が192.168.1.2よりもパワーがあると仮定して,4:1の割合でアクセスに行くオプション設定です.
クライアントは,localhost:4040にアクセスします.localhost:3306じゃなくて.
例えば,
の代わりに,
とします.
プロクシの管理情報は,mysql-proxyが立ち上がっている状況で,デフォルトで次のように監視できます.
/usr/local/mysql/bin/mysql -h mysql-server -P 4041
mysql> select * from proxy_config;
- +
option value
- +
admin.address :4041 proxy.address localhost:4040 proxy.lua_script NULL proxy.backend_addresses[0] 192.168.1.1:3306 proxy.backend_addresses[1] 192.168.1.2:3306 proxy.fix_bug_25371 0 proxy.profiling 1
- +
mysql> select * from proxy_connections;
- +
0 server 0 1 proxy 0 2 proxy 10 some_db 3 proxy 10 some_db 4 proxy 10 some_db
- +