如何禁止在故障轉移數據中心啟動 Heartbeat 資源?
我在每個數據中心都有一對 CentOS Linux 伺服器。它們在每個數據中心內都有故障轉移,由心跳和DRBD管理(我知道這些是過時的工具,但它們很穩定,所以沒有改變它們的願望)。
他們還具有數據中心間切換的能力,使東部數據中心處於活動狀態,而西部數據中心變為被動。但這是一個手動工程過程,沒關係。
西部數據中心目前是主動的,東部數據中心是被動的。
serverA.west <-> serverB.west <-----------> serverA.east <-> serverB.east ACTIVE DATA CENTER PASSIVE DATA CENTER
伺服器可以執行 mysqld 和 Java 應用程序。
此伺服器上的 Java 應用程序應僅在活動數據中心(即 serverA.west)中的 Primary 主機上執行。如果 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
“haresources-dark”用於 DR 數據中心(東部)的所有伺服器。我使用符號連結,因此 haresources 指向 haresources-dark。
兩個版本的 haresources 之間的唯一區別是提到了 Java 應用程序。在暗版中,Java 應用程序不會啟動。
如果/當我們切換到 DR 數據中心時,我們將不得不手動更新這些符號連結。但這是可以接受的。
這不是防錯的。我必須在 DR 數據中心的所有心跳管理伺服器上手動設置符號連結。沒有什麼可以強制要求一個數據中心是“暗的”而另一個是“活的”。目前這將是一個手動解決方案。
我認為,您不能僅使用(本機)心跳來做到這一點。你可以使用起搏器,他可以使用法定人數,但是… 你沒有法定人數。想像一下,數據中心之間的連結失敗了——東西方的每個人都會認為,他只是一個倖存者,他們每個人都啟動應用程序,將 mysql 切換到主模式等。你會得到真正的腦裂位置。
恕我直言,如果你真的需要 HA,你需要第三個數據中心,然後將 MySQL 遷移到帶有 Galera 集群的 MariaDB,並在它們上啟動你的 Java 應用程序,甚至可能處於主動-主動-主動模式。