Orchestrator和VIP作为MySQL集群的HA解决方案

在CityMobile中,我们将MySQL数据库用作持久性数据的主要存储。我们有几个用于各种服务和目的的数据库集群。

向导的持续可用性是整个系统及其各个部分的运行状况的关键指标。在向导失败的情况下,自动集群恢复可以大大减少事件响应时间和系统停机时间。在本文中,我将研究基于MySQL Orchestrator和虚拟IP地址(VIP)MySQL HA群集



VIP HA解决方案


首先,我将简要介绍一下我们的数据存储系统是什么样的。

我们将经典复制方案与一个只写向导和许多只读副本一起使用。群集可以包含一个中间主服务器-一个既是副本又是其他主机的节点。客户端通过HAProxy访问副本,从而实现均匀的负载分配和轻松的可伸缩性。使用HAProxy是由于历史原因,现在我们正在迁移到ProxySQL。

复制是基于以下内容的半同步GTID。这意味着,至少一个副本必须先将事务写入日志,然后再将其视为成功。如果主节点发生故障,此复制模式可在性能和数据安全性之间实现最佳平衡。基本上,所有更改都使用进行从主服务器转移到副本服务器Row Based Replication (RBR),但某些节点可能具有mixed binlog format

协调器会定期更新群集拓扑的状态,分析收到的信息,如果出现问题,可以启动自动恢复过程。开发人员负责该过程本身,因为它可以通过多种方式实现:基于VIP,DNS,使用服务发现服务或自包含机制。

万一发生故障,还原向导的最简单方法之一就是使用浮动VIP地址。

在继续之前,您需要了解什么有关此解决方案的知识:

  • VIP是未绑定到特定物理网络接口的IP地址。当节点发生故障或在安排的工作期间,我们可以在停机时间最少的情况下将VIP切换到另一个资源。
  • 释放和发布虚拟IP地址是一种廉价且快速的操作。
  • 要使用VIP,需要通过SSH或使用特殊工具来访问服务器keepalived

我们将考虑主机可能存在的问题,并想象自动恢复机制应该如何工作。

到主服务器的网络连接已消失,或者在硬件级别出现了问题,并且服务器不可用


  1. , . , , .
  2. VIP — .
  3. . .
  4. VIP. VIP , gratuitous ARP. / IP- MAC-, VIP. split brain .
  5. 所有新连接都将立即重定向到新的主服务器。旧的连接失败,在应用程序级别重复调用数据库。

服务器在正常模式下运行;在DBMS级别发生故障


该算法与之前的情况相似:更新拓扑并开始恢复过程。由于服务器可用,因此我们可以在旧的主服务器上成功释放VIP,将其转移到新的主机上并发送多个ARP请求。旧向导的可能返回不应影响重建的群集和应用程序的操作。

其他问题


复制副本或中间原版的故障不会导致自动动作,而需要手动干预。

虚拟网络接口始终是临时添加的,即在重新引导后,不会自动分配VIP服务器。默认情况下,数据库的每个实例都是以只读模式启动的,协调器会自动将新的主数据库切换到记录数据库,并尝试read only在旧的主数据库上安装这些行动旨在降低可能性split brain

在恢复过程中,可能会出现问题,除标准监视工具外,还应通过协调器的UI通知问题。通过添加此功能,我们扩展了REST API(目前正在考虑PR)。

HA解决方案的一般方案如下所示。



选择一个新向导


乐团足够聪明,并根据以下条件尝试选择最合适的副本作为新的母带:

  • 复制副本与原版的延迟;
  • MySQL向导和副本版本;
  • 复制类型(RBR,SBR或混合);
  • 在一个或不同数据中心中的位置;
  • 可用性errant GTID-在副本服务器上执行但主服务器上不存在的事务;
  • 自定义选择规则也要考虑在内。

并非每个副本都是主角色的理想人选。例如,可以使用副本来备份数据,或者服务器的硬件配置较弱。协调器支持手动规则,通过这些规则,您可以调整首选项,以便从最喜欢到最不喜欢的位置选择候选人。

响应和恢复时间


在发生事件的情况下,最小化系统停机时间很重要,因此,我们考虑影响乐团构建和更新集群拓扑的MySQL参数:

  • slave_net_timeout-在副本被识别为丢失并执行重新连接之前,副本副本等待主服务器发出的新数据或心跳信号的秒数。值越小,副本将能够更快地确定与主服务器的连接已断开。我们将此值设置为5秒。
  • MASTER_CONNECT_RETRY-重新连接尝试之间的秒数。如果出现网络问题,则此参数的值较低将使您能够快速重新连接并阻止群集恢复过程的开始。推荐值为1秒。
  • MASTER_RETRY_COUNT -重新连接的最大尝试次数。
  • MASTER_HEARTBEAT_PERIOD-主设备发送心跳信号之后的时间间隔(以秒为单位)。默认值为该值的一半slave_net_timeout

Orchestrator选项:

  • DelayMasterPromotionIfSQLThreadNotUpToDate-如果相等true,则向导的角色将不会应用于候选副本,直到副本SQL流完成来自中继日志的所有未应用的事务为止。我们使用此选项是为了在所有候选副本都在后面时不丢失事务。
  • InstancePollSeconds -构建和更新拓扑的频率。
  • RecoveryPollSeconds-拓扑分析的频率。如果检测到问题,则将开始拓扑恢复。这是等于1秒常数

每个群集节点每秒由协调器轮询一次InstancePollSeconds如果检测到问题,则将强制更新集群状态,然后做出执行恢复的最终决定。通过试验数据库和乐团的各种参数,我们能够将响应和恢复的持续时间减少到30秒。

试验台


我们开始通过开发本地测试平台并在测试和战斗环境中进一步实施HA方案来测试HA方案基于Docker的本地服务器是完全自动化的,可让您试验乐团和网络的配置,将群集从2-3台服务器扩展到数十台,并在安全的环境中进行练习。

在练习中,我们选择一种模拟问题的方法:使用立即启动向导kill -9,轻轻地完成该过程并停止服务器(docker-compose stop),使用iptables -j REJECT模拟网络问题iptables -j DROP我们期望这些结果:

  • 乐团将在不超过10秒的时间内检测到母带的问题并更新拓扑;
  • 恢复过程将自动开始:网络配置将更改,向导的角色将转到副本,拓扑将被重建;
  • 新的母版将可用于记录,在复制过程中不会丢失实时副本;
  • 数据将开始被写入新的母版并进行复制;
  • 总恢复时间将不超过30秒。

如您所知,由于硬件和网络的不同配置,合成负载和实际负载的差异等原因,系统在测试和生产环境中的行为可能有所不同。因此,我们会定期在实际条件下进行练习,以检查系统在失去网络连接或单个部件降级的情况下的行为。将来,我们希望为两种环境构建完全相同的基础架构并使其测试自动化。

发现


存储系统主节点的可操作性是SRE团队和运营的主要任务之一。基于VIP的乐团和HA解决方案的引入允许实现以下结果:

  • 可靠地检测数据库集群拓扑问题;
  • 对向导相关事件的自动快速响应,从而减少了系统停机时间。

但是,该解决方案有其局限性和缺点:

  • 将HA方案扩展到多个数据中心将需要它们之间的单个L2网络;
  • 在您将VIP分配给新主人之前,我们需要将其释放给旧主人。该过程是顺序的,这增加了恢复时间。
  • VIP SSH- , . , , , VIP . IP- split brain.

为避免这种情况split brain,您可以使用STONITH方法(“将其他节点射入头部”),从而完全隔离或断开问题节点的连接。还有其他方法可以实现群集的高可用性:VIP和DNS,服务发现和代理服务,同步复制以及其他具有缺点和优点的方法的组合。

我谈到了创建MySQL故障转移群集的方法。它易于实现,并在当前环境中提供了可接受的可靠性水平。随着整个系统的整体发展,尤其是基础架构的发展,这种方法无疑将得到发展。

All Articles