记录一次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、注意子网冲突,如果发生子网冲突,请更换全部子网网段。如果之前配置的子网不需要了可以删除掉

posted @ 2025-06-18 16:53  JessieLin  阅读(43)  评论(0)    收藏  举报