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

高度可用的本质是能够从系统发生故障的部分立即恢复,任何HA框架中都有四个非常重要的组件。要求以自动协同工作的方式实现可恢复性。本文将详细介绍这些组件。

1.基础设施和数据的冗余

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

2.故障检测和纠错机制

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

3.故障转移机制

此组件负责将发生故障的服务转移到备用服务上,如果有多个冗余系统,则故障转移机制必须能够识别其中最合适的备用服务,并将其作为主要服务进行升级。

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

MySQL的HA框架

基于上述模型,看一下使用以下HA框架进行MySQL托管的案例:

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

异步复制模式

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

全同步复制模式

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

半同步复制(Semisynchronous Replication)

从定义中可以看出,异步模式不能保证数据的安全性,因为它不等主库提交的事务在slave上落盘,而全同步模式由于等待所有slave,以确认已提交事务被成功应用,直接导致事务处理上的延时。

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

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

Corosync

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

Pacemaker

开源高可用性集群堆栈,ClusterLabs堆栈适合小型和大型部署的群集服务。自1999年以来, Corosync, Pacemaker, DRBD, ScanCore,共同实现了生产集群中,机器和应用程序级故障的检测和恢复。

DNS映射或虚拟IP组件,用于提供应用程序和用户重定向机制。

 

总结一下HA框架中一些关键组件的功能:

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)

资源代理在成功完成故障转移后,将调用此组件,该组件使用新主服务器的IP地址,更新主MySQL服务器的DNS记录。客户端始终使用主DNS名称连接MySQL服务器,通过管理DNS名称到当前主服务器IP地址的映射,可以确保客户端不必更改其连接描述符或属性,就能完成一个故障转移。

关于MySQL半同步复制实现关键数据冗余,及实现高可用性的半同步复制细节和配置,将在后续文章中提到。

扩展阅读

高可用性的含义取决于应用程序和业务的要求。例如,如果服务中无法承受每年超过几分钟的停机时间,我们说该服务需要具有99.999%的高可用性。

什么是高可用性?

计算机系统的可用性是其服务在一段时间内,运行的时间百分比。通常表示为一系列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秒