docker-compose搭建RocketMq集群

集群架构:双主

机器:172.50.2.41

172.50.2.42

一、创建目录

bash 复制代码
mkdir -p /docker/alibaba/rocketmq/logs/nameserver
mkdir -p /docker/alibaba/rocketmq/logs/broker
mkdir -p /docker/alibaba/rocketmq/store/broker
mkdir -p /docker/alibaba/rocketmq/broker/
mkdir -p /docker/alibaba/rocketmq/console-ng/data

设置权限

bash 复制代码
chmod 777 -R /docker/alibaba/rocketmq/logs/*
chmod 777 -R /docker/alibaba/rocketmq/store/*

注意:这里如果不设置权限,会导致docker写入文件失败,导致rocketmq启动异常。

二、创建broker.conf

XML 复制代码
vim /docker/alibaba/rocketmq/broker/broker.conf

编辑内容,这里需要根据自己的实际环境做适当修改
注意:brokerIP1,namesrvAddr,这2个参数,一般配置为内网ip,提供内网访问。如果需要公网访问,这里一定要配置公网ip,否则无法访问。

1、第一个节点broker.conf

bash 复制代码
brokerClusterName = rocketmq-cluster
brokerName = broker-a
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 172.50.2.41
deleteWhen = 04
fileReservedTime = 48
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr = 172.50.2.41:9876;172.50.2.42:9876
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole = ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH

2、第二个节点broker.conf

XML 复制代码
brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1 = 172.50.2.42
deleteWhen = 04
fileReservedTime = 48
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr = 172.50.2.41:9876;172.50.2.42:9876
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole = ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType = ASYNC_FLUSH

3、编辑rocketmq的docker-compose.yml文件

bash 复制代码
version: '3.9'
services:
  rmqnamesrv:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    network_mode: "host"
    privileged: true
    volumes:
      #- /docker/alibaba/rocketmq/logs/nameserver:/home/rocketmq/logs
      - /docker/alibaba/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv

  rmqbroker:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker
    ports:
      - 10911:10911
    network_mode: "host"
    privileged: true
    volumes:
     # - /docker/alibaba/rocketmq/logs/broker/logs:/home/rocketmq/logs
     # - /docker/alibaba/rocketmq/store/broker/store:/home/rocketmq/store
      - /docker/alibaba/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf

3、编辑rocketmq-dashboard的docker-compose.yml文件(新版改了,好像叫rocketmq-console)

bash 复制代码
version: '3.9'
services:
  rmqconsole:
    image: apacherocketmq/rocketmq-dashboard
    container_name: rmqconsole
    ports:
      - 8087:8087
    network_mode: "host"
    privileged: true
    environment:
      JAVA_OPTS: -Dserver.port=8087 -Drocketmq.namesrv.addr=172.50.2.41:9876;172.50.2.42:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
    volumes:
      - /docker/alibaba/rocketmq/console-ng/data:/tmp/rocketmq-console/data
    network_mode: "host"
    privileged: true

4、启动

注意:启动之前一定要开放端口,不然会出现集群不通的情况

bash 复制代码
#批量添加多个端口
firewall-cmd --permanent --add-port=8087/tcp --add-port=9876/tcp --add-port=10911/tcp
 
# 防火墙重载
firewall-cmd --reload
bash 复制代码
docker-compose up -d

5、访问控制台

四、数据持久化

上面的 docker-compose.yml,注释掉了一些文件挂载操作,因为新版本的rocketmq无法启动创建文件,直接挂载一个空目录,会启动报错。

复制docker里面的文件

bash 复制代码
docker cp rmqnamesrv:/home/rocketmq/logs /docker/alibaba/rocketmq/logs/nameserver
docker cp rmqbroker:/home/rocketmq/logs /docker/alibaba/rocketmq/logs/broker
docker cp rmqbroker:/home/rocketmq/store /docker/alibaba/rocketmq/store/broker

再执行一遍设置权限,否则会写入文件失败,造成启动失败。

bash 复制代码
chmod 777 -R /docker/alibaba/rocketmq/logs/*
chmod 777 -R /docker/alibaba/rocketmq/store/*

关闭相关docker进程

bash 复制代码
docker stop rmqnamesrv rmqbroker

修改docker-compose.yml,开启持久化配置

bash 复制代码
version: '3.9'
services:
  rmqnamesrv:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv
    ports:
      - 9876:9876
    network_mode: "host"
    privileged: true
    volumes:
      - /docker/alibaba/rocketmq/logs/nameserver:/home/rocketmq/logs
      - /docker/alibaba/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv

  rmqbroker:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker
    ports:
      - 10911:10911
    network_mode: "host"
    privileged: true
    volumes:
      - /docker/alibaba/rocketmq/logs/broker/logs:/home/rocketmq/logs
      - /docker/alibaba/rocketmq/store/broker/store:/home/rocketmq/store
      - /docker/alibaba/rocketmq/broker/broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf

五、重新启动

bash 复制代码
docker-compose up -d
相关推荐
江湖有缘20 分钟前
Docker实战 | 使用Docker部署HarborGuard容器安全扫描平台
安全·docker·容器
江湖有缘31 分钟前
Docker实战 | 使用Docker部署Reubah文件转换器和图像处理器
docker·容器·eureka
七夜zippoe1 小时前
把 OpenClaw Agent 搬进 K8s:容器化部署全记录
ai·云原生·容器·kubernetes·openclaw
骑着蜗牛撵大象3272 小时前
ToolJet + PostgreSQL:后台表格、查询和流程,一次搭成可远程访问的业务系统
数据库·低代码·docker·postgresql·内部工具·tooljet
flytalei3 小时前
从 Docker Compose 到 K3s:逐浪笔记首次完整部署与故障排查实战
笔记·docker·容器
吴声子夜歌3 小时前
Docker入门与实战——高级网络功能
网络·docker
JavaPub-rodert13 小时前
Docker 日志为什么能把磁盘写爆?讲透 json-file、local、journald、日志轮转与 docker logs
docker·eureka·json
人生匆匆14 小时前
docker部署ceph集群
ceph·docker·容器
张张123y17 小时前
后端第九课:部署上线(把你的 FastAPI 后端真正跑起来给别人用)
python·docker·部署·fastapi
AscendKing20 小时前
Docker Compose 一键部署 SkyWalking 10.2.0 + Elasticsearch8.11,分布式链路追踪完整实战
elasticsearch·docker·skywalking·链路追踪·微服务监控