项目名称:

构建一个基于双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

项目步骤:

一、服务器的基本信息如下

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器

二、实现基于GTID的主从复制

1.在master服务器上做一个全备份,导出数据再导入slave服务器上,保持两条服务器的初始数据一致

将备份文件放到/backup/目录下叫做all_ab.sql

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_02


使用scp传输到两台slave服务器上

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_03

在slave服务器上导入传输过来的二进制文件,并登录MySQL查看三者是否数据一致

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_04


cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_05


2.在master服务器和slave服务器上配置/etc/my.cnf文件中开启二进制日志文件并配置好server_id 和 GTID

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_06

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_07

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_08

3.在3台服务器都需重启MySQL服务

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_09

4.在master的MySQL服务器创建两个给slave服务器上拉取二进制日志文件的用户,并给创建的用户进行拉取授权

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_MySQL_10

4.在slave服务器上配置masters上拉取二进制日志数据文件的用户名、密码、端口号以及位置号,并开启slave服务

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_MySQL_11

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_12


5.在slave服务器上启动slave服务,查看slave的状态

看 Slave_IO_Running 和 Slave_SQL_Running 是否启动,如果二者都显示yes,说明同步成功

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_13

通过slave的状态信息,可以看到Matser_UUID、GTID的值等信息

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_14

6.查看master的状态,对比slave端,Executed_Gtid_Set的一致

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_15

7.验证主从复制的效果

在master上的MySQL服务中创建库test

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_16


在slave中能看到相应的test库,则说明GTID的主从复制搭建成功

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_17


GTID的值在完成一次事务后,变成了0e4fa732-a549-11eb-8c15-000c29266610:1-5 (自增1)

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_18

三、在salve1上实现半同步复制,slave2上实现延迟复制

1.在master上安装插件并且配置参数

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_19

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_20

2.在slave上安装插件并且配置参数

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_linux_21

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_MySQL_22

3.master和slave1重新启动MySQL后,master上执行事务提交的线程将等待半同步slave库确认已收到事务的所有事件(此时slave会向master发送ACK,Acknowledgement),或者直到发生超时4.在slave2上配置延迟信息(实际工作中配10~20最佳,这里为了快速检验效果,配置了60秒),在master上做操作,slave2上60秒在得到相应的效果(验证得出)

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_23

四、配置中间件实现读写分离和高可用的效果

1.在两台中间件上安装好mysqlrouter和keepalived

2.在master-router上的 /etc/mysqlrouter/mysqlrouter.conf 和 /etc/keepalived/keepalived.conf 配置信息

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_24


vrrp_strict 需要注释: 因为会在iptables里添加一条规则,阻止网络通信,会导致脑裂现象

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_25


2.在backup-router上的 /etc/mysqlrouter/mysqlrouter.conf 和 /etc/keepalived/keepalived.conf 配置信息

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_26

vrrp_strict 需要注释: 因为会在iptables里添加一条规则,阻止网络通信,会导致脑裂现象

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_27

3.验证读写分离和高可用效果

在master上创建一个可读可写的用户

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_MySQL_28

在slave上创建一个只读用户

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_mysql_29

在client上使用两个用户访问中间件服务器验证读写分离的效果

cm节点关于mysql数据库的备用节点高可用 mysql vip节点_服务器_30


cm节点关于mysql数据库的备用节点高可用 mysql vip节点_MySQL_31


这样,一个基于双vip的MySQL的主从复制(实现读写分离,半同步,GTID,延迟备份功能)的集群就搭建成功了

项目心得:
1.要提前规划好整个集群的架构(最好画一个工作机制图),配置文件内容要细 心认真,避免小错误而影响整个项目的实施。
2.更深入地学习和理解了MySQL的集群架构和高可用以及对ip地址的规划,同 时具备了一定的troubleshooting的能力。
3.深入思考:
当master服务器发生宕机时如何实现主从切换?
当中间件的master上哪些因素会使vip转移到backup上?
对MySQL集群进行压力测试?