rocketmq docker-compose 单机与同步双写 部署说明

中文文档 : https://github.com/apache/rocketmq/tree/master/docs/cn

具体broker 配置属性说明 : http://rocketmq.apache.org/docs/rmq-deployment/

本文使用镜像地址 :https://hub.docker.com/r/rocketmqinc/rocketmq

单节点快速体验

vim docker-compose.yml


version: '2'
services:
  namesrv:
    image: rocketmqinc/rocketmq
    container_name: rmqnamesrv
    restart: always
    ports:
      - 9876:9876
    volumes:
      - ./logs:/home/rocketmq/logs
      - ./store:/home/rocketmq/store
    command: sh mqnamesrv
  broker:
    image: rocketmqinc/rocketmq
    container_name: rmqbroker
    restart: always
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912
    volumes:
      - ./logs:/home/rocketmq/logs
      - ./store:/home/rocketmq/store
      - ./conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf
    command: sh mqbroker -n namesrv:9876 -c ../conf/broker.conf
    depends_on:
      - namesrv
    environment:
      - JAVA_HOME=/usr/lib/jvm/jre
  console:
    image: styletang/rocketmq-console-ng
    container_name: rocketmq-console-ng
    restart: always
    ports:
      - 80:8080
    depends_on:
      - namesrv
    environment:
      - JAVA_OPTS= -Dlogging.level.root=info   -Drocketmq.namesrv.addr=rmqnamesrv:9876
      - Dcom.rocketmq.sendMessageWithVIPChannel=false


vim conf/broker-a.conf


brokerName = broker-a  
brokerId = 0  
deleteWhen = 04  
fileReservedTime = 48  
brokerRole = ASYNC_MASTER  
flushDiskType = ASYNC_FLUSH  
# 如果是本地程序调用云主机 mq,这个需要设置成 云主机 IP
brokerIP1=192.168.2.225
namesrvAddr=namesrv-1:9876

docker-compose up 启动

成功之后IP:80访问控制台,可以看到集群以及broker成功

在这里插入图片描述

多主多从 - 同步双写

一样的操作

vim docker-compose.yml


version: '2.3'
services:
  namesrv-1:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 9876:9876
    volumes:
      - "./namesrv-1/logs:/opt/logs"
      - "./namesrv-1/store:/opt/store"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqnamesrv
    environment:
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"
  namesrv-2:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 9877:9876
    volumes:
      - "./namesrv-2/logs:/opt/logs"
      - "./namesrv-2/store:/opt/store"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqnamesrv
    environment:
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"
  namesrv-3:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 9878:9876
    volumes:
      - "./namesrv-3/logs:/opt/logs"
      - "./namesrv-3/store:/opt/store"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqnamesrv
    environment:
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"  



  broker-a-m:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 10909:10909
      - 10911:10911
      - 10912:10912 
    volumes:
      - "./broker-a-m/logs:/opt/logs"
      - "./broker-a-m/store:/opt/store"
      - "./conf/broker-a-m.conf:/etc/rocketmq/broker.conf"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqbroker -c /etc/rocketmq/broker.conf
    links:
      - namesrv-1:namesrv-1
      - namesrv-2:namesrv-2
      - namesrv-3:namesrv-3
    depends_on:
      - namesrv-1
      - namesrv-2
      - namesrv-3
    environment:
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_HOME: "/usr/lib/jvm/jre"
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"
  broker-a-s:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 10919:10909
      - 10921:10911 
      - 10922:10912
    volumes:
      - "./broker-a-s/logs:/opt/logs"
      - "./broker-a-s/store:/opt/store"
      - "./conf/broker-a-s.conf:/etc/rocketmq/broker.conf"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqbroker -c /etc/rocketmq/broker.conf 
    links:
      - namesrv-1:namesrv-1
      - namesrv-2:namesrv-2
      - namesrv-3:namesrv-3
    depends_on:
      - namesrv-1
      - namesrv-2
      - namesrv-3
    environment:
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_HOME: "/usr/lib/jvm/jre" 
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"



  broker-b-m:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 10929:10909
      - 10931:10911
      - 10932:10912 
    volumes:
      - "./broker-b-m/logs:/opt/logs"
      - "./broker-b-m/store:/opt/store"
      - "./conf/broker-b-m.conf:/etc/rocketmq/broker.conf"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqbroker -c /etc/rocketmq/broker.conf
    links:
      - namesrv-1:namesrv-1
      - namesrv-2:namesrv-2
      - namesrv-3:namesrv-3
    depends_on:
      - namesrv-1
      - namesrv-2
      - namesrv-3
    environment:
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_HOME: "/usr/lib/jvm/jre"
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"
  broker-b-s:
    image: rocketmqinc/rocketmq:4.4.0
    restart: always
    ports:
      - 10939:10909
      - 10941:10911 
      - 10942:10912
    volumes:
      - "./broker-b-s/logs:/opt/logs"
      - "./broker-b-s/store:/opt/store"
      - "./conf/broker-b-s.conf:/etc/rocketmq/broker.conf"
      - /etc/localtime:/etc/localtime:ro
    command: sh mqbroker -c /etc/rocketmq/broker.conf 
    links:
      - namesrv-1:namesrv-1
      - namesrv-2:namesrv-2
      - namesrv-3:namesrv-3
    depends_on:
      - namesrv-1
      - namesrv-2
      - namesrv-3
    environment:
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_HOME: "/usr/lib/jvm/jre" 
      JAVA_OPT_EXT: "-server -Xms300m -Xmx300m -Xmn150m"

  console:
    image: styletang/rocketmq-console-ng
    restart: always
    ports:
      - 80:8080
    volumes:
      - /etc/localtime:/etc/localtime:ro
    links:
      - namesrv-1:namesrv-1
      - namesrv-2:namesrv-2
      - namesrv-3:namesrv-3
    depends_on:
      - namesrv-1
      - namesrv-2
      - namesrv-3
    environment:
      JAVA_OPTS: -Drocketmq.config.namesrvAddr=namesrv-1:9876;namesrv-2:9877;namesrv-3:9878 -Dcom.rocketmq.sendMessageWithVIPChannel=false


复制配置文件

vim conf/broker-a-m.conf

#0 表示 Master,>0 表示 Slave
brokerId = 0
#这个很有讲究 如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网
brokerIP1 = 192.168.203.102
# 因为我们使用了links docker会自动映射
namesrvAddr=namesrv-1:9876;namesrv-2:9877;namesrv-3:9878
#Broker 对外服务的监听端口
listenPort = 10911
#删除文件时间点,默认凌晨 4点
deleteWhen = 04
# 映射文件提交大小
mapedFileSizeCommitLog = 1024 * 1024 * 1024
#文件保留时间,默认 72 小时
fileReservedTime = 120
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH

相同的操作,复制三份
cp conf/broker-a-m.conf conf/broker-a-s.conf
cp conf/broker-a-m.conf conf/broker-b-m.conf
cp conf/broker-a-m.conf conf/broker-b-s.conf


稍微修改下 , 改成 slave
vim conf/broker-a-s.conf

#0 表示 Master,>0 表示 Slave
brokerId = 1
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE


稍微修改下 , 改成 broker-b
vim conf/broker-b-m.conf

#当前broker名
brokerName = broker-name-b


稍微修改下 , 改成 broker-b
vim conf/broker-b-s.conf

#当前broker名
brokerName = broker-name-b
#0 表示 Master,>0 表示 Slave
brokerId = 1
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SLAVE


这样配置文件也准备好了,直接启动

docker-compose up

同样可以在控制台看到集群和broker
在这里插入图片描述

客户端连接问题:

MQClientException: No route info of this topic, springboot-mq

因为各自环境不一样所以只能挨个排除

  • 可能是 autoCreateTopicEnable 没有设置成true
  • 可能是配置文件中broker连接nameserver地址,外网无法访问,比如,我配置的是docker中的host映射,没有配置外网IP
  • 可能是磁盘或者内存空间不够,磁盘不够那自然无法持久化,在同步双写的时候也就无法写入,自然就失败了

MQBrokerException: CODE: 14 DESC: service not available now, maybe disk full, CL: 0.96 CQ: 0.96 INDEX: 0.96, maybe your broker machine memory too small.

这个就是典型的磁盘空间不足,我只给了20g磁盘

df -lh 分析哪些地方占了位置,删掉或者扩容

RemotingConnectException: connect to <192.168.203.102:10929> failed

默认的非vip通道端口:10911
vip通道端口:10909

需要注意 我们单机部署 默认如果走内网通道可能会有问题 ,客户端(console 和 我们的生产者 消费者)需要关闭内网通道,

代码中
setVipChannelEnabled(false);
或者环境变量/jvm参数
com.rocketmq.sendMessageWithVIPChannel = false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木秀林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值