Mysql高可用之配置主主复制

Mysql主主复制

主主复制有两种模式,主备复制模式和主主复制模式,建议使用主备复制模式,因为主主模式可能会产生数据冲突而造成复制链路中断。本篇主要讲主备复制模式。
注意:主备数据库需要采用相同的mysql版本,以免因版本差异出现问题
注意:某些参数配置后需要重启服务器才能生效,建议上线之前都把主从复制参数配置好

主备复制模式

主备复制模式中只有一台会对外提供服务,只有对外提供服务的机器不可用时,另一台才会对外提供服务。

  • 注意事项
    1.只有一台主服务能对外提供服务,另一台主服务处于只读状态并且只作为热备使用
    2.在对外提供服务的主库出现故障或是计划性维护时才会进行切换
    3.使用原来的备库作为主库,而原来的主库需设置成新的备库,同时需设置为只读或下线状态,待维护完成后再重新上线
    4.两台服务器上的初始数据需相同
    5.两台服务器都需要启动binlog,并配置不同的server_id
    6.两台服务器上都要启用log_slave_updates参数
    7.备库在初始化时需启用read_only
    8.需修改两个库的自增参数

主主复制模式

主主复制模式中,两台都会对外提供服务,这种模式并不会分担主库的写负载, 因为无论写到哪一个主服务上,都会复制到另一个主服务上重新执行,所以这种模式并不能分担写负载。因为主主模式可能会产生数据冲突而造成复制链路中断,.不建议使用主主复制模式 。
如何避免数据冲突?
1.两个主服务中最好存放不同的表 ,这样一个表只在一个库中能很好的避免冲突
2.修改自增ID的生成方式,因为有两台主服务,所以自增量可以设置为2,一个起始点设为1,
另一个设为2,这样生成的id就不会冲突,对应的设置参数如下:
主服务1:会生成1,3,5,7,9…
auto_increment_increment = 2
auto_increment_offset =1

主服务2:会生成2,4,6,8,10…
auto_increment_increment = 2
auto_increment_offset =2

主备复制模式架构图

下面是主备复制的灵魂示意图,该架构下,同一时间只有一个主库可提供服务,另一台主库作为热备使用。
如下图,当主1不可用时,会切换到主2作为主库提供服务,主1作为备库,同时所有从库重新和主2建立主从复制关系。
在这里插入图片描述

主备复制模式流程

说明:本篇复制是基于二进制日志的

  1. 两个主库都需开启binlog日志,记录所有修改操作到binlog日志文件中
  2. 两个库的IO进程相互读取对方的binlog日志并存到该从库的中继日志Relay log中
  3. mysql会开启一个sql线程,定时读取Relay log日志,如果发现有更新会立即把更新的内容在本机的数据库上面执行一遍

配置主备复制模式步骤

一、配置主备复制参数
二、在主库上创建用于复制的账号
三、对主库上的数据进行全备
四、对备库上的数据进行初始化,使主备数据一致
五、启动备库对主库的复制链路
六、启动主库对备库的复制链路

一、配置主备复制参数

配置主库服务

编辑/etc/my.cnf文件,修改和添加配置,然后重启服务
注意:如果是mysql5.7及以上版本,还需查看auto.cnf下server-uuid的是否一样,如果一样主从复制会出现问题,需删除掉server-uuid,然后重启服务重新生成server-uuid,auto.cnf存储的路径可能不同,我的路径在/var/lib/mysql/

  • 编辑/etc/my.cnf文件
vim /etc/my.cnf
  • 修改和添加配置
#每台服务的server_id都不能一样,建议server_id设置成ip的最后一段
server_id = 118

#master意外宕机时,可能会有部分binlog未能及时复制到slave上被应用,从而会导致slave新写入数据的自增值和原先master上冲突
#修改自增ID的生成方式,因为有两台主服务,所以自增量可以设置为2,一个起始点设为1,另一个设为2,这样生成的id就不会冲突
#会生成1,3,5,7,9..
auto_increment_increment 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值