Apache ActiveMQ Artemis 提供了兩種架構來提供高可用性(HA)功能。主要和備份 Broker 可以透過網路複製或使用共享儲存進行配置。本文將分享在用戶端應用程式連接到 Broker 時,在各種情況下 Broker 的重新啟動順序。
1. 一次重新啟動 1 個 Broker
當以固定間隔一次重新啟動一個 Broker 時,不需要遵循任何順序。我們只需要確保主要/備份配對中至少有一個 Broker 處於活動狀態,以接收來自用戶端應用程式的連線即可。
當用戶端應用程式連接時重新啟動 Broker,請確保至少有一個 Broker 始終處於活動狀態,以服務已連線的用戶端。 |
2. 完全關閉 Brokers 並重新啟動
如果需要完全關閉 Broker 並重新啟動,請按照以下步驟操作
-
關閉所有備份 Broker。
-
關閉所有主要 Broker。
-
啟動所有主要 Broker。
-
啟動所有備份 Broker。
這個順序在網路複製的情況下特別重要,原因如下:如果先關閉主要 Broker,備份 Broker 將會啟動並接受所有用戶端連線。然後,當備份 Broker 停止時,用戶端將嘗試重新連線到最近活動的 Broker,即備份 Broker。現在,當我們啟動備份和主要 Broker 時,用戶端將繼續嘗試連線到最後的連線(即備份 Broker),並且除非我們重新啟動用戶端應用程式,否則將永遠無法連線。為了避免重新啟動用戶端應用程式的麻煩,我們必須按照上面建議的順序操作。
3. 分裂大腦 (Split-brain) 情況
以下程序可幫助叢集從分裂大腦的情況中恢復,並使用戶端連線自動重新連線到叢集。透過這個順序,用戶端應用程式不需要重新啟動即可與 Broker 建立連線。
在分裂大腦情況下,主要和備份 Broker 都處於活動狀態,並且沒有從主要 Broker 到備份 Broker 的複製。
在這種情況下,可能會有一些用戶端應用程式連線到主要 Broker,而其他用戶端應用程式連線到備份 Broker。現在,在我們重新啟動 Broker 並且叢集已正確形成後。
在這裡,在分裂大腦情況下連線到主要 Broker 的用戶端會自動連線到叢集並開始處理訊息。但是連線到備份 Broker 的用戶端仍在嘗試與 Broker 建立連線。發生這種情況是因為備份 Broker 已在「備份」模式下重新啟動。
因此,並非所有用戶端都連線到 Broker 並正常運作。
為了避免這種不幸,請按照以下順序操作
-
停止備份 Broker
-
啟動備份 Broker。在日誌中觀察訊息「等待主要 Broker」
-
停止主要 Broker。
-
啟動主要 Broker。在主要 Broker 日誌中觀察「伺服器已啟用」。在備份 Broker 日誌中觀察「已宣告備份」
-
再次停止主要 Broker。等到備份 Broker 上線。觀察所有用戶端都連線到備份 Broker。
-
啟動主要 Broker。這次,所有連線都將再次切換到主要 Broker。
在分裂大腦情況下,訊息會在備份 Broker 上產生,因為它處於活動狀態。在解決分裂大腦情況時,如果有一些增量訊息沒有在備份 Broker 上產生。這些訊息無法自動恢復。需要人工干預來檢索訊息,有時幾乎不可能恢復訊息。上述順序有助於形成因分裂大腦而損壞的叢集,並使所有用戶端應用程式自動連線到叢集,而無需重新啟動用戶端應用程式。 |