mysql实现读写分离中间件MySQL Proxy

时间:2021-03-20 04:02:20
MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等。
MySQL Proxy就是这么一个中间层代理,简单的说,MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。
MySQL Proxy更强大的一项功能是实现“读写分离”,基本原理是让主数据库处理事务性查询,让从库处理SELECT查询。数据库复制被用来把事务性查询导致的变更同步到集群中的从库。   
官网: http://dev.mysql.com/doc/mysql-proxy/en/

1.环境配置

master 192.168.0.109

slave 192.168.0.110

slave 192.168.0.112

已经配置好主从复制,基于gtid 事务的复制。mysql版本5.7.12

数据库统一访问用户:root  密码:abc123 并授权其他机器访问

grant all privileges on test_db.* to 'root'@'%' identified by 'abc123';
flush privileges;
创建了数据库 test_db,和表temp。
2. 安装mysql-proxy
实现读写分离是由lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装
tar -zxvf  mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
 mv mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit mysql-proxy
3.配置mysql-proxy
cd mysql-proxy
mkdir lua #创建脚本存放目录
mkdir logs #创建日志目录
 mkdir conf #放置配置文件
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本

vi conf/ mysql-proxy.cnf
[mysql-proxy]
daemon=true    #以守护进程方式运行
user=root #运行mysql-proxy用户
pid-file=/root/mysql-proxy/logs/mysql-proxy.pid #进程pid文件
keepalive=true #mysql-proxy崩溃时,尝试重启
event-threads=4 # event-handing线程数,默认值是1
max-open-files=2048  # 最大文件句柄数

log-level=info # 日志级别:error|warning|info|message|debug
#log-use-syslog=true  # 日志使用syslog,和log-file只能开启一个
log-file=/root/mysql-proxy/logs/ mysql-proxy.log # 日志文件

admin-username=root #主从mysql共有的用户
admin-password=abc123 #用户的密码
admin-address=192.168.0.112:4040 #mysql-proxy运行ip和端口,不加端口,默认4040
admin-lua-script=/root/mysql-proxy/lua/admin-sql.lua  #指定管理脚本

proxy-skip-profiling=true  #是否禁用查询性能剖析
proxy-backend-addresses=192.168.0.109:3306  #后端mysql的ip和port
proxy-read-only-backend-addresses=192.168.0.110:3306,192.168.0.112:3306 #指定后端从slave读取数据, 多个以逗号分隔,超过2条换行写
proxy-lua-script=/root/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
 
  由于安全要求,必须将配置文件权限设为660(创建人可读写,同组人可读),否则不允许启动。
chmod 660 conf/mysql-proxy.cnf
4.修改读写分离脚本
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,  #默认超过4个连接数时,才开始读写分离,改为1
                max_idle_connections = 1,  默认8,改为1

                is_debug = false
        }
end
5.启动mysql-proxy
bin/mysql-proxy --defaults-file=conf/mysql-proxy.cnf

使用多个客户端查询,添加数据测试。

参考文章:
4. mysql-proxy