mysql-proxy实现mysql的读写分离

1. mysql proxy 简介

  • mysql-proxy是mysql官方提供的mysql中间件服务,上游可接入若干个mysql-client,后端可连接若干个mysql-server。
    它使用mysql协议,任何使用mysql-client的上游无需修改任何代码,即可迁移至mysql-proxy上。
    mysql-proxy最基本的用法,就是作为一个请求拦截,请求中转的中间层:
    进一步的,mysql-proxy可以分析与修改请求。拦截查询和修改结果,需要通过编写Lua脚本来完成。
    mysql-proxy允许用户指定Lua脚本对请求进行拦截,对请求进行分析与修改,它还允许用户指定Lua脚本对服务器的返回结果进行修改,加入一些结果集或者去除一些结果集均可。
    所以说,根本上,mysql-proxy是一个官方提供的框架,具备良好的扩展性,可以用来完成:
    sql拦截与修改
    性能分析与监控
    读写分离
    请求路由等

读写分离实例

1)我们在进行web开发的时候,往往一台MySQL服务器是不够用的,可能需要多台,web到底连接哪个数据库?
这要程序员自己写的代码来决定的,现在是二台mysql服务器,如果有多台或者是N台呢,靠用php代码来管理连接数据库,就太过繁琐
mysql-proxy实现mysql的读写分离_第1张图片
2)mysql proxy就很好解决了这个问题,对于程序端而言,web端的请求,只要到mysql proxy的连接池就OK了,剩下的工作就交给mysql proxy了。对于程序代码管理来说就简单多了。
mysql-proxy实现mysql的读写分离_第2张图片

基于主从复制进行 mysql 的读写分离
主重复制的相关信息可参看的我博客mysql主从复制(基于GTID的主从复制、并行复制、半同步复制)

注:以下实验是基于mysql 基于GTID 的半同步复制模式进行的在此条件下进行的

实验拓扑

 master:server11:IP 172.25.21.11
 slave:server12:IP 172.25.21.12
 mysql proxy :server13:IP 172.25.21.13
 mysql 版本:5.7.17-1.el6.x86_64
 musql-proxy 版本:mysql-proxy-0.8.5-linux-el6-x86-64

2. 进行mysql proxy的安装配置

将mysql-proxy安装包进行解压,并移动到指定目录下

 [root@serve13 mnt]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz 
 [root@serve13 mnt]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit /usr/local/mysql-proxy

进行mysql-proxy配置文件的编写

编辑配置文件

 [root@serve13 ~]# vim /etc/mysql-proxy.conf
 [mysql-proxy]
 user=root   
 proxy-address=0.0.0.0:3306   # 本机监听的地址及端口
 proxy-backend-addresses=172.25.21.11:3306
                              # 配置读写服务器,IP及端口
 proxy-read-only-backend-addresses=172.25.21.12:3306
                              # 配置只读服务器,IP及端口
 proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
                              # 用这个lua脚本来实现读写分离
 admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua                    
                              # admin模块的lua脚本
 log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
                              # 服务日志
 log-level=debug              # 日志模式设置为debug模式,方便调试
 keepalive=true               # 持续连接
 daemon=true                  # 打入后台

mysql-proxy实现mysql的读写分离_第3张图片

在/usr/local/mysql-proxy/路径中建立对应的logs目录,否则在开启服务时会出现报错
还要将mysql-proxy的配置文件的权限修改为660,否则在开启服务器时会有权限问题。

 [root@serve13 ~]# mkdir /usr/local/mysql-proxy/logs/
 [root@serve13 ~]# chmod 660 /etc/mysql-proxy.conf 

编辑读写分离的lua脚本,方便实验观测(生产环境中不需要此操作)

 [root@serve13 mysql-proxy]# vim share/doc/mysql-proxy/rw-splitting.lua38-- connection pool
 if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1, --4
                # 最小连接数,默认值为4
                max_idle_connections = 1, --8
                # 最大连接数后实现读写分离,默认值为
                is_debug = false
        }
 end

mysql-proxy实现mysql的读写分离_第4张图片

3. 启动服务,并进行测试

直接执行安装包中的命令进行启动服务

 [root@serve13 bin]# /usr/local/mysql-proxy/bin/mysql-proxy --help
                # 查看启动时调用的参数
 [root@serve13 bin]# /usr/local/mysql-proxy/bin/mysql-proxy \
 > --plugins=admin \       # 模块选择
 > --plugins=proxy \
 > --defaults-file=/etc/mysql-proxy.conf \  # 指定配置文件
 > --admin-username=root \   # admin 模块指定的启动用户
 > --admin-password=redhat   # admin 模块启用的密码

mysql-proxy实现mysql的读写分离_第5张图片

查看进程及启动日志

 [root@serve13 bin]# ps ax # 查看进程是否启用
 [root@serve13 bin]# cat /usr/local/mysql-proxy/logs/mysql-proxy.log 
                   # 通过日志查看运行状态

ps ax
这里写图片描述
日志内容
mysql-proxy实现mysql的读写分离_第6张图片

可通过admin 模块来查看proxy 的后端情况

通过 tcpdump,lsof 命令来查看数据包走向

在客户端进行测试

你可能感兴趣的:(msyql)