RabbitMQ Linux集群搭建詳細步驟
ntp
或chrony
服務,避免集群因時間差異引發問題);/etc/hosts
文件,將所有節點的IP與主機名映射(如192.168.1.101 node1
、192.168.1.102 node2
、192.168.1.103 node3
),避免DNS解析問題。RabbitMQ基于Erlang語言開發,需先安裝兼容版本的Erlang(可通過rabbitmq-server
官方文檔查詢對應版本)。
# 安裝Erlang(以Erlang 25為例)
sudo yum install -y epel-release
sudo yum install -y erlang
# 安裝RabbitMQ
sudo yum install -y rabbitmq-server
# 安裝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
RabbitMQ節點間通過Erlang Cookie進行身份驗證,所有節點的Cookie文件必須完全一致(包括內容與權限)。
/var/lib/rabbitmq/.erlang.cookie
(若為root用戶安裝,路徑可能為/root/.erlang.cookie
)。node1
)生成Cookie(若已有則跳過):sudo rm -f /var/lib/rabbitmq/.erlang.cookie # 清除舊Cookie(可選)
echo "your_secure_cookie_string" | sudo tee /var/lib/rabbitmq/.erlang.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/
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie # 僅所有者可讀寫
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie # 歸屬rabbitmq用戶
sudo systemctl start rabbitmq-server
sudo systemctl status rabbitmq-server # 檢查服務狀態(需顯示“active (running)”)
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 ".*" ".*" ".*" # 授權所有權限
node1
(主節點)執行以下命令,確保節點處于running
狀態:sudo rabbitmqctl cluster_status
node2
、node3
上停止RabbitMQ應用(無需停止服務):sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
node1
為主節點,主機名需與/etc/hosts
一致):sudo rabbitmqctl join_cluster rabbit@node1 # 若為內存節點,添加--ram參數(如`--ram`)
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_status
輸出應包含所有節點的disc
(磁盤節點)或ram
(內存節點)信息,例如:Cluster status of node rabbit@node1
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]}]
默認情況下,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
已生效。確保防火墻允許RabbitMQ的默認端口通行:
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
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw reload
--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
)監控節點狀態、隊列信息及連接情況。