Mysql高可用性框架(HA)实现原理

高度可用本质是能从系统发生故障的部分立即恢复,任何HA框架中都有四个重要组件,并以协同工作的方式实现可恢复性。

1.基础设施和数据冗余

为了使服务具有高可用性,需确保基础架构冗余,服务有最新数据的冗余副本,以便主服务故障时接管。

2.故障检测和纠错机制

实时检测可能影响可用性的主系统,重视任何一个部分发生的故障,要求框架能在发生故障的系统上采取纠正措施,或将故障移到备用系统。

3.故障转移机制

负责将发生故障的服务转移到备用服务,若存在多个冗余系统,故障转移机制须能识别最合适的备用服务,将其升级为主服务。

4.应用程序/用户重定向机制

DNS映射或虚拟IP组件,提供重定向机制。

MySQL HA框架

将3个节点设置成主从模式,使用MySQL半同步复制,作为基础架构并提供数据冗余机制。

异步复制模式

主库将已提交的事务写入binlog后,即返回成功给应用程序,该模式不保证已提交的事务会被传递到各个slave,并被成功应用。

全同步复制模式

当主库提交一个事务,会等待事务被传递到所有slave上,且所有slave应用该事务,主库得到反馈后,返回事务成功通知。

半同步复制(Semisynchronous Replication)

异步模式不等主库提交的事务在slave上落盘,不能保证数据的安全性。全同步模式等待所有slave,确认已提交事务被成功应用,导致事务处理的延时。

Semisynchronous则采用较折中方案,确保已提交的事务至少在两台机器上落盘,然后,会给客户端返回事务成功的反馈。

Corosync和Pacemaker提供故障检测,纠正和故障转移机制。

Corosync

Corosync集群引擎是一个组通信系统,在应用程序中实现高可用性。

Pacemaker

开源高可用性集群堆栈,ClusterLabs堆栈适合小型和大型部署的群集服务。可使用Corosync、Pacemaker、DRBD、ScanCore共同实现集群。DNS映射或虚拟IP组件,用于提供应用程序和用户重定向。

总结

Corosync

Corosync为节点提供通信,保证之间消息传递的可靠。形成节点的集群环,通过集群成员资格跟踪,决定加入和离开集群的节点。Corosync与Pacemaker密切合作,对节点的可用性进行沟通,以便Pacemaker做出恰当的决策。

Pacemaker

集群资源管理器(CRM), Pacemaker通过Corosync接口检测和处理节点级故障,确保MySQL在集群上的高可用性。通过与资源代理(RA)合作,检测和处理MySQL的故障。Pacemaker通过启动、停止、监视、提升和降级操作,配置和管理MySQL资源。

Resource Agent

资源代理充当MySQL和Pacemaker之间的接口。实现启动、停止、升级、降级和监视Pacemaker调用操作。Percona实现了Percona Replication Manager(PRM)全功能资源代理。

PRM:

https://github.com/Percona-Lab/pacemaker-replication-agents/blob/master/agents/mysql_prm_gtid
https://github.com/Scalegrid/percona-pacemaker-agents/blob/master/agents/mysql_prm_semisync

DNS映射组件(DNS Mapping Component)

客户端始终使用主DNS名称连接MySQL服务器,通过管理DNS名称到当前主服务器IP地址的映射,可确保客户端不必更改其连接描述符或属性,就能完成一个故障转移。

高可用性

服务在一段时间内,运行的时间百分比。通常表示为一系列9,如下显示一年内的停机时间和可用性关系。

可用性 %     停机时间

90%(“ 一个9 ”)    36.53天

99%(“ 两个9 ”)    3.65天

99.9%(“ 三个9 ”)    8.77小时

99.99%(“ 四个9 ”)    52.60分钟

99.999%(“ 五个9 ”)    5.26分钟

99.9999%(“ 六个9 ”)    31.56秒

如果服务无法承受每年超过几分钟的停机时间,说明该服务需要具有99.999%的高可用性。