先介紹環境:
3臺個人雲服務器 A(20) B(37) C(26)
20 這臺作爲Master 37、26作爲Slave
開放端口:5672 15672 25672 4369
如果開啓防火牆建議關閉
查看防火牆狀態: systemctl status firewalld.service
綠的running表示防火牆開啓
執行關閉命令: systemctl stop firewalld.service
再次執行查看防火牆命令:systemctl status firewalld.service
執行開機禁用防火牆自啓命令 : systemctl disable firewalld.service
1:三臺服務器先各自進行安裝 並啓動 安裝單機教程:https://blog.csdn.net/publicv/article/details/96421936
2:按照教程來,需要將三臺的 hostname 名字重新定義一下 ,這邊根據 ip 最後一段進行定義 例如:rabbit-xx
vim /etc/hostname
rabbit-xx
3:將三臺的 hosts 相互綁定, 互相ping通 三個節點都是一樣的操作
vim /etc/hosts
ip rabbit-xx
ip rabbit-xx
ip rabbit-xx
4: 將master 節點的 .erlang.cookie 同步到其他兩臺服務器
cd /var/lib/rabbitmq/
ll -a
scp /var/lib/rabbitmq/.erlang.cookie ip:/var/lib/rabbitmq/
1:集羣步驟開始:將三臺節點都進行關閉 這邊不能使用單機時的命令 /etc/init.d/rabbitmq-server stop
rabbitmqctl stop
會遇到這個錯誤,不要慌。他說明的很清楚了,
- 4369要開啓
- 25672要開啓
- hostname主機名是否和當前主機名保持一致
- home 路徑是否正確
- cookie是否一致
因爲我寫這邊博客時是按照我的教程一步一步操作的,希望儘可能避免環境問題。
(1):在這邊直接執行 reboot 命令進行重啓
reboot
/etc/init.d/rabbitmq-server start
lsof -i:5672
rabbitmqctl stop
2: 這時三臺節點都已經進行了關閉, 將三臺服務器 執行啓動集羣命令
rabbitmq-server -detached
3:slave 節點加入集羣操作,master 不要執行這步驟 以後重新加入到集羣中也是這個命令
37這臺slave 執行:
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@你的masterHostname
rabbitmqctl start_app
26這臺slave 執行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@你的masterHostname
rabbitmqctl start_app
這邊 --ram 含義是:使用內存保存而非持久化磁盤。一般來說3臺節點 2臺持久化1臺內存性能會比較好
4:查看集羣狀態(任意一臺節點上都可以)
rabbitmqctl cluster_status
訪問任意一個管控臺節點:http://ip:15672
如果出現報紅:說明你這臺節點的 管控臺沒有開啓,在報紅那臺節點上執行 管控臺啓動
rabbitmq-plugins enable rabbitmq_management
5:設置鏡像隊列策略,在任意一臺節點上執行一次即可
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
鏡像隊列成功圖:
遇到的一些問題:
rabbitmqctl stop
Stopping and halting node 'rabbit@rabbit-26' ...
Error: unable to connect to node 'rabbit@rabbit-26': nodedown
DIAGNOSTICS
===========
attempted to contact: ['rabbit@rabbit-26']
rabbit@rabbit-26:
* connected to epmd (port 4369) on rabbit-26
* epmd reports node 'rabbit' running on port 25672
* TCP connection succeeded but Erlang distribution failed
* suggestion: hostname mismatch?
* suggestion: is the cookie set correctly?
* suggestion: is the Erlang distribution using TLS?
current node details:
- node name: 'rabbitmq-cli-82@rabbit-26'
- home dir: /var/lib/rabbitmq
- cookie hash: kdWh0HU835FagHiGQNtq0A==
我的解決成功方案:
重啓服務器
2:
/etc/init.d/rabbitmq-server start
Starting rabbitmq-server (via systemctl): Job for rabbitmq-server.service failed because the control process exited with error code. erver.service" and "journalctl -xe" for details.
[FAILED]
我的解決成功方案:
hosts 沒有配置好
3:
Clustering node 'rabbit@rabbit-37' with 'rabbit@rabbit-20' ...
Error: unable to connect to nodes ['rabbit@rabbit-20']: nodedown
DIAGNOSTICS
===========
attempted to contact: ['rabbit@rabbit-20']
rabbit@rabbit-20:
* unable to connect to epmd (port 4369) on rabbit-20: timeout (timed out)
current node details:
- node name: 'rabbitmq-cli-30@rabbit-37'
- home dir: /var/lib/rabbitmq
- cookie hash: kdWh0HU835FagHiGQNtq0A==
[root@rabbit-37 rabbitmq]# rabbitmqctl join_cluster --ram rabbit@rabbit-20
Clustering node 'rabbit@rabbit-37' with 'rabbit@rabbit-20' ...
我的解決成功方案:
4369 端口沒有開放
4:
join_cluster --ram rabbit@rabbit-20
Clustering node 'rabbit@rabbit-37' with 'rabbit@rabbit-20' ...
Error: {inconsistent_cluster,"Node 'rabbit@rabbit-20' thinks it's clustered with node 'rabbit@rabbit-37', but 'rabbit@rabbit-37' disagrees"}
我的解決成功方案:
將所有節點 刪除 mnesia ,然後重啓 ,重新開始執行集羣搭建
rm -rf /var/lib/rabbitmq/mnesia/
5: