我在每个数据中心都有一对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重新启动,导致心跳切换到serverB.east。心搏然后尽职尽责地在serverB.east上启动了Java应用程序,我们不希望这种情况发生。
心跳也在serverB.east上启动mysqld,这是正确的,因为MySQL复制应该继续进行,不断地从西部数据中心复制更改,这样东方DC就可以在需要时接管。
/etc/ha.d/haresources将mysqld和Java应用程序的/etc/init.d脚本命名为启动资源。
我们希望允许心跳来管理被动数据中心中的A/B对。它应该在故障转移时启动mysqld,而不是Java应用程序。但是如果东方数据中心是活动的数据中心,那么心跳应该在心跳自动故障转移期间启动Java应用程序。
实现这一点的好方法是什么?
我希望的是,当我们将活动数据中心从西向东切换时,需要采取一步来配置。理想情况下,它应该是防错误的,也就是说,应该保证确切的一个数据中心被配置为活动的数据中心。
发布于 2016-12-22 19:31:03
我想出的解决方案是保留/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黑暗。
haresources的两个版本之间唯一的区别是提到了Java应用程序。在黑暗版本中,Java应用程序没有启动。
如果/当我们切换到DR数据中心时,我们必须手动更新这些符号链接。但这是可以接受的。
这不是防错的。我必须在DR数据中心的所有心跳管理服务器上手动设置符号链接。没有什么可以强制一个数据中心是“黑暗”的,另一个是“实时的”。目前,这将是一个手动解决方案。
发布于 2016-12-09 14:47:10
我想,你不能只用(本土的)心跳来做。你可以用起搏器,他可以用曲棍球,但是.你没有法定人数。想象一下,数据中心之间的连接失败了--东方和西方的每个人都会认为,他只是一个幸存者,他们每个人都启动应用程序,把mysql转换成主模式等等。你就会得到真正的分裂--大脑位置。
IMHO,如果您真的需要HA,您需要第三个数据中心,然后用Galera集群将MySQL迁移到MariaDB,并在它们上启动您的Java应用程序,甚至可能处于active-模式。
https://serverfault.com/questions/819695
复制相似问题