Apache ActiveMQ Artemis 提供了兩種架構來提供高可用性(HA)功能。主要和備份 Broker 可以透過網路複製或使用共享儲存進行配置。本文將分享在用戶端應用程式連接到 Broker 時,在各種情況下 Broker 的重新啟動順序。

1. 一次重新啟動 1 個 Broker

當以固定間隔一次重新啟動一個 Broker 時,不需要遵循任何順序。我們只需要確保主要/備份配對中至少有一個 Broker 處於活動狀態,以接收來自用戶端應用程式的連線即可。

當用戶端應用程式連接時重新啟動 Broker,請確保至少有一個 Broker 始終處於活動狀態,以服務已連線的用戶端。

2. 完全關閉 Brokers 並重新啟動

如果需要完全關閉 Broker 並重新啟動,請按照以下步驟操作

  1. 關閉所有備份 Broker。

  2. 關閉所有主要 Broker。

  3. 啟動所有主要 Broker。

  4. 啟動所有備份 Broker。

這個順序在網路複製的情況下特別重要,原因如下:如果先關閉主要 Broker,備份 Broker 將會啟動並接受所有用戶端連線。然後,當備份 Broker 停止時,用戶端將嘗試重新連線到最近活動的 Broker,即備份 Broker。現在,當我們啟動備份和主要 Broker 時,用戶端將繼續嘗試連線到最後的連線(即備份 Broker),並且除非我們重新啟動用戶端應用程式,否則將永遠無法連線。為了避免重新啟動用戶端應用程式的麻煩,我們必須按照上面建議的順序操作。

3. 分裂大腦 (Split-brain) 情況

以下程序可幫助叢集從分裂大腦的情況中恢復,並使用戶端連線自動重新連線到叢集。透過這個順序,用戶端應用程式不需要重新啟動即可與 Broker 建立連線。

在分裂大腦情況下,主要和備份 Broker 都處於活動狀態,並且沒有從主要 Broker 到備份 Broker 的複製。

在這種情況下,可能會有一些用戶端應用程式連線到主要 Broker,而其他用戶端應用程式連線到備份 Broker。現在,在我們重新啟動 Broker 並且叢集已正確形成後。

在這裡,在分裂大腦情況下連線到主要 Broker 的用戶端會自動連線到叢集並開始處理訊息。但是連線到備份 Broker 的用戶端仍在嘗試與 Broker 建立連線。發生這種情況是因為備份 Broker 已在「備份」模式下重新啟動。

因此,並非所有用戶端都連線到 Broker 並正常運作。

為了避免這種不幸,請按照以下順序操作

  1. 停止備份 Broker

  2. 啟動備份 Broker。在日誌中觀察訊息「等待主要 Broker」

  3. 停止主要 Broker。

  4. 啟動主要 Broker。在主要 Broker 日誌中觀察「伺服器已啟用」。在備份 Broker 日誌中觀察「已宣告備份」

  5. 再次停止主要 Broker。等到備份 Broker 上線。觀察所有用戶端都連線到備份 Broker。

  6. 啟動主要 Broker。這次,所有連線都將再次切換到主要 Broker。

在分裂大腦情況下,訊息會在備份 Broker 上產生,因為它處於活動狀態。在解決分裂大腦情況時,如果有一些增量訊息沒有在備份 Broker 上產生。這些訊息無法自動恢復。需要人工干預來檢索訊息,有時幾乎不可能恢復訊息。上述順序有助於形成因分裂大腦而損壞的叢集,並使所有用戶端應用程式自動連線到叢集,而無需重新啟動用戶端應用程式。