您的位置:首页 > 数据库 > MySQL

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

2016-12-04 21:41 441 查看
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/
下载:http://downloads.mysql.com/archives/proxy/

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里面已经集成,无需再安装

wget http://downloads.mysql.com/archives/get/file/mysql-proxy-0.8.5-linux-glibc2.3-x86-64bit.tar.gz
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


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

参考文章:
1.MySQL Proxy使用
2.MySQL Proxy快速实现读写分离以及负载均衡
3.mysql-proxy的读写分离
4.mysql-proxy
mysql-proxy介绍

mysql-proxy命令参数

mysql-proxy脚本编程

mysql-proxy常见问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql