MySQL学习记录 - 高可用架构
一、数据库复制
1、异步复制(Asynchronous replication)
MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,
这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。
2、全同步复制(Fully synchronous replication)
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
3、半同步复制(Semisynchronous replication)
介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。
相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
4、异步与半同步异同
默认情况下MySQL的复制是异步的,Master上所有的更新操作写入Binlog之后并不确保所有的更新都被复制到Slave之上。
异步操作虽然效率高,但是在Master/Slave出现问题的时候,存在很高数据不同步的风险,甚至可能丢失数据。
MySQL5.5引入半同步复制功能的目的是为了保证在master出问题的时候,至少有一台Slave的数据是完整的。
在超时的情况下也可以临时转入异步复制,保障业务的正常使用,直到一台salve追赶上之后,继续切换到半同步模式。
二、主从复制/主主复制
主从复制:读写分离、实时备份、故障切换
主主复制:互为主备
三、高可用架构
1、双节点
2、一主两从
3、一主多从
4、多主多从
四、数据库管理软件
1、MMM
在MMM(Master-Master replication manager for MySQL)集群中总共提供1个写服务和N(N>=1)个读服务。
每个节点均部署有一个mmm-agent,mmm-mananger和mmm-agent保持通信,agent定期向mananger报告所在节点的MySQL存活情况(实际上就是一个心跳包)。
当mmm-manager连续多次无法收到mmm-agent的心跳消息时,将会判定该节点死亡,并进行故障转移。
2、MHA(Master High Availability)
MHA(MySQL Master High Availability)是一个专门针对MySQL主库的高可用。
主库发生故障时,MHA会选定一个候选主节点作为新的主节点,并补齐缺少的Binlog。数据补齐后,将写服务转移到新的主节点上。
MHA工作原理
相较于其它HA软件,MHA的目的在于维持MySQL Replication中Master库的高可用性,
其最大特点是可以修复多个Slave之间的差异日志,最终使所有Slave保持数据一致,然后从中选择一个充当新的Master,并将其它Slave指向它。
- 从宕机崩溃的master保存二进制日志事件(binlogevents)。
- 识别含有最新更新的slave。
- 应用差异的中继日志(relay log)到其它slave。
- 应用从master保存的二进制日志事件(binlogevents)。
- 提升一个slave为新master。 -使其它的slave连接新的master进行复制。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,
一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器。
MHA,具体的搭建环境如下:
其中master对外提供写服务,备选master(实际的slave,主机名m3)提供读服务,slave也提供相关的读服务,
一旦master宕机,将会把备选master提升为新的master,slave指向新的master,manager作为管理服务器。
参考资料