MySQL Proxy

作者: mvictor | 来源:发表于2017-11-13 13:13 被阅读2279次

    架构图

    WX20171113-131232@2x.png

    介绍

    1. 处于client端和MySQL server端之间的应用
    2. 可以监测、分析或改变它们的通信
    3. 使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分析,查询过滤和修改等等

    MySQL-Proxy就是这么一个中间层代理,简单的说,MySQL-Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,
    并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL-Proxy是完全透明的,应用则只需要连接到MySQL-Proxy的监听端口即可。当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗
    余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

    缺点

    1. 通过lua脚本实现的读写分离,不太稳定,官网不建议用

      MySQL Proxy is not GA, and is not recommended for Production use. 
      
    2. 还处于 alpha 版本

    配置方法

    基于 Docker

    环境描述:

    • 操作系统:Ubuntu 14.04
    • master 写服务器:172.17.0.4
    • slave 读服务器:172.17.0.5
    • 调度服务器MySQL-Proxy:172.17.0.6

    1. MySQL 主从复制

    参考《Amoeba for MySQL》

    2. MySQL-Proxy 配置

    1. 安装 mysql-proxy

      • 下载:mysqp-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 /usr/local/mysql-proxy
        
    1. 配置 mysql-proxy

      • 执行命令

        cd /usr/local/mysql-proxy
        mkdir lua #创建脚本存放目录
        mkdir logs #创建日志目录
        cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
        cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本
        
      • 配置文件

        创建配置文件 /etc/mysql-proxy.cnf

        [mysql-proxy]
        user        = root      #运行mysql-proxy用户
        admin-username  = proxy #主从mysql共有的用户
        admin-password  = 123456    #用户的密码
        proxy-address   = 172.17.0.6:4000   #mysql-proxy运行ip和端口,不加端口,默认4040
        proxy-read-only-backend-addresses   = 172.17.0.5    #指定后端从slave读取数据
        proxy-backend-addresses         = 172.17.0.4    #指定后端主master写入数据
        proxy-lua-script            = /usr/local/mysql-proxy/lua/rw-splitting.lua   #指定读写分离配置文件位置
        admin-lua-script            = /usr/local/mysql-proxy/lua/admin-sql.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崩溃时,尝试重启
        

        然后设置 mysql-proxy.cnf 权限: chmod 660 /etc/mysql-porxy.cnf

    1. 配置读写分离脚本

      vi /usr/local/mysql-proxy/lua/rw-splitting.lua

      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
      

      方便测试

    2. 启动 mysql-proxy

      /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf
      

      验证是否启动:

      netstat -tupln | grep 4000
      

      关闭命令:

      killall -9 mysql-proxy
      
    3. 创建用户

      • 在主服务器创建proxy用户用于mysql-proxy使用,从服务器也会同步这个操作
      mysql> CREATE USER proxy;
      mysql> GRANT ALL ON *.* TO proxy IDENTIFIED BY '123456';
      
    4. 测试读写分离

      1. 先暂时停掉主从复制
      2. 在 master 节点插入数据,然后通过 mysql-proxy 查询
      3. 在 slave 节点插入数据,然后通过 mysql-proxy 查询

    相关文章

      网友评论

        本文标题:MySQL Proxy

        本文链接:https://www.haomeiwen.com/subject/zfczmxtx.html