Kubernetes

RabbitMQ quorum queues - 讓節點自動重新加入

  • March 16, 2022

我正在探索RabbitMQ quorum 隊列,以改進 Kubernetes 集群中某些服務的 HA。在我閱讀時,它們的設計考慮到了數據安全。

但是,“管理副本”一章指出:

仲裁隊列的副本由操作員顯式管理。當一個新節點被添加到集群中時,它不會託管任何仲裁隊列副本,除非操作員明確地將其添加到仲裁隊列或一組仲裁隊列的成員(副本)列表中。

因此,如果發生中斷(尤其是非自願的),可能會出現以下情況(對於 3 節點集群):

  1. 中斷後,一個節點會宕機:其他兩個節點仍然佔多數,並將“保持隊列活動”,可能會選舉一個新的領導者;
  2. kubernetes 會提供一個新的節點(pod)來替換失效的節點;新節點會自動重新加入 RabbitMQ 集群,但是
  3. 除非操作員手動干預,否則新節點不會對現有的仲裁隊列做出貢獻;
  4. 對於 3 節點集群,這意味著不再有 HA:如果將來某個時候,其他節點之一發生故障,則隊列實際上會失去;

有什麼辦法可以緩解這種情況嗎?例如,是否可以讓節點自動重新加入所有現有的仲裁隊列集群?也許通過維護一個“啟動命令”列表(在 RabbitMQ 啟動後執行)我們可以添加重新加入命令

RabbitMQ 團隊強烈推薦使用官方的 Kubernetes 運算元 - https://www.rabbitmq.com/kubernetes/operator/operator-overview.html

除此之外,這裡是當地的 k8s 專家不得不說的:

Kubernetes 不會隨機刪除一個持久化卷——如果節點由於某種原因宕機,它將以相同的名稱和相同的數據開始

只要使用相同的名稱和數據,“新”節點就會像舊節點一樣加入。

可能存在需要人工干預的場景,但它們並不像您想像的那麼頻繁。


注意: RabbitMQ 團隊會監控rabbitmq-users 郵件列表,有時只會在 StackOverflow 上回答問題。

引用自:https://serverfault.com/questions/1096045