利用mysql-proxy实现数据库的读写分离

一 mysql-proxy实现读写分离
首先需要在两个服务器server3和server4端实现主从复制,server3作为master,server4作为slave。
1.将mysql-proxy压缩包解压到/usr./local目录下,并将解压后的包重命名为mysql-proxy。在该目录下新建目录conf和log,conf目录用来存放配置文件,log目录用来存放日志文件。
2.在/usr/local/mysql-proxy/conf目录下新建配置文件mysql-proxy.conf :

[mysql-proxy]
user=root               #指定mysql-proxy的运行用户
proxy-address=0.0.0.0:3306          #指定mysql-proxy的端口为3306
proxy-backend-addresses=172.25.17.3:3306     #指定master端服务器和端口
proxy-read-only-backend-addresses=172.25.17.4:3306    #指定slave端服务器和端口
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    #指定lua脚本位置
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log   #指定mysql-proxy配置文件路径
log-level=debug
daemon=true
keepalive=true

编辑完成之后保存退出并赋予文件660权限:

chmod 660 conf/mysql-proxy.conf

2.编辑lua脚本:

vim share/doc/mysql-proxy/rw-splitting.lua

在配置文件中修改:

 38 if not proxy.global.config.rwsplit then
 39         proxy.global.config.rwsplit = {
 40                 min_idle_connections = 1,     #设定最小连接数为1
 41                 max_idle_connections = 2,     #设定最大连接数为2
 42 
 43                 is_debug = false
 44         }

这里写图片描述
3. 将mysql-proxy的启动参数写入全局变量:

vim /root/.bash_profile

编辑/root/.bash_profile文件内容:
这里写图片描述
刷新全局变量:

source /root/.bash_profile

4.指定配置文件路径开启mysql-proxy服务并查看端口:

[root@server5 mysql-proxy]# mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf 
[root@server5 mysql-proxy]# netstat -antlp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:6379              0.0.0.0:*                   LISTEN      917/redis-server 12 
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      910/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      996/master          
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      1335/mysql-proxy    
tcp        0      0 172.25.17.5:22              172.25.17.250:42424         ESTABLISHED 1111/sshd           
tcp        0      0 172.25.17.5:39292           172.25.17.3:6379            ESTABLISHED 917/redis-server 12 
tcp        0      0 :::22                       :::*                        LISTEN      910/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      996/master          

端口为3306:
这里写图片描述
5.测试:
在主库端建立用户proxy并授权允许远程登录数据库:

mysql> grant all on *.* to 'proxy'@'172.25.17.%' identified by 'ABwestos@123';

在物理机端两次连接proxy端,达到proxy最大连接数(物理端开启两个终端连接,不要在一个终端,要保持连接不退出):

[root@foundation17 Desktop]# mysql -uproxy -pABwestos@123 -h 172.25.17.5

在proxy端查看3306端口连接状态:(lsof指令没有要yum install lsof -y 安装)

[root@server5 mysql-proxy]# lsof -i:3306
COMMAND    PID USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME
mysql-pro 1335 root   10u  IPv4 346469616      0t0  TCP *:mysql (LISTEN)
mysql-pro 1335 root   11u  IPv4 346469672      0t0  TCP server5:mysql->172.25.17.250:42456 (ESTABLISHED)
mysql-pro 1335 root   12u  IPv4 346469671      0t0  TCP server5:40297->server3:mysql (ESTABLISHED)
mysql-pro 1335 root   13u  IPv4 346469673      0t0  TCP server5:40298->server3:mysql (ESTABLISHED)
mysql-pro 1335 root   14u  IPv4 346469674      0t0  TCP server5:mysql->172.25.17.250:42458 (ESTABLISHED)
mysql-pro 1335 root   15u  IPv4 346469675      0t0  TCP server5:48268->server4:mysql (ESTABLISHED)

后端的数据库对客户端来说是透明的,客户端的读写操作由mysql-proxy端进行调度,实现读写分离。

猜你喜欢

转载自blog.csdn.net/letter_A/article/details/81667189