1.拉取鏡像
集群中每個節點都需要執行
docker pull rabbitmq:3.8.3-management
2.上傳docker-compose文件,設置可執行權限
相關文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13292779.html
cd /usr/local/bin/
chmod +x /usr/local/bin/docker-compose
3.創建有關目錄
路徑根據實際需求來定(hosts文件下同)
mkdir -p /home/rabbitmq/{config,data}
config目錄存放配置文件以及一些腳本,data存放rabbitmq程序數據
添加hosts文件 (最好不要在系統hosts文件中設置)
tee /home/rabbitmq/hosts <<-'EOF'
192.168.2.163 rabbitmq1
192.168.2.164 rabbitmq2
192.168.2.165 rabbitmq3
EOF
4.在上一步中創建的rabbitmq目錄下,創建docker-compose.yml文件
# cat /home/rabbitmq/docker-compose.yml
version: '3'
services:
rabbitmq1:
image: rabbitmq:3.8.3-management
container_name: rabbitmq1
restart: always
hostname: rabbitmq1
ports:
- 4369:4369
- 5671:5671
- 5672:5672
- 15672:15672
- 25672:25672
- 15692:15692
volumes:
- ./data:/var/lib/rabbitmq
- ./config/rabbitmq.sh:/etc/rabbitmq/rabbitmq.sh
- ./hosts:/etc/hosts
environment:
- RABBITMQ_DEFAULT_USER=guest
- RABBITMQ_DEFAULT_PASS=password
- RABBITMQ_ERLANG_COOKIE=thisisacookie
這是節點1的docker-compose.yml文件內容,節點2和節點3只需要將文件中的rabbitmq1改成rabbitmq2或者rabbitmq3即可
注意:在掛載參數中,必須加上“- ./hosts:/etc/hosts”,否則集群無法成功會報“Error: unable TO perform an operation ON node 'rabbit@rabbitmq1'. Please see diagnostics information AND suggestions below.”
5.啟動
各節點均在"/home/rabbitmq"路徑下執行如下命令:
docker-compose up -d
關閉防火牆或者開放對應的映射端口
6.執行集群命令
在第一步中事先規划好了各節點rabbitmq的存儲方式,即節點1是disk,節點2和節點3都是ram
所以在直接完docker-compose后,執行命令進入各docker節點:
# 該命令以節點1為例
docker exec -it rabbitmq1 /bin/bash
然后執行對應的集群命令:
disk節點(節點1主節點)執行:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
ram節點(節點2和節點3)執行:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq1
rabbitmqctl start_app
如果后期需要修改節點的存儲方式可以使用:rabbitmqctl change_cluster_node_type disc/ram #更改節點為磁盤或內存節點
7.檢查集群各節點狀態
在節點下執行:rabbitmqctl cluster_status
檢查插件情況:rabbitmq-plugins list
8.設置策略
進入任意一個RabbitMQ節點,執行如下命令:
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
查看是否設置成功:rabbitmqctl list_policies