前言
1.MySQL主从复制架构图
2.什么是数据半同步
3.主从复制架构中的数据延迟问题,应该如何解决?
4.数据库高可用:基于主从复制实现故障转移【数据库高可用架构管理的工具MHA】
1.MySQL主从复制架构图
2.什么是数据半同步
2.1:为什么提出数据半同步概念?
主库将日志写入binlog文件,接着自己就提交事务返回了,也不会管从库是否接收到日志,万一此时主库的binlog还没有同步到从库,结果主库宕机了,此时数据就丢失了,即使做了高可用切换,即可把从库切换为master主库,但是里面并没有刚刚写入的数据。
半同步的意思就是说:主库写入数据,日志进入binlog之后,至少确保binlog日志复制到从库了,再告知客户端本次事务写入成功,这样起码主库突然崩了,之前写入成功的数据的binlog日志都是抵达了从库,从库切换为主库,数据也是不会发生丢失的,这就是半同步
2.2:解决方案:一般搭建主从复制,都是采取半同步的复制方式
2.2.1:AFTER_COMMIT方案【非默认】
主库写入日志到binlog,等待binlog复制到从库了,主库就提交自己的本地事务,接着等待从库返回给自己一个成功的响应,然后主库返回提交事务成功的响应给客户端;
2.2.2:MySQL5.7默认的方式
主库将日志写入binlog,并且复制给从库,然后开始等待从库的响应,从库返回说成功给主库了,主库再提交事务,接着返回提交事务成功的响应给客户端;
这样就可以保证已经提交事务的数据绝对不会发生丢失!!!
3.主从复制架构中的数据延迟问题,应该如何解决?
问题场景:
主库写入了100条数据,结果从库复制过去了50条数据,那么从库就会落后主库50条数据,那么在读写分离情况下,写都在主库写,读都在从库读,如果延迟,会发生读不到最新的数据问题。
问题解决:
让从库也用多线程并发复制数据,这样从库复制数据的速度快了,延迟就会低了,MySQL5.7就已经支持并行复制了,可以在从库中设置参数。
4.数据库高可用:基于主从复制实现故障转移【数据库高可用架构管理的工具MHA】
一般生产环境中用于进行数据库高可用架构管理的工具是MHA,用per脚本写的工具,这个工具就是专门用于监控主库的状态,如果一旦不对劲,可以立即将从库切换为主库。
MHA也是需要单独部署的,分为两种节点,一个是manager节点,一个node节点,manager节点一般是单独部署一台机器的,node节点一般也是部署在每台MySQL机器上的,因为Node节点得通过解析各个MySQL日志来进行一些操作。
Manager节点会通过探测集群中的Node节点区判断各个Node所在机器上的MySQL是否运行正常,如果发现某个Master故障了,就直接将他的一个slave提升为master,然后让其他salve都挂到新的master上去,完全透明