溫馨提示×

Ubuntu RabbitMQ集群搭建方法

小樊
43
2025-10-06 09:40:11
欄目: 智能運維

Ubuntu環境下RabbitMQ集群搭建步驟

1. 環境準備

  • 基礎要求:所有節點需安裝相同版本的Ubuntu(如22.04 LTS)、相同版本的Erlang(與RabbitMQ兼容,如25.x)及RabbitMQ(建議3.12及以上)。
  • 主機名與網絡:為每個節點設置唯一主機名(如rabbit1、rabbit2、rabbit3),并通過/etc/hosts文件實現主機名解析(所有節點需保持一致)。例如:
    192.168.1.101 rabbit1
    192.168.1.102 rabbit2
    192.168.1.103 rabbit3
    
    驗證解析有效性:ping rabbit2(應能正常訪問)。
  • 時間同步:使用ntpchrony同步所有節點時間(避免腦裂問題)。例如安裝ntp
    sudo apt update && sudo apt install -y ntp
    sudo systemctl enable --now ntp
    

2. 安裝Erlang與RabbitMQ

  • 安裝Erlang:RabbitMQ依賴Erlang環境,通過Ubuntu官方源安裝:
    sudo apt update
    sudo apt install -y erlang
    
  • 安裝RabbitMQ:添加RabbitMQ官方APT源(確保獲取最新版本),然后安裝:
    # 添加RabbitMQ官方源密鑰
    curl -s https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
    # 添加源列表
    echo "deb [signed-by=/usr/share/keyrings/com.rabbitmq.team.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
    sudo apt update
    # 安裝RabbitMQ(含管理插件)
    sudo apt install -y rabbitmq-server
    

3. 配置Erlang Cookie(集群通信關鍵)

Erlang Cookie是節點間認證的憑證,所有節點的Cookie文件內容必須完全一致(默認路徑:/var/lib/rabbitmq/.erlang.cookie)。

  • 步驟
    1. 在主節點(如rabbit1)上復制Cookie文件到其他節點:
      scp /var/lib/rabbitmq/.erlang.cookie rabbit2:/var/lib/rabbitmq/
      scp /var/lib/rabbitmq/.erlang.cookie rabbit3:/var/lib/rabbitmq/
      
    2. 設置Cookie文件權限(僅所有者可讀寫):
      sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
      sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
      
    3. 重啟所有節點的RabbitMQ服務使Cookie生效:
      sudo systemctl restart rabbitmq-server
      

4. 啟動RabbitMQ服務并啟用管理插件

  • 啟動服務:在所有節點上啟動RabbitMQ并設置開機自啟:
    sudo systemctl start rabbitmq-server
    sudo systemctl enable rabbitmq-server
    
  • 驗證服務狀態:確保服務運行正常(顯示active (running)):
    sudo systemctl status rabbitmq-server
    
  • 啟用管理插件:為方便遠程管理,啟用Web管理界面插件:
    sudo rabbitmq-plugins enable rabbitmq_management
    
    管理界面默認訪問地址:http://{節點IP}:15672(初始賬號guest/guest,僅限本地訪問)。

5. 將節點加入集群

  • 步驟(以rabbit2、rabbit3加入rabbit1集群為例):
    1. 停止目標節點應用:在rabbit2上執行:
      sudo rabbitmqctl stop_app
      
    2. 重置目標節點(首次加入集群時執行,清除原有集群數據):
      sudo rabbitmqctl reset
      
    3. 加入集群:將rabbit2加入rabbit1集群(rabbit1為主節點):
      sudo rabbitmqctl join_cluster rabbit@rabbit1
      
      注:rabbit@rabbit1中的rabbit1是主節點的主機名(需與/etc/hosts中的配置一致)。
    4. 啟動目標節點應用
      sudo rabbitmqctl start_app
      
    5. 重復上述步驟:將rabbit3加入集群(命令同rabbit2)。

6. 驗證集群狀態

在任意節點(如rabbit1)上執行以下命令,查看集群節點列表及狀態:

sudo rabbitmqctl cluster_status

正常輸出應包含所有節點(如rabbit@rabbit1、rabbit@rabbit2、rabbit@rabbit3),且狀態為running。

7. 配置鏡像隊列(實現高可用)

鏡像隊列將隊列數據復制到多個節點,避免單點故障。推薦使用仲裁隊列(Quorum Queues)(RabbitMQ 3.8+版本,替代傳統鏡像隊列,基于Raft協議保證強一致性)。

  • 創建仲裁隊列策略:在任意節點上執行以下命令,將所有隊列設置為仲裁隊列(ha-mode: "exactly"表示副本數,ha-params: 3表示3個副本):
    sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' --priority 0 --apply-to queues
    
    參數說明:
    • ^:匹配所有隊列名稱;
    • ha-mode: "exactly":精確指定副本數;
    • ha-params: 3:3個副本(需與集群節點數一致);
    • ha-sync-mode: "automatic":自動同步隊列數據(避免手動同步)。

8. 測試集群高可用

  • 創建測試隊列:通過管理界面或命令行創建隊列(如test_queue),并設置為持久化(durable: true)。
  • 發布消息:向隊列發送消息(如Hello, RabbitMQ Cluster)。
  • 停止主節點:停止rabbit1的RabbitMQ服務(sudo systemctl stop rabbitmq-server)。
  • 驗證消息訪問:通過rabbit2rabbit3的管理界面查看test_queue,應仍能訪問消息(說明隊列已鏡像到其他節點)。

關鍵注意事項

  • 節點類型:集群包含磁盤節點(存儲元數據,推薦至少2個)和內存節點(緩存數據,提升性能)。默認創建的節點為磁盤節點,如需添加內存節點,在join_cluster命令中指定--ram參數:
    sudo rabbitmqctl join_cluster --ram rabbit@rabbit1
    
  • 網絡分區處理:配置集群分區處理策略(避免腦裂),在/etc/rabbitmq/rabbitmq.conf中添加:
    cluster_partition_handling = pause_minority
    
    該策略會在網絡分區時暫停少數派節點(如3節點集群中1節點分區,暫停該節點),待網絡恢復后自動同步數據。
  • 數據持久化:創建隊列時需設置durable: true(隊列持久化),發布消息時設置delivery_mode: 2(消息持久化),確保節點重啟后數據不丟失。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女