MySQL实现双主多从架构luniqueWord格式.docx
《MySQL实现双主多从架构luniqueWord格式.docx》由会员分享,可在线阅读,更多相关《MySQL实现双主多从架构luniqueWord格式.docx(14页珍藏版)》请在冰豆网上搜索。
![MySQL实现双主多从架构luniqueWord格式.docx](https://file1.bdocx.com/fileroot1/2022-10/29/b42969b3-07f6-4030-bbd1-608af960c4da/b42969b3-07f6-4030-bbd1-608af960c4da1.gif)
宕机和断电等)导致不能正常运行,则此时需要让对应的Slave_Backup自动切换为新从机;
7)无论是Master还是切换后的Master_Backup,它们向客户端提供的连接地址应保持一致,如上图提供的VIP+Port,即192.168.31.201:
3306,Slave和Slave_Backup也应如此,对外提供的连接地址始终是192.168.31.202:
3306和192.168.31.203:
3306。
2.实现过程
MySQL安装步骤不在此讲述。
1.
2.
2.1.实现Master-Master结构
2.1.1.修改Master和Master_Backup配置文件,vi/etc/f
主要在[mysqld]内添加如下配置项:
Sql配置代码:
#
log文件名,必填
log-bin
=
mysql-bin
服务器Id,必须唯一
server-id
230
不参与同步的数据库名,有多个则添加多个配置项
binlog-ignore-db
mysql
Master-Master结构必须的
log-slave-updates
slave-skip-errors
all
sync_binlog
1
read_only
0
2.1.2.为复制请求方提供链接账号和密码
由于是Master-Master结构,因此需在双方终端中执行如下SQL命令:
Sql代码:
GRANT
REPLICATION
SLAVE
ON
*.*
to
'
slave'
@'
%'
identified
by
slave123'
;
可在mysql实例的user表中查询到记录,重点关注Repl_slave_priv字段的值是否为Y,此账号(用户名:
slave,密码:
slave123)主要用于定位复制点
2.1.3.在从机上指定Master数据源
1)在Master上执行
Sql代码:
SHOW
MASTER
STATUS;
得到的结果如下:
重点关注File和Position两个字段值
2)在Master_Backup也执行上述步骤,由于是初始状态,得到的结果和上图一样;
3)在Master上执行如下SQL命令,填入Master_Backup的host、链接账号和密码、File和Position值
mysql>
STOPSLAVE;
CHANGE
TO
MASTER_HOST='
192.168.31.233'
MASTER_USER='
MASTER_PASSWORD='
MASTER_LOG_FILE='
mysql-bin.000001'
MASTER_LOG_POS=107;
STARTSLAVE;
4)在Master_Backup上执行如下SQL命令,填入Master的host、链接账号和密码、File和Position值
192.168.31.230'
5)重启Master和Master_Backup
2.1.4.测试
1)当Master和Master_Backup都正常运行时,在任意一端更新数据后都会同步到另一段;
2)当Master处于不可运行时,在Master_Backup更新数据后重启Master,这时在Master上可得到最新的数据;
3)当Master_Backup处于不可运行时,在Maste更新数据后重启Master_Backup,这时在Master_Backup上可得到最新的数据。
2.2.实现Master-Slave结构
2.2.1.实施过程
将2.1.1和2.1.3的过程在所有Slave上操作一遍即可,需要注意配置文件中server-id一定要唯一,还有在执行CHANGEMASTERTO命令时,MASTER_HOST为192.168.31.230
2.2.2.
测试
1)当Master和Master_Backup都正常运行时,在任意一端更新数据后都会同步到两个Slave上;
2)当Master处于正常运行时,在此端更新数据后都会同步到两个Slave上,而无论Master_Backup是否正常;
3)当Master处于不可运行时,Master_Backup通过Monitor(Keepalived)成为接管者,在Master_Backup更新数据后都会同步到所有Slave上,并且重启Master后,最新数据也会同步到此端。
可事与愿违,在第3)种场景下,Master_Backup不会将数据同步给Slave,即使后来在Slave上将MASTER_HOST指定为Keepalived提供的VIP(192.168.31.201)也无济于事:
192.168.31.201'
STARTSLAVE;
在Slave上执行SHOWSLAVESTATUS;
得出如下结果:
究其原因,如上图所示,Master_Server_Id为230,仍然指向的是已经处于不可运行的Master,而预期结果是希望它能自动的更新定位到Master_Backup(233)上,达到自动切换的目的。
没办法,只有自己执行CHANGEMASTERTO...手动定位了。
我草...,一不注意就会定位错误,造成数据丢失的问题,而且也不满足快速响应容灾切换的目的。
3.最终方案
最终方案将选择mysql-mmm结合半同步机制来实现容灾自动切换。
3.
3.1.在master(230和233)上安装semisyncmaster并设置
INSTALL
PLUGIN
rpl_semi_sync_master
SONAME
semisync_master.so'
rpl_semi_sync_slave
semisync_slave.so'
SET
GLOBAL
rpl_semi_sync_master_enabled
1;
rpl_semi_sync_slave_enabled
vi/ect/f后加入如下配置:
配置代码:
3.2.在slave(231、232、234和235)上安装slave插件并设置
3.3.所有mysql实例停止slave并开启slave,使半同步机制生效
stop
slave;
start
3.4.查看semisync状态
show
status
like
%emi%'
重点关注:
1)Rpl_semi_sync_master_clients:
与当前master建立半同步连接的客户端数;
2)Rpl_semi_sync_master_status:
作为半同步master端的就绪状态(ON:
就绪,OFF:
未就绪)
3)Rpl_semi_sync_slave_status:
作为半同步slave端的就绪状态(ON:
3.5.安装mysql-mmm
3.1.
3.2.
3.3.
3.4.
3.5.
3.5.1.新增一台专门用于监控mysql的服务器(mysql_monitor),IP为192.168.31.250
3.5.2.在mysql_monitor、master、master_backup、slave和slave_backup上安装epel网络源
Linux命令行代码:
yum
install
3.5.3.在mysql_monitor上安装mysql-mmm-monitor
-y
mysql-mmm-monitor
3.5.4.在master、master_backup、sl