mysql-proxy读写分离配置
配置环境
master机:server1(172.25.254.1)
slave机:server2(172.25.254.2)
调度器:server3(172.25.254.3)
mysql-proxy简介
mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL
Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。
当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
mysql proxy的连接池
- 对于程序端而言,web端的请求,只要到mysql proxy的连接池就OK了,剩下的工作就交给mysql
proxy了。对于程序代码管理来说就简单多了。个人觉得这一点最值得借用的了。
首先server1和server2配置主从复制,已经写过了,不会的可以去下面的地址查看。
主从复制配置
https://blog.csdn.net/su_use/article/details/81488043
安装读写分离代理mysql-proxy
[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# rm -rf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit
[root@server3 ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit/ /usr/local/
[root@server3 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy
新建目录
[root@server3 local]# cd mysql-proxy
[root@server3 mysql-proxy]# ls
bin include lib libexec licenses share
[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# mkdir logs
[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf
编写配置文件
vim conf/mysql-proxy.conf
----
[mysql-proxy]
user=root
#admin-username=proxy
#admin-password=ssH+101010
proxy-address=172.25.5.3:3306
proxy-read-only-backend-addresses=172.25.5.2
proxy-backend-addresses=172.25.5.1
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
#admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
---
[mysql-proxy]
user=root
#运行mysql-proxy用户
admin-username=proxy
#主从mysql共有的用户
admin-password=123.com
#用户的密码
proxy-address=172.25.5.3:3306
#mysql-proxy运行ip和端口,不加端口,默认4040
proxy-read-only-backend-addresses=172.25.5.2
#指定后端从slave读取数据
proxy-backend-addresses=172.25.5.3
#指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
#指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
#指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
#日志位置
log-level=info
#定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true
#以守护进程方式运行
keepalive=true
#mysql-proxy崩溃时,尝试重启
修改lua脚本
[root@server3 mysql-proxy]# vim share/doc/mysql-proxy/rw-splitting.lua
----
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1,
max_idle_connections = 1, #触发读写分离的最大连接数
is_debug = false
}
end
---
mysql 受权proxy用户(master和slave都要有,主从复制后,master授权,slave也会自动授权。)
grant all on *.* to proxy@'172.25.5.%' indentified by 'ssH+101010';
启动mysql-proxy
[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf
[root@server3 mysql-proxy]# chmod 660 conf/mysql-proxy.conf
[root@server3 mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
检测:登陆
插入数据:
master查看:
slave查看:
再连接一个客户端,就会触发读写分离,
proxy(自动弹出的)
mysql-proxy的admin模块
配置文件
[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf
---
[mysql-proxy]
[mysql-proxy]
user=root
admin-username=admin
admin-password=ssH+101010
proxy-address=172.25.5.3:3306
proxy-read-only-backend-addresses=172.25.5.2
proxy-backend-addresses=172.25.5.1
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true
打开mysql-proxy:
[root@server3 mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf --plugins=admin --plugins=proxy