美文网首页
mysql-proxy读写分离

mysql-proxy读写分离

作者: 阿当运维 | 来源:发表于2020-09-14 18:30 被阅读0次

    原理:通过mysql-proxy这种方式收到数据的写入(insert ,update)操作时转发到后端主库 写入,收到数据的读(select)操作时

    转发到后端从库 读取。实现 主库负责--写入,从库负责--读取。
    注意:Proxy其实不是一台机器,只是一个连接方式,读取数据的时候自动从Salve上取,写数据则自动向Master中写。

    实验规划:

    实验前先做好 主从架构
    主---192.168.1.252 (mysql-5.7 ,三台版本一致)
    从---192.168.1.101
    proxy---192.168.1.102

    步骤:

    1.安装mysql-proxy

    yum install lua(新版本已经集成了)
    wget https://downloads.mysql.com/archives/get/p/21/file/mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
    tar zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
    mv  mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit  /usr/local/mysql-proxy
    cd /usr/local/mysql-proxy
    创建日志和lua脚本目录
    mkdir logs lua
    复制lua读写脚本和管理脚本
    cp share/doc/mysql-proxy/rw-splitting.lua ./lua
    cp share/doc/mysql-proxy/admin-sql.lua ./lua
    

    2.创建配置文件

    vim /etc/mysql-proxy.cnf
    内容如下:

    [mysql-proxy]
    user=root #运行mysql-proxy用户
    admin-username=mysql_proxy  #mysql-proxy平台链接后端主从的用户(所以这个用户需要在主从授权给这个机器)
    admin-password=proxy123456  #mysql-proxy平台链接后端主从的密码
    proxy-address=192.168.1.102:4040   #proxy服务监听的端口
    proxy-read-only-backend-addresses=192.168.1.101:3306  #后端负责 只读 的机器(从)
    proxy-backend-addresses=192.168.1.252:3306              #后端负责  写入 的机器(主)
    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=debug
    daemon=true                             #以守护进程的方式运行
    keepalive=true                          #心跳检测
    

    注意:(在服务器上配置文件要把注释都去掉,不然会报错。)
    保存退出。赋予660权限,不然会报错。

    chmod  660 /etc/mysql-proxy.cnf
    

    3.##修改读写配置文件

    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 = 2, #默认8,改为2
                    is_debug = false
            }
    end
    

    4.启动服务并查看

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

    关闭可以用killall -9 mysql-proxy 或者kill -9 ID

    5.主从服务器授权mysql-proxy用户

    在主执行:(事先做好主从架构,从库会自动吧这个操作更新过去,或者在手动去从库也执行一遍)

    grant all privileges on  *.* to 'mysql_proxy'@'192.168.1.%' identified by 'proxy123456';
    flush privileges;
    

    测试

    使用客户端去链接mysql-proxy(1.102)(开2个以上客户端链接)

    mysql -umsql_proxy -p proxy123456 -h 192.168.1.102 -P4040
    

    接下来,测试数据。(主从都开启时,先添加一条数据)


    image.png

    此时如果停掉slave,在添加数据
    stop slave;


    image.png

    发现并没有刚才添加的id为2的这条数据。
    因为此时slave已经停掉了,没有负责给我们提供查询操作的服务了,所以查不到了。刚才可以写入,也是意味着 写入操作是有 master来完成的。

    这时恢复slave,再查询
    start slave;


    image.png

    这时2已经有了,恢复了slave后,先主从通信同步了刚才的数据,再继续提供查询操作。
    到此,读写分离完成。

    参考:

    [https://www.cnblogs.com/fyc119/p/7529903.html](https://www.cnblogs.com/fyc119/p/7529903.html)
    

    相关文章

      网友评论

          本文标题:mysql-proxy读写分离

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