如何抑制 Heartbeat 资源在故障转移数据中心启动?

如何抑制 Heartbeat 资源在故障转移数据中心启动?

我在每个数据中心都有一对 CentOS Linux 服务器。它们在每个数据中心内都有故障转移功能,由心跳DRBD(我知道这些都是过时的工具,但它们很稳定,所以不想改变它们)。

他们还具备数据中心间切换的能力,使东部数据中心处于活动状态,而西部数据中心处于被动状态。但这是一个手动工程过程,没关系。

西数据中心目前是主动数据中心,东数据中心是被动数据中心。

serverA.west <-> serverB.west  <-----------> serverA.east <-> serverB.east
     ACTIVE DATA CENTER                           PASSIVE DATA CENTER

服务器可以运行 mysqld 和 Java 应用程序。

此服务器上的 Java 应用程序应仅在主动数据中心(即 serverA.west)中的主主机上运行。如果 Java 应用程序的另一个实例在辅助主机(serverB.west)或被动数据中心中的任一主机上启动,则存在裂脑问题的风险。

今天 serverA.east 重新启动,导致 heartbeat 切换到 serverB.east。然后 heartbeat 尽职尽责地在 serverB.east 上启动了 Java 应用程序,这是我们不希望发生的。

Heartbeat 还在 serverB.east 上启动了 mysqld,这是正确的,因为 MySQL 复制应该继续进行,不断地从西数据中心复制更改,以便东数据中心在需要时可以接管。

/etc/ha.d/haresources 将 mysqld 和 Java 应用程序的 /etc/init.d 脚本命名为要启动的资源。

我们希望允许 heartbeat 管理被动数据中心中的 A/B 对。它应该在故障转移时启动 mysqld,而不是 Java 应用程序。但如果东数据中心是主动数据中心,则 heartbeat 应该在 heartbeat 自动故障转移期间启动 Java 应用程序。

实现这个目的有什么好方法?

我希望的是,当我们将活动数据中心从西向东切换时,只需一步即可配置。理想情况下,它应该是防错的,即应该保证只有一个数据中心配置为活动数据中心。

答案1

我认为,您不能仅使用(本机)心跳来实现这一点。您可以使用起搏器,它可以与仲裁一起工作,但是……您没有仲裁。想象一下,数据中心之间的链接发生故障 - 东西方的每个人都会认为他是唯一一个幸存者,他们每个人都启动应用程序,将 mysql 切换到主模式等。您将获得真正的裂脑位置。
恕我直言,如果您真的需要 HA,您需要第三个数据中心,然后使用 Galera 集群将 MySQL 迁移到 MariaDB,并在它们上启动您的 Java 应用程序,甚至可能处于主动-主动-主动模式。

答案2

我想到解决方案是保留两个版本的 /etc/ha.d/haresources。

root:/etc/ha.d$ ls -l
lrwxrwxrwx 1 root root   16 Dec 22 10:31 haresources -> haresources-dark
-rw-r--r-- 1 root root  151 Dec 22 10:22 haresources-dark
-rw-r--r-- 1 root root  161 Dec 22 10:30 haresources-live

DR 数据中心(东部)的所有服务器都使用“haresources-dark”。我使用符号链接,因此 haresources 指向 haresources-dark。

两个版本的 haresources 唯一的区别是提到了 Java 应用程序。在黑暗版本中,Java 应用程序没有启动。

如果/当我们切换到 DR 数据中心时,我们将必须手动更新这些符号链接。但这是可以接受的。

这并非万无一失。我必须手动在 DR 数据中心的所有心跳管理服务器上设置符号链接。而且没有任何措施可以强制一个数据中心是“暗的”,另一个是“活跃的”。目前,这将是一个手动解决方案。

相关内容