记录一次ubuntu24.02部署rabbitmq集群(三节点)
前置工作:
配置好docker(我用的是28.1.1) 以及docker compose(我用的2.35.1版本,命令与之前不一样)
正式开始:
1、准备rabbitmq镜像:
docker pull rabbitmq:3.12
(根据实际需要下载所需版本)
2、找一个文件夹,创建docker-compose.xml
3、编写docker-compose.xml
name: rabbitmq-cluster
services:
rabbit1:
image: rabbitmq:3.12-management
hostname: rabbit1
container_name: rabbit1
networks:
rabbitmq-net:
ipv4_address: 172.30.0.2 #子网根据自己的需要进行配置
volumes:
- rabbit1-data:/var/lib/rabbitmq/mnesia
- rabbit1-log:/var/log/rabbitmq
ports:
- "15672:15672" # 管理界面
- "5672:5672" # AMQP 协议端口
environment:
RABBITMQ_NODENAME: rabbit@rabbit1
RABBITMQ_ERLANG_COOKIE: SECRETCOOKIE #根据需要设置强力密码的cookie
restart: unless-stopped
rabbit2:
image: rabbitmq:3.12-management
hostname: rabbit2
container_name: rabbit2
networks:
rabbitmq-net:
ipv4_address: 172.30.0.3
volumes:
- rabbit2-data:/var/lib/rabbitmq/mnesia
- rabbit2-log:/var/log/rabbitmq
environment:
RABBITMQ_NODENAME: rabbit@rabbit2
RABBITMQ_ERLANG_COOKIE: SECRETCOOKIE
depends_on:
- rabbit1
restart: unless-stopped
rabbit3:
image: rabbitmq:3.12-management
hostname: rabbit3
container_name: rabbit3
networks:
rabbitmq-net:
ipv4_address: 172.30.0.4
volumes:
- rabbit3-data:/var/lib/rabbitmq/mnesia
- rabbit3-log:/var/log/rabbitmq
environment:
RABBITMQ_NODENAME: rabbit@rabbit3
RABBITMQ_ERLANG_COOKIE: SECRETCOOKIE
depends_on:
- rabbit1
restart: unless-stopped
networks:
rabbitmq-net:
driver: bridge
ipam:
config:
- subnet: 172.30.0.0/16
volumes:
rabbit1-data:
rabbit2-data:
rabbit3-data:
rabbit1-log:
rabbit2-log:
rabbit3-log:
rabbit-cookie:
driver: local
4.运行docker compose
docker compose up -d
5.查看运行状态&构建集群
docker ps
# 如果找不到 docker ps -a查看容器是否停止或者重启
构建集群(三节点):
docker exec -it rabbit2 rabbitmqctl stop_app
docker exec -it rabbit2 rabbitmqctl join_cluster rabbit@rabbit1
docker exec -it rabbit2 rabbitmqctl start_app
docker exec -it rabbit3 rabbitmqctl stop_app
docker exec -it rabbit3 rabbitmqctl join_cluster rabbit@rabbit1
docker exec -it rabbit3 rabbitmqctl start_app
5.测试集群的功能
查看集群状态
docker exec -it rabbit1 rabbitmqctl cluster_status
拉取rabbitmqadmin 进行消息写入和消费测试
curl -O http://localhost:15672/cli/rabbitmqadmin
chmod +x rabbitmqadmin
创建一个队列并写入消息
./rabbitmqadmin -u guest -p guest declare queue name=test-queue durable=true
消费消息(注意requeue的写法已经被淘汰,请用ackmode参数):
./rabbitmqadmin -u guest -p guest get queue=test-queue count=1 ackmode=ack_requeue_false
出现一个类似SQL查询返回的表格就代表消费成功了
6、如果出现报错,请重新构建集群
docker compose down -v #清除所有状态和volumes,并关闭所有容器
注意的坑点:
1、erlang-cookie需要都配置成一样的,否则无法互相加入;用环境变量设置erlang-cookie不容易出错,如果用volume需要注意绑定是否正确。实际上环境变量也可以映射具体文件。个人用volume配置的时候容器会无法启动,故采用环境变量
2、注意子网冲突,如果发生子网冲突,请更换全部子网网段。如果之前配置的子网不需要了可以删除掉
本文来自博客园,作者:JessieLin,转载请注明原文链接:https://www.cnblogs.com/6543x1/p/18934971

浙公网安备 33010602011771号