Bil*_*win 5 linux failover centos high-availability heartbeat
我在每个数据中心都有一对 CentOS Linux 服务器。他们在每个数据中心内都有故障转移,由心跳和DRBD管理(我知道这些是过时的工具,但它们很稳定,所以没有改变它们的愿望)。
它们还具有数据中心间切换的能力,使东部数据中心处于活动状态,而西部数据中心变为被动状态。但这是一个手动工程过程,没关系。
西数据中心目前是主动的,东数据中心是被动的。
serverA.west <-> serverB.west <-----------> serverA.east <-> serverB.east
ACTIVE DATA CENTER PASSIVE DATA CENTER
Run Code Online (Sandbox Code Playgroud)
服务器可以运行 mysqld 和 Java 应用程序。
此服务器上的 Java 应用程序应仅在活动数据中心(即 serverA.west)中的主要主机上运行。如果 Java 应用程序的另一个实例在辅助主机 (serverB.west) 或被动数据中心的任一主机上启动,则存在裂脑问题的风险。
今天 serverA.east 重启,导致心跳切换到 serverB.east。Heartbeat 然后尽职尽责地在 serverB.east 上启动了 Java 应用程序,这是我们不希望发生的。
Heartbeat 还在 serverB.east 上启动了 mysqld,这是正确的,因为 MySQL 复制应该继续进行,不断从西部数据中心复制更改,以便东部 DC 准备好在需要时接管。
/etc/ha.d/haresources 将 mysqld 和 Java 应用程序的 /etc/init.d 脚本命名为要启动的资源。
我们希望允许 heartbeat 管理被动数据中心中的 A/B 对。它应该在故障转移时启动 mysqld,而不是 Java 应用程序。但是如果东数据中心是活动的,那么在心跳自动故障转移期间心跳应该启动 Java 应用程序。
什么是实现这一点的好方法?
我希望的是,当我们将活动数据中心从西向东切换时,只需一步配置即可。理想情况下,它应该是防错的,即应该保证恰好有一个数据中心被配置为活动的。
我想出的解决方案是保留两个版本的/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
Run Code Online (Sandbox Code Playgroud)
“haresources-dark”用于 DR 数据中心(东部)的所有服务器。我使用符号链接,因此 haresources 指向 haresources-dark。
两个版本的 haresources 之间的唯一区别是 Java 应用程序的提及。在黑暗版本中,Java 应用程序不会启动。
如果/当我们切换到灾难恢复数据中心时,我们将必须手动更新这些符号链接。但这是可以接受的。
这并不是防错的。我必须在 DR 数据中心的所有心跳托管服务器上手动设置符号链接。并且没有任何东西可以强制一个数据中心为“暗”而另一个数据中心为“活”。目前这将是一个手动解决方案。