一、SQL语句路由:
如何在客户端应用的时候,路由语句,一般用两种方法:
1.直接在PHP的mysql类做判断,最简单,不用额外加软件 ,比如discuz论坛:
//可以充当sql语句路由功能的mysql类
class mysql {
$dbm = '主服务器';
$dbs1 = '从服务器1';
$dbs2 = '从服务器2';
public function query() {
//在query中进行语句判断,分别连接不同的mysql服务器
}
}
2.用集群中间件:比如官方的mysql_proxy ,还有国产的中间件,如淘宝开发的amoeba
二、mysql-proxy实现负载均衡+读写分离:
1.下载安装mysql-proxy:http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-Proxy/mysql-proxy-0.8.5-linux-glibc2.3-x86-32bit.tar.gz
2.执行mysql-proxy:
(1).设置负载均衡:
./bin/mysql-proxy \
-P 192.168.61.145:4040 \
--proxy-backend-addresses=192.168.61.145:3306 \
--proxy-backend-addresses=192.168.61.146:3306
(2).设置读写分离:
./bin/mysql-proxy \
-P 192.168.61.145:4040 \
--proxy-backend-addresses=192.168.61.145:3306\
--proxy-read-only-backend-addresses=192.168.61.146:3306 \
--proxy-lua-script=/opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
简写:
./bin/mysql-proxy \
-b192.168.61.145:3306 \
-r192.168.61.146:3306 \
-s /opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
(3).指定mysql-proxy在后台执行:
./bin/mysql-proxy \
-b192.168.61.145:3306 \
-r192.168.61.146:3306 \
-s /opt/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua \
--daemon
3.因为proxy是mysql的前端调度代理,可以通过多个cmd终端远程连接mysql-proxy:
mysql -h 192.168.61.145 -P 4040 -u root -p
注:mysql_proxy会把连接mysql服务器的tcp/IP连接缓存进连接池,以提高性能,在缓存池里,缓存的连接大致是平均分配在每台mysql服务器上,但具体的每一个连接,却始终连某台服务器;