欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql-proxy读写分离

程序员文章站 2022-05-02 10:04:19
...

mysql-proxy读写分离配置

配置环境
master机:server1(172.25.254.1)
slave机:server2(172.25.254.2)
调度器:server3(172.25.254.3)

mysql-proxy简介

  1. mysql-proxy是官方提供的mysql中间件产品可以实现负载平衡,读写分离,failover等

  2. MySQL Proxy就是这么一个中间层代理,简单的说,MySQL
    Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,

  3. 从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。

  4. 当然,这样proxy机器可能成为单点失效,但完全可以使用多个proxy机器做为冗余,在应用服务器的连接池配置中配置到多个proxy的连接参数即可。

mysql proxy的连接池

  • 对于程序端而言,web端的请求,只要到mysql proxy的连接池就OK了,剩下的工作就交给mysql
    proxy了。对于程序代码管理来说就简单多了。个人觉得这一点最值得借用的了。

mysql-proxy读写分离

首先server1和server2配置主从复制,已经写过了,不会的可以去下面的地址查看。

主从复制配置
https://blog.csdn.net/su_use/article/details/81488043

安装读写分离代理mysql-proxy

[root@server3 ~]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit  mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz 
[root@server3 ~]# rm -rf mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
[root@server3 ~]# ls
mysql-proxy-0.8.5-linux-el6-x86-64bit 
[root@server3 ~]# mv mysql-proxy-0.8.5-linux-el6-x86-64bit/ /usr/local/
[root@server3 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy

新建目录

[root@server3 local]# cd mysql-proxy
[root@server3 mysql-proxy]# ls
bin  include  lib  libexec  licenses  share
[root@server3 mysql-proxy]# mkdir conf
[root@server3 mysql-proxy]# mkdir logs
[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf

编写配置文件

vim conf/mysql-proxy.conf
----
[mysql-proxy]
user=root
#admin-username=proxy
#admin-password=ssH+101010
proxy-address=172.25.5.3:3306
proxy-read-only-backend-addresses=172.25.5.2
proxy-backend-addresses=172.25.5.1
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
#admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

---
[mysql-proxy]

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

修改lua脚本

[aaa@qq.com mysql-proxy]# vim share/doc/mysql-proxy/rw-splitting.lua
----
  if not proxy.global.config.rwsplit then
          proxy.global.config.rwsplit = {
                  min_idle_connections = 1,
                  max_idle_connections = 1,  #触发读写分离的最大连接数

                  is_debug = false
          }
  end
  ---

mysql 受权proxy用户(master和slave都要有,主从复制后,master授权,slave也会自动授权。)

grant all on *.* to aaa@qq.com'172.25.5.%' indentified by 'ssH+101010';

启动mysql-proxy

[root@server3 mysql-proxy]# vim conf/mysql-proxy.conf 
[root@server3 mysql-proxy]# chmod 660 conf/mysql-proxy.conf 
[root@server3 mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

mysql-proxy读写分离

检测:登陆

mysql-proxy读写分离

插入数据:

mysql-proxy读写分离

master查看:

mysql-proxy读写分离

slave查看:

mysql-proxy读写分离

mysql-proxy读写分离

再连接一个客户端,就会触发读写分离,

mysql-proxy读写分离

proxy(自动弹出的)

mysql-proxy读写分离

mysql-proxy的admin模块

配置文件
[aaa@qq.com mysql-proxy]# vim conf/mysql-proxy.conf 
---
[mysql-proxy]
[mysql-proxy]
user=root
admin-username=admin
admin-password=ssH+101010
proxy-address=172.25.5.3:3306
proxy-read-only-backend-addresses=172.25.5.2
proxy-backend-addresses=172.25.5.1
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log
log-level=debug
daemon=true
keepalive=true

打开mysql-proxy:

[aaa@qq.com mysql-proxy]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf --plugins=admin --plugins=proxy

mysql-proxy读写分离

mysql-proxy读写分离