一 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端进行调度,实现读写分离。