溫馨提示×

RabbitMQ Linux集群如何搭建

小樊
33
2025-10-21 00:43:31
欄目: 智能運維

RabbitMQ Linux集群搭建詳細步驟

1. 環境準備

  • 服務器要求:至少準備3臺Linux服務器(推薦CentOS 7/8或Ubuntu 20.04+),確保網絡互通(同一局域網或公網可達)。
  • 基礎配置
    • 統一時間同步(安裝ntpchrony服務,避免集群因時間差異引發問題);
    • 配置/etc/hosts文件,將所有節點的IP與主機名映射(如192.168.1.101 node1、192.168.1.102 node2、192.168.1.103 node3),避免DNS解析問題。

2. 安裝Erlang與RabbitMQ

RabbitMQ基于Erlang語言開發,需先安裝兼容版本的Erlang(可通過rabbitmq-server官方文檔查詢對應版本)。

  • CentOS系統
    # 安裝Erlang(以Erlang 25為例)
    sudo yum install -y epel-release
    sudo yum install -y erlang
    
    # 安裝RabbitMQ
    sudo yum install -y rabbitmq-server
    
  • Ubuntu/Debian系統
    # 安裝Erlang
    sudo apt update
    sudo apt install -y erlang
    
    # 安裝RabbitMQ
    sudo apt install -y rabbitmq-server
    

安裝完成后,啟動RabbitMQ服務并設置開機自啟:

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

3. 配置Erlang Cookie(集群認證核心)

RabbitMQ節點間通過Erlang Cookie進行身份驗證,所有節點的Cookie文件必須完全一致(包括內容與權限)。

  • Cookie位置:默認路徑為/var/lib/rabbitmq/.erlang.cookie(若為root用戶安裝,路徑可能為/root/.erlang.cookie)。
  • 配置步驟
    1. 主節點(如node1)生成Cookie(若已有則跳過):
      sudo rm -f /var/lib/rabbitmq/.erlang.cookie  # 清除舊Cookie(可選)
      echo "your_secure_cookie_string" | sudo tee /var/lib/rabbitmq/.erlang.cookie  # 替換為自定義字符串
      
    2. 同步Cookie到所有節點:
      sudo scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
      sudo scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/
      
    3. 設置Cookie權限(所有節點執行):
      sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie  # 僅所有者可讀寫
      sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie  # 歸屬rabbitmq用戶
      

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

  • 啟動服務:在所有節點執行以下命令,啟動RabbitMQ并設置為后臺運行:
    sudo systemctl start rabbitmq-server
    sudo systemctl status rabbitmq-server  # 檢查服務狀態(需顯示“active (running)”)
    
  • 啟用管理插件(可選但推薦):通過Web界面管理集群(默認端口15672):
    sudo rabbitmq-plugins enable rabbitmq_management
    
    默認管理員賬號為guest(僅限本地訪問),建議創建新用戶:
    sudo rabbitmqctl add_user admin your_password  # 創建用戶
    sudo rabbitmqctl set_user_tags admin administrator  # 設置管理員權限
    sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"  # 授權所有權限
    

5. 組建RabbitMQ集群

  • 步驟1:確認主節點狀態:在node1(主節點)執行以下命令,確保節點處于running狀態:
    sudo rabbitmqctl cluster_status
    
  • 步驟2:將其他節點加入集群
    1. node2、node3上停止RabbitMQ應用(無需停止服務):
      sudo rabbitmqctl stop_app
      
    2. 重置節點(首次加入集群時執行,清除本地元數據):
      sudo rabbitmqctl reset
      
    3. 加入主節點集群(node1為主節點,主機名需與/etc/hosts一致):
      sudo rabbitmqctl join_cluster rabbit@node1  # 若為內存節點,添加--ram參數(如`--ram`)
      
    4. 啟動節點應用:
      sudo rabbitmqctl start_app
      
  • 步驟3:驗證集群狀態:在任意節點執行以下命令,檢查所有節點是否已加入:
    sudo rabbitmqctl cluster_status
    
    輸出應包含所有節點的disc(磁盤節點)或ram(內存節點)信息,例如:
    Cluster status of node rabbit@node1
    [{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}]
    

6. 配置鏡像隊列(高可用可選)

默認情況下,RabbitMQ隊列僅在單個節點存儲,若需提高可用性,需配置鏡像隊列(將隊列復制到多個節點)。

  • 設置鏡像策略(在任意節點執行):
    sudo rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    
    參數說明:
    • ha-mode="all":隊列將在所有節點同步復制;
    • ha-sync-mode="automatic":自動同步隊列內容(可選manual手動同步)。
  • 驗證鏡像效果:創建隊列后,在管理界面或通過命令rabbitmqctl list_queues name policy查看隊列策略,確認ha-all已生效。

7. 防火墻與端口配置

確保防火墻允許RabbitMQ的默認端口通行:

  • CentOS系統(firewalld)
    sudo firewall-cmd --permanent --zone=public --add-port=5672/tcp  # AMQP協議端口
    sudo firewall-cmd --permanent --zone=public --add-port=15672/tcp  # 管理界面端口
    sudo firewall-cmd --reload
    
  • Ubuntu系統(ufw)
    sudo ufw allow 5672/tcp
    sudo ufw allow 15672/tcp
    sudo ufw reload
    

8. 關鍵注意事項

  • 節點類型
    • 磁盤節點(disc):存儲元數據(隊列、交換機等),推薦至少2個,確保集群元數據不丟失;
    • 內存節點(ram):僅緩存元數據,提升性能,適合高并發場景(但重啟后數據丟失)。
      加入集群時通過--ram參數指定內存節點,例如:sudo rabbitmqctl join_cluster --ram rabbit@node1。
  • 網絡分區處理
    配置集群分區處理策略,避免網絡分區引發腦裂(集群分裂為多個獨立集群)。在/etc/rabbitmq/rabbitmq.conf中添加:
    cluster_partition_handling = pause_minority  # 暫停少數派節點(推薦)
    
    或使用自動恢復插件(rabbitmq_autoheal)。
  • 數據持久化
    創建隊列時設置durable=true(隊列持久化),發送消息時設置delivery_mode=2(消息持久化),確保重啟后數據不丟失。

通過以上步驟,即可完成RabbitMQ Linux集群的搭建。集群搭建后,可通過管理界面(http://<節點IP>:15672)監控節點狀態、隊列信息及連接情況。

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