如何抑制从故障转移数据中心启动的心跳资源?

每个数据中心都有一对CentOS Linux服务器。 他们在每个数据中心都有故障切换,由心跳DRBDpipe理(我知道这些都是过时的工具,但是它们是稳定的,所以不需要改变它们)。

它们也具有数据中心交换的能力,使东部数据中心处于活动状态,而西部变为被动状态。 但这是一个手动工程过程,没关系。

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

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

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

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

今天serverA.east重新启动,导致心跳翻转到serverB.east。 心跳然后忠实地启动了serverB.east上的Java应用程序,我们不希望发生这种情况。

Heartbeat也在serverB.east上启动了mysqld,这是正确的,因为MySQL复制应该继续下去,连续复制来自西部数据中心的变化,以便东部DC在需要时可以接pipe。

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

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

什么是实施这个好方法?

我所希望的是,当我们将活动数据中心从西方切换到东方时,需要采取一个步骤进行configuration。 理想情况下,它应该是防错的,也就是说,应该确保只有一个数据中心被configuration为活动数据中心。

我想,你只能用(本地)心跳来做。 您可以使用起搏器,他可以与法定人数一起工作,但是…您没有法定人数。 想象一下,数据中心之间的联系失败 – 东西方每个人都会想,他只是一个幸存者,每个人都开始申请,将mysql切换到主模式等等。
恕我直言,如果您真的需要高可用性,您需要第三个数据中心,然后使用Galera集群将MySQL迁移到MariaDB,并启动您的Java应用程序,甚至可以处于主动 – 主动 – 主动模式。

我提出的解决scheme是保留/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数据中心的所有心跳pipe理服务器上手动设置符号链接。 而且没有什么可以强制实施,一个数据中心是“黑暗”的,另一个是“活着的”。 现在这将是一个手动解决scheme。