一、背景
MySQL 主从模式优点
- 容灾:主数据库宕机后,启动从数据库,用于故障切换
- 备份:防止数据丢失
- 读写分离:主数据库可以只负责写操作,而从数据库只用于读取。提高查询效率
在企业中,数据库高可用一直是业务关注的重点,很多都是使用mysql主从方案,但是单主存在单点故障,从库切换成主库需要作改动。因此,通过双主或多主架构,解决一主多从架构的单点故障,减少主从切换的故障处理时间,增加MySQL群集的高可用性。
主从同步原理可以参考我的上篇博客。这里主要介绍MySQL双主架构。
二、MySQL双主(主主)架构方案
1、主备模式,两台MySQL互为主从,其中一台作为主节点对外提供服务,另外一台作为备用节点(standby),当提供服务的主节点发生故障后,将服务请求快速切换到备用节点,原主节点故障恢复后转换为备用节点(standby)。
2、主主模式,两台MySQL互为主从,且两台MySQL均作为主节点对外提供服务,当其中一台MySQL发生故障后,将指向该故障节点的请求快速切换到另外一台MySQL,原来指向非故障节点的请求不受影响。
为保证应用程序使用相同数据库连接配置而不受故障切换影响,常用方案有:
1、VIP,通过vrrpd或keepalived将VIP动态绑定到新主节点
2、域名,通过切换域名将域名指向新主节点
3、代理,通过更新代理中存放的路由信息来指向新主节点。
三、MySQL双主架构图
VIP代表域名
说明:当从库IO线程接受到主库传递来的二进制日志(Binlog)并将之保存为从库的中继日志(relay log),然后从库SQL线程将中继日志(relay log)的事件重做到从库上,实现主从数据同步。
如果SQL线程发现该事件的server_id与当前从库的server_id相同,则会丢弃该事件,因此如果两台MySQL如何互为主从,不会导致相同的事件被重复执行。
四、MySQL双主架构的优缺点
优点:
- 主主模式能将读写请求分摊到两个主节点,降低数据库服务器的写的压力。
- 可以实现数据库服务器的热备,保证高可用。
- 当故障节点恢复后,故障节点能通过复制进行数据恢复(应用其他节点数据)和数据同步(将未同步数据发生给其他节点)。
缺点:
- 主备模式下可能会出现脑裂情况(即同时有两个数据库提供写的服务)
- 主主模式下,很容易因数据访问控制不当导致数据冲突。
- 为提高系统高可用性,双主架构会被扩展成双主多从结构,同样存在主节点发生故障后多个从库选主和恢复复制的问题。