Table of Contents
1. Mysql-proxy简介
- mysql-proxy是官方提供的mysql中间件产品,可以实现负载平衡,读写分离,failover等操作。
- MySQL Proxy就是一个连接池,负责将前台应用的连接请求转发给后台的数据库,并且通过使用lua脚本,可以实现复杂的连接控制和过滤,从而实现读写分离和负载平衡。对于应用来说,MySQL Proxy是完全透明的,应用则只需要连接到MySQL Proxy的监听端口即可。
2. 实验目的
搭建mysql主从复制,通过mysql-proxy将写请求转发给主库,读请求转发给从库,从而实现读写分离,负载均衡,减轻主库压力
3. 实验环境
node1:读写
node2:只读
node3:代理【Mysql-proxy】
4. 配置读写分离
配置node1和node2主从复制,这里我们使用GTID主从复制。如果还没有配置可以参考文章:https://blog.csdn.net/m0_37868230/article/details/106135132
4.1 安装mysql-proxy
4.2 配置node3作为代理端
- 解压mysql-proxy
- 创建conf目录,并编译配置文件
mkdir conf
cd conf/
vim mysql-proxy.conf
创建日志目录(根据配置文件中指定)
- 修改读写分离脚本
- 修改配置文件权限为0660,否则会报错,然后启动
chmod 0660 /usr/local/mysql-proxy/conf/mysql-proxy.conf
可以看到,报错信息提示配置文件中存在字符不识别
- 修改配置文件,并重新启动
vim /usr/local/mysql-proxy/conf/mysql-proxy.conf
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/usr/local/mysql-proxy/conf/mysql-proxy.conf
注意:空格也是字符,因此不要多余空格
启动成功~
4.3 物理机安装mariadb进行测试
yum install -y mariadb-server.x86_64
- node1上进行授权、刷新,并添加数据
grant insert,update,select on *.* to root@'%' identified by 'Du@961028';
flush privileges;
use dsd
mysql> create table usertable (
-> username varchar(10) not null,
-> password varchar(15) not null );
desc usertable;
- 在物理机上访问
mysql -h 192.168.1.13 -uroot -pDu@961028
- node3代理端安装lsof工具,查看3306端口进程
yum install -y lsof.x86_64
lsof -i:3306
当前只有一个请求,该请求指向node1
我们在上面修改它最大为2,超过2则会转发给另一台主机
- 打开第二个连接,查看3306端口进程
- 打开第三个连接,查看3306端口进程
可以看到,超过两个连接之后,就会启用读写分离
读写分离启用后,验证node1为读写库,node2为只读库
先关闭node2的主从复制,否则会直接通过主从复制备份数据,那么显示是相同的,这样会导致我们没办法清晰的看到读写分离的效果
- 在物理机插入数据
- 物理机访问(超过两个连接,此时请求是在node2上)
- node1访问
上述证明了,我们读是从node2上读取,而写是在node1上写入,也就是说读写分离已经成功~
- 再次开启主从复制,可以看到,数据读取到node2