如何为Moodle MySQL数据库设置自动故障转移

如何为Moodle MySQL数据库设置自动故障转移

在先前的博客中,我们讨论了如何将独立的Moodle设置迁移到基于集群数据库的可扩展设置。您将需要考虑的下一步是故障转移机制-如果数据库服务出现故障以及何时发生故障,您将如何处理。

如果将MySQL复制作为后端Moodle数据库,则发生故障的数据库服务器并不罕见,而且如果发生这种情况,您将需要找到一种方法来恢复拓扑,例如将备用服务器升​​级为新的主服务器。对您的Moodle MySQL数据库进行自动故障转移有助于应用程序正常运行。我们将说明故障转移机制如何工作,以及如何在您的设置中建立自动故障转移。

MySQL数据库的高可用性架构

可以通过几种不同的方式对MySQL数据库进行集群来实现高可用性架构。您可以使用MySQL复制,设置紧跟主数据库的多个副本。最重要的是,您可以放置​​一个数据库负载平衡器来拆分读写流量,并在读写节点和只读节点之间分配流量。使用MySQL复制的数据库高可用性架构可以描述如下:

MySQL高可用性架构

它由一个主数据库,两个数据库副本和数据库负载平衡器组成(在本博客中,我们使用ProxySQL作为数据库负载平衡器),并保持为服务状态以监视ProxySQL进程。我们使用虚拟IP地址作为来自应用程序的单个连接。流量将根据keepalived中的角色标志分配给活动负载平衡器。

ProxySQL能够分析流量并了解请求是读取还是写入。然后它将请求转发到适当的主机。

MySQL复制的故障转移

MySQL复制使用二进制日志记录将数据从主数据库复制到副本数据库。副本连接到主节点,并且所有更改都被复制并通过IO_THREAD写入副本节点的中继日志。将更改存储在中继日志中之后,SQL_THREAD进程将继续将数据应用于副本数据库。

副本中参数read_only的默认设置为ON。它用于保护副本本身免受任何直接写操作,因此更改将始终来自主数据库。这很重要,因为我们不希望副本与主服务器分开。当无法访问主数据库时,会发生MySQL复制中的故障转移场景。可能有很多原因。例如,服务器崩溃或网络问题。

您需要将其中一个副本提升为主副本,在提升后的副本上禁用只读参数,以便可以写入。您还需要更改其他副本以连接到新的主副本。在GTID模式下,您无需记下二进制日志名称和从中恢复复制的位置。但是,在传统的基于Binlog的复制中,您肯定需要知道最后一个二进制日志的名称和进行复制的位置。基于binlog的复制中的故障转移是一个非常复杂的过程,但是即使基于GTID的复制中的故障转移也不是一件容易的事,因为您需要注意诸如错误事务之类的事情。检测故障是一回事,如果没有自动化,可能无法在短时间内对故障做出反应。

ClusterControl如何启用自动故障转移

ClusterControl能够为您的Moodle MySQL数据库执行自动故障转移。有一个“群集和节点自动恢复”功能,它将在数据库主数据库崩溃时触发故障转移过程。

我们将模拟在ClusterControl中如何进行自动故障转移。我们将使主数据库崩溃,并仅在ClusterControl仪表板上看到。以下是群集的当前拓扑:

如何为Moodle MySQL数据库设置自动故障转移

数据库主数据库使用IP地址10.10.10.11,副本数据库为:10.10.10.12和10.10.10.13。当主节点发生崩溃时,ClusterControl会触发警报并开始故障转移,如下图所示:

如何为Moodle MySQL数据库设置自动故障转移

其中一个副本将被提升为主要副本,从而产生如下图所示的拓扑:

如何为Moodle MySQL数据库设置自动故障转移

IP地址10.10.10.12现在作为主要的写流量,并且我们只剩下一个IP地址为10.10.10.13的副本。在ProxySQL端,代理将自动检测新的主数据库。主机组(HG10)仍然提供具有成员10.10.10.12的写流量,如下所示:

如何为Moodle MySQL数据库设置自动故障转移

主机组(HG20)仍然可以提供读取流量,但是如您所见,由于崩溃,节点10.10.10.11处于脱机状态:

如何为Moodle MySQL数据库设置自动故障转移

一旦发生故障的主服务器重新联机,它将不会自动重新引入数据库拓扑中。这是为了避免丢失故障排除信息,因为将节点重新引入为副本可能需要覆盖某些日志或其他信息。但是可以配置故障节点的自动重新加入。

分享到 :
相关推荐

发表评论

登录... 后才能评论