项目名称:
构建一个基于双vip的MySQL的主从复制(实现读写分离,半同步,GTID,延迟备份功能)MySQL主从复制集群
项目描述:
为了提升MySQL的并发能力,并实现读写分离,大大提高MySQL集群的业务处理能力。同时深入学习MySQL的整体部署和对集群架构的理解。
项目环境:
3台2核的MySQL服务器(虚拟机)centos-7.9 + mysql-5.7.33
2台2核的中间件服务器(虚拟机)centos-7.9 +keepalived-1.3.5 +mysqlrouter-8.0.23
1台2核的 Client (虚拟机)centos-7.9 + mysql-5.7.33
项目步骤:
一、服务器的基本信息如下
二、实现基于GTID的主从复制
1.在master服务器上做一个全备份,导出数据再导入slave服务器上,保持两条服务器的初始数据一致
将备份文件放到/backup/目录下叫做all_ab.sql
使用scp传输到两台slave服务器上
在slave服务器上导入传输过来的二进制文件,并登录MySQL查看三者是否数据一致
2.在master服务器和slave服务器上配置/etc/my.cnf文件中开启二进制日志文件并配置好server_id 和 GTID
3.在3台服务器都需重启MySQL服务
4.在master的MySQL服务器创建两个给slave服务器上拉取二进制日志文件的用户,并给创建的用户进行拉取授权
4.在slave服务器上配置masters上拉取二进制日志数据文件的用户名、密码、端口号以及位置号,并开启slave服务
5.在slave服务器上启动slave服务,查看slave的状态
看 Slave_IO_Running 和 Slave_SQL_Running 是否启动,如果二者都显示yes,说明同步成功
通过slave的状态信息,可以看到Matser_UUID、GTID的值等信息
6.查看master的状态,对比slave端,Executed_Gtid_Set的一致
7.验证主从复制的效果
在master上的MySQL服务中创建库test
在slave中能看到相应的test库,则说明GTID的主从复制搭建成功
GTID的值在完成一次事务后,变成了0e4fa732-a549-11eb-8c15-000c29266610:1-5 (自增1)
三、在salve1上实现半同步复制,slave2上实现延迟复制
1.在master上安装插件并且配置参数
2.在slave上安装插件并且配置参数
3.master和slave1重新启动MySQL后,master上执行事务提交的线程将等待半同步slave库确认已收到事务的所有事件(此时slave会向master发送ACK,Acknowledgement),或者直到发生超时4.在slave2上配置延迟信息(实际工作中配10~20最佳,这里为了快速检验效果,配置了60秒),在master上做操作,slave2上60秒在得到相应的效果(验证得出)
四、配置中间件实现读写分离和高可用的效果
1.在两台中间件上安装好mysqlrouter和keepalived
2.在master-router上的 /etc/mysqlrouter/mysqlrouter.conf 和 /etc/keepalived/keepalived.conf 配置信息
vrrp_strict 需要注释: 因为会在iptables里添加一条规则,阻止网络通信,会导致脑裂现象
2.在backup-router上的 /etc/mysqlrouter/mysqlrouter.conf 和 /etc/keepalived/keepalived.conf 配置信息
vrrp_strict 需要注释: 因为会在iptables里添加一条规则,阻止网络通信,会导致脑裂现象
3.验证读写分离和高可用效果
在master上创建一个可读可写的用户
在slave上创建一个只读用户
在client上使用两个用户访问中间件服务器验证读写分离的效果
这样,一个基于双vip的MySQL的主从复制(实现读写分离,半同步,GTID,延迟备份功能)的集群就搭建成功了
项目心得:
1.要提前规划好整个集群的架构(最好画一个工作机制图),配置文件内容要细 心认真,避免小错误而影响整个项目的实施。
2.更深入地学习和理解了MySQL的集群架构和高可用以及对ip地址的规划,同 时具备了一定的troubleshooting的能力。
3.深入思考:
当master服务器发生宕机时如何实现主从切换?
当中间件的master上哪些因素会使vip转移到backup上?
对MySQL集群进行压力测试?