环境:
server1 | 172.25.60.1 | master |
---|---|---|
server2 | 172.25.60.2 | slave |
server3 | 172.25.60.3 | proxy |
1.server1/2配置主从:
这里我采用基于gtid的异步复制。配置方法上一篇已经详细说过了,这里就不再累赘了,上一篇连接:(https://blog.youkuaiyun.com/weixin_42195382/article/details/97627722)
2.server3配置proxy,控制读写分离:
获取proxy包:mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz(官网上可以下到)
tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz //解压
mv mysql-proxy-0.8.5-linux-el6-x86-64bit/* /usr/local/mysql-proxy/ //重命名
(1)编辑主配置文件
cd /usr/local/mysql-proxy/
mkdir conf //编辑一个放配置文件的目录
cd conf/
vim mysql-proxy.conf //编辑一个配置文件--开启时指定此文件
##配置文件内容如下:
[mysql-proxy]
proxy-address=0.0.0.0:3306 //本机3306端口
proxy-backend-addresses=172.25.60.1:3306 //master端
proxy-read-only-backend-addresses=172.25.60.2:3306 //slave端
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
pid-file=/usr/local/mysql-proxy/log/mysql-proxy.pid //指定pid存放位置,log目录需要自己建立
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log //指定日志存放位置
plugins=proxy //插件
log-level=debug
keepalive=true //高可用
daemon=true
注:查看配置文件参考参数:
/usr/local/mysql-proxy/bin/mysql-proxy --help
/usr/local/mysql-proxy/bin/mysql-proxy --help-proxy
(2)修改读写文件参数
cd /usr/local/mysql-proxy/share/doc/mysql-proxy/
vim rw-splitting.lua //编辑读写文件,修改连接参数
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 2, //最小连接数为2时启用读写分离
max_idle_connections = 4, //最大可以连接4个
is_debug = false
}
end
(3)开启proxy:
##开启proxy:直接开启服务会报错,编写的文件权限不对
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
##根据报错提示,修改权限再次开启就ok
chmod 660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
3.测试:
(1)开启proxy后在/usr/local/mysql-proxy/log/自动生成两个文件:
mysql-proxy.pid
mysql-proxy.log
(2)查看日志:
cat mysql-proxy.log 可以看到连接到了server1/2
(3)安装lsof,使用lsof查看proxy的连接情况
yum search lsof -y
lsof -i:3306 //查看proxy服务情况
用物理及连接测试,当连接超过2时,启用了读写分离。
验证读写分离:
a.写: 在物理机上连接写入,只有写入serevr1,所有的后端才能同步到数据
b.读: 关闭slave复制,在server1上加入数据,在物理机端读取数据,看不到刚才写入的数据,则证明读的是server2。因此,证明了读写分离。