MySQL学习记录

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作为管理服务器。

参考资料

mysql高可用方案

五大常见的MySQL高可用方案

MySQL高可用方案:理论篇

MySQL高可用方案:实践篇

MySQL-MHA高可用方案

MySQL高可用方案MHA的部署和原理

MySQL主从复制与主主复制

原文地址:https://www.cnblogs.com/wangwangfei/p/14385647.html