?? 基礎環(huán)境
虛擬機:node1 / node2 / node3
集群:docker swarm疚颊,node1 為 manager 節(jié)點艘狭,node2 / node3 為 worker 節(jié)點
?? 集群部署方式一( rabbitmqctl
)
參考資料: Clustering Transcript with rabbitmqctl
1、創(chuàng)建 rabbitmq 持久化存儲路徑
# 【所有節(jié)點】
mkdir -p ~/rabbitmq/data
2、在 node1
上新建部署文件 ~/rabbitmq/stack.yml
version: '3.7'
services:
rabbit1:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
- RABBITMQ_DEFAULT_USER=anoyi
- RABBITMQ_DEFAULT_PASS=Passw0rd
hostname: rabbit1
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node1
rabbit2:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
- RABBITMQ_DEFAULT_USER=anoyi
- RABBITMQ_DEFAULT_PASS=Passw0rd
hostname: rabbit2
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node2
rabbit3:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
- RABBITMQ_DEFAULT_USER=anoyi
- RABBITMQ_DEFAULT_PASS=Passw0rd
hostname: rabbit3
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node3
networks:
rabbit_network:
driver: overlay
attachable: true
3、啟動 rabbitmq 服務
# 【node1】部署 stack
docker stack deploy -c ~/rabbitmq/stack.yml rabbitmq
# 【node1】查看服務狀態(tài)
docker service ls
直到出現(xiàn)如下列表:
ID NAME MODE REPLICAS IMAGE PORTS
j72ifjskqug5 rabbitmq_rabbit1 replicated 1/1 rabbitmq:3
ihs9ec74mtng rabbitmq_rabbit2 replicated 1/1 rabbitmq:3
sb996gg4jtl2 rabbitmq_rabbit3 replicated 1/1 rabbitmq:3
4、構建 rabbitmq 集群
將 rabbit@rabbit2
和 rabbit@rabbit3
加入集群:
#【node2】rabbit@rabbit2 加入集群
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl stop_app
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl reset
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl join_cluster rabbit@rabbit1
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl start_app
#【node3】rabbit@rabbit3 加入集群
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl stop_app
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl reset
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl join_cluster rabbit@rabbit1
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl start_app
5支子、查看集群狀態(tài)
# 【任意節(jié)點】
docker exec -it $(docker ps | grep "rabbit" | awk '{ print $1 }') rabbitmqctl cluster_status
?? 集群部署方式二( Config File Peer Discovery Backend
)
參考資料: How to Configure Peer Discovery
1、創(chuàng)建 rabbitmq 持久化存儲路徑
# 【所有節(jié)點】
mkdir -p ~/rabbitmq/data
2达舒、在 node1
上創(chuàng)建 rabbitmq 配置文件 ~/rabbitmq/rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
hipe_compile = false
default_user = anoyi
default_pass = Passw0rd
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@rabbit1
cluster_formation.classic_config.nodes.2 = rabbit@rabbit2
cluster_formation.classic_config.nodes.3 = rabbit@rabbit3
3值朋、在 node1
上創(chuàng)建 docker config
docker config create rabbitmq-config ~/rabbitmq/rabbitmq.conf
4叹侄、在 node1
上新建部署文件 ~/rabbitmq/stack.yml
version: '3.7'
services:
rabbit1:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
configs:
- source: rabbitmq-config
target: /etc/rabbitmq/rabbitmq.conf
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
hostname: rabbit1
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node1
rabbit2:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
configs:
- source: rabbitmq-config
target: /etc/rabbitmq/rabbitmq.conf
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
hostname: rabbit2
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node2
rabbit3:
image: rabbitmq:3
networks:
- rabbit_network
volumes:
- ~/rabbitmq/data:/var/lib/rabbitmq
configs:
- source: rabbitmq-config
target: /etc/rabbitmq/rabbitmq.conf
environment:
- RABBITMQ_ERLANG_COOKIE=anoyi_cluster_cookie
hostname: rabbit3
deploy:
replicas: 1
placement:
constraints:
- node.hostname==node3
networks:
rabbit_network:
driver: overlay
attachable: true
configs:
rabbitmq-config:
external: true
5、啟動 rabbitmq 集群
# 【node1】部署集群
docker stack deploy -c ~/rabbitmq/stack.yml rabbitmq
?? 番外補充
1昨登、Spring Boot 應用連接 RabbitMQ 集群配置
spring.rabbitmq.addresses=node1:5672,node2:5672,node3:5672
spring.rabbitmq.username=anoyi
spring.rabbitmq.password=Passw0rd
注意趾代,容器需要暴露端口 5672 供外部訪問