mysql-proxy实现读写分离:

数据库 waitig 543℃ 百度已收录 0评论

一:mysql主从数据库的配置
要求:配置主

从复制: server2 主 172.25.28.2
server3 从 172.25.28.3
二:安装配置mysql-proxy

[root@server1 /]# tar zxf mysql-proxy-0.8.5-linux-el6-x86-64bit -C /usr/local/
[root@server1 local]# ln -s mysql-proxy-0.8.5-linux-el6-x86-64bit/ mysql-proxy  ##简化路径
[root@server1 local]# mkdir /usr/local/mysql-proxy/conf
[root@server1 local]# mkdir /usr/local/mysql-proxy/log

[root@server1 local]# vim mysql-proxy/conf/mysql-proxy.conf ##编译配置文件

[mysql-proxy]
daemon=true   #打入后台
user=root     #
keepalive=true
plugins=proxy,admin
log-level=info    #日志级别
log-file=/usr/local/mysql-proxy/log/mysql-proxy.log  ##proxy日志地址
proxy-address=172.25.28.1:3306  #本机ip地址      
proxy-backend-addresses=172.25.28.2:3306  ##backend主   注意addresses
proxy-read-only-backend-addresses=172.25.28.3:3306  ##backend从
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua    ##lua脚本地址
admin-address=172.25.28.1:4041   ##proxy的管理用户adminiphe端口
admin-username=admin
admin-password=westos
admin-lua-script=/usr/local/mysql-proxy/lib/mysql-proxy/lua/admin.lua   #admin的lua脚本地址;

更改lua脚本
[root@server1 local]# vim /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
使其快速进入读写分离状态

-- connection pool
if not proxy.global.config.rwsplit then
        proxy.global.config.rwsplit = {
                min_idle_connections = 1,  ##最小连接数
                max_idle_connections = 2,  ##最大连接数后实现读写分离

                is_debug = false
        }

开启proxy控制

[root@server1 local]# /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf

查看日志状态:

[root@server1 mysql-proxy]#  /usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
[root@server1 mysql-proxy]#cat  log/mysql-proxy.log
2017-10-21 13:15:54: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=1409 alive
2017-10-21 13:15:54: (critical) plugin proxy 0.8.5 started
2017-10-21 13:15:54: (critical) plugin admin 0.8.5 started
2017-10-21 13:15:54: (critical) network-socket.c:492: bind(172.25.28.1:3306) failed: Address already in use (98)
2017-10-21 13:15:54: (critical) chassis-mainloop.c:270: applying config of plugin proxy failed
2017-10-21 13:15:54: (critical) mysql-proxy-cli.c:599: Failure from chassis_mainloop. Shutting down.
2017-10-21 13:15:54: (message) Initiating shutdown, requested from mysql-proxy-cli.c:600
2017-10-21 13:15:54: (message) shutting down normally, exit code is: 1
2017-10-21 13:15:54: (critical) chassis-unix-daemon.c:189: [angel] PID=1380 died on signal=11 (it used 2 kBytes max) ... waiting 3min before restart
2017-10-21 13:15:54: (message) chassis-unix-daemon.c:176: [angel] PID=1409 exited normally with exit-code = 1 (it used 1 kBytes max)
2017-10-21 13:15:54: (message) Initiating shutdown, requested from mysql-proxy-cli.c:273
2017-10-21 13:15:54: (message) shutting down normally, exit code is: 1
2017-10-21 13:15:56: (message) chassis-unix-daemon.c:136: [angel] we try to keep PID=1410 alive
2017-10-21 13:15:56: (critical) plugin proxy 0.8.5 started
2017-10-21 13:15:56: (critical) plugin admin 0.8.5 started
2017-10-21 13:15:56: (message) proxy listening on port 172.25.28.1:3306
2017-10-21 13:15:56: (message) added read/write backend: 172.25.28.2:3306
2017-10-21 13:15:56: (message) added read-only backend: 172.25.28.3:3306
2017-10-21 13:15:56: (message) admin-server listening on port 172.25.28.1:4041
[root@server1 mysql-proxy]# 

根据日志可以查看已经控制到mysql

过滤端口:

[root@server1 mysql-proxy]# netstat -anltp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      936/sshd            
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1012/master         
tcp        0      0 172.25.28.1:4041            0.0.0.0:*                   LISTEN      1410/mysql-proxy    
tcp        0      0 172.25.28.1:3306            0.0.0.0:*                   LISTEN      1410/mysql-proxy    
tcp        0      0 172.25.28.1:53135           172.25.28.2:3306            TIME_WAIT   -                   
tcp        0      0 172.25.28.1:22              172.25.28.250:55476         ESTABLISHED 1072/sshd           
tcp        0      0 172.25.28.1:53137           172.25.28.2:3306            TIME_WAIT   -                   
tcp        0      0 :::22                       :::*                        LISTEN      936/sshd            
tcp        0      0 ::1:25                      :::*                        LISTEN      1012/master         

z在master(server1)端给zpy用户权限:

mysql> grant all on test.* to zpy@'%' identified by 'zpy';
Query OK, 0 rows affected (0.00 sec)

下来我们开始检测:
在mysql安装lsof:

[root@server2 ~]# yum install -y lsof

重新开一台设备:

[root@foundation28 mysql10.21]# mysql -h 172.25.28.1 -u zpy -p   ##通过访问proxy,直接转到mysql
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 5.1.71-log Source distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

如上每登陆一次,使用lsof观察3306 端口,连接一次

[root@server2 ~]# lsof -i :3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  1411 mysql   11u  IPv4   9514      0t0  TCP *:mysql (LISTEN)
mysqld  1411 mysql   31u  IPv4  10201      0t0  TCP 172.25.28.2:mysql->172.25.28.1:53132 (ESTABLISHED)

当连接数大于2(lua脚本中设置的时);即启动了读写分离机制:
我们可以登陆admin p’roxy管理用户查看:

[root@foundation28 mysql10.21]# mysql -h 172.25.28.1 -u admin -pwestos -P 4041;
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.99-agent-admin

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> select * from backends;
+-------------+------------------+---------+------+------+-------------------+
| backend_ndx | address          | state   | type | uuid | connected_clients |
+-------------+------------------+---------+------+------+-------------------+
|           1 | 172.25.28.2:3306 | up      | rw   | NULL |                 0 |
|           2 | 172.25.28.3:3306 | unknown | ro   | NULL |                 0 |
+-------------+------------------+---------+------+------+-------------------+
2 rows in set (0.00 sec)

MySQL [(none)]> Bye
[root@foundation28 mysql10.21]# 

当然我们也可以使用上一篇所用的关闭I/O线程,然后写入数据最后在两端查看不同;;


本文由【waitig】发表在等英博客
本文固定链接:mysql-proxy实现读写分离:
欢迎关注本站官方公众号,每日都有干货分享!
等英博客官方公众号
点赞 (0)分享 (0)