docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28

一、前言

关于更多RocketMQ的介绍请见官网:https://rocketmq.apache.org/zh/docs/

网上关于Docker搭建RocketMQ单机&集群的版本一般都是4.X。关于最新的5.X版本,官方给出的示例都是基于物理机&虚拟机实现,不便于我们我们日常开发使用,而且官方镜像https://hub.docker.com/r/apache/rocketmq 中也没有关于容器化使用的介绍。

本章的目的:展示基于docker-compose 搭建RocketMQ 5.1.0集群,及一些部署在部署过程中的注意事项,方便大家对新版本的尝鲜与使用。

二、环境说明

基于三台CentOS7.9版本的虚拟机进行:

服务 IP 端口
nameservice 192.168.0.30 9876
mqdashboard 192.168.0.30 8001
broker-a-m 192.168.0.31 10909、10911、10912
broker-b-s 192.168.0.31 11909、11911、11912
broker-b-m 192.168.0.41 10909、10911、10912
broker-a-s 192.168.0.41 11909、11911、11912

两组MasterSlave交叉部署在两台服务器中

  • 192.168.0.30:部署NameServerrocketmq-dashboard
  • 192.168.0.31:部署broker-a-mbroker-a Master)和broker-b-sbroker-b Slave
  • 192.168.0.41:部署broker-b-mbroker-b Master)和broker-a-sbroker-a Slave

三、192.168.0.30部署

192.168.0.30上部署NameServerrocketmq-dashboard

3.1 目录结构

.
├──/root/apps/mqnamesrv
|   ├── logs
|   └── docker-compose.yml

3.2 目录赋权

查看镜像 IMAGE LAYERS

docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28_第1张图片
发现使用rockermq用户,故需要对外部的映射目录/root/apps/mqnamesrv/logs进行赋权:

chmod -R 777 /root/apps/mqnamesrv/logs

3.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:
    &default-logging
    # 日志大小和数量
    options:
        max-size: "100m"
        max-file: "3"
    # 文件存储类型
    driver: json-file
services:
  mqnamesrv:
    image: apache/rocketmq:5.1.0
    container_name: mqnamesrv
    restart: always
    ports:
      - 9876:9876
    environment:
      #内存分配
      JAVA_OPT_EXT: "-server -Xms256m -Xmx1024m"
    volumes:
      - /root/apps/mqnamesrv/logs:/home/rocketmq/logs/rocketmqlogs
    command: sh mqnamesrv
    logging: *default-logging
  mqdashboard:
    image: apacherocketmq/rocketmq-dashboard:latest
    container_name: mqdashboard
    restart: always
    ports:
      - 8001:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=mqnamesrv:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false
    logging: *default-logging

3.4 操作命令

  • 启动服务:
cd /root/apps/mqnamesrv
docker-compose up -d
  • 查看NameServer日志:
docker logs -f --tail 200 mqnamesrv
  • 查看rocketmq-dashboard日志:
docker logs -f --tail 200 mqdashboard
  • 移除服务:
cd /root/apps/mqnamesrv
docker-compose down

四、192.168.0.31部署

192.168.0.31上部署broker-a Masterbroker-b Slave

4.1 目录结构

.
├──/root/apps/mqbroker
|   ├── broker-a-m
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-a.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   ├── broker-b-s
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-b-s.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   └── docker-compose.yml

4.2 目录赋权

由章节3.2部分可知对以下目录进行赋权:

chmod -R 777 /root/apps/mqbroker/{broker-a-m,broker-b-s}/{logs,store}

4.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:
    &default-logging
    # 日志大小和数量
    options:
        max-size: "100m"
        max-file: "3"
    # 文件存储类型
    driver: json-file
services:
  broker-a-m:
    image: apache/rocketmq:5.1.0
    container_name: broker-a-m
    restart: always
    ports:
      - 10911:10911
      - 10909:10909
      - 10912:10912
    environment:
      #内存分配
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
      NAMESRV_ADDR: 192.168.0.30:9876
    volumes:
      - /root/apps/mqbroker/broker-a-m/logs:/home/rocketmq/logs/rocketmqlogs
      - /root/apps/mqbroker/broker-a-m/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async
      - /root/apps/mqbroker/broker-a-m/store:/home/rocketmq/store
      - /root/apps/mqbroker/broker-a-m/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.yml
    command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a.properties --enable-proxy
    logging: *default-logging
  broker-b-s:
    image: apache/rocketmq:5.1.0
    container_name: broker-b-s
    restart: always
    ports:
      - 11911:11911
      - 11909:11909
      - 11912:11912
    environment:
      #内存分配
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
      NAMESRV_ADDR: 192.168.0.30:9876
    volumes:
      - /root/apps/mqbroker/broker-b-s/logs:/home/rocketmq/logs/rocketmqlogs
      - /root/apps/mqbroker/broker-b-s/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async
      - /root/apps/mqbroker/broker-b-s/store:/home/rocketmq/store
      - /root/apps/mqbroker/broker-b-s/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.yml
    command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b-s.properties --enable-proxy
    logging: *default-logging

其中配置的NAMESRV_ADDR为上章节启动的NameServer地址

其中容器内部的路径/home/rocketmq/rocketmq-5.1.0/来自镜像 IMAGE LAYERS ,后期使用其他版本镜像请自行查看。

docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28_第2张图片

关于RocketMQ 集群(双主双从异步复制模式)请见:
官网介绍 或
https://github.com/apache/rocketmq/blob/master/docs/cn/operation.md

4.4 编辑properties

基础的properties文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。

4.4.1 broker-a.properties

broker-a.propertiesbroker-a Master的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-a
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.31
brokerIP2=172.30.1.31
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

因在容器内部署需注意brokerIP1 为外部宿主机的IP

因采用集群(双主双从模式)需注意在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步

因在一台宿主机上启动两个broker节点需注意listenPort属性,表示接受客户端连接的监听端口

Broker 配置说明请见章节4.5部分

4.4.2 broker-b-s.properties

broker-b-s.propertiesbroker-b Slave的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=1
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=SLAVE
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.31
brokerIP2=172.30.1.31
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=11911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

4.5 Broker 配置说明

参数名 默认值 说明
listenPort 10911 接受客户端连接的监听端口
namesrvAddr null nameServer 地址
brokerIP1 网卡的 InetAddress 当前 broker 监听的 IP
brokerIP2 跟 brokerIP1 一样 存在主从 broker 时,如果在 broker 主节点上配置了 brokerIP2 属性,broker 从节点会连接主节点配置的 brokerIP2 进行同步
brokerName null broker 的名称
brokerClusterName DefaultCluster 本 broker 所属的 Cluster 名称
brokerId 0 broker id,0 表示 master,其他的正整数表示 slave
storePathRootDir $HOME/store/ 存储根路径
storePathCommitLog $HOME/store/commitlog/ 存储 commit log 的路径
mappedFileSizeCommitLog 1024 * 1024 * 1024(1G) commit log 的映射文件大小
deleteWhen 04 在每天的什么时间删除已经超过文件保留时间的 commit log
fileReservedTime 72 以小时计算的文件保留时间
brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLAVE
flushDiskType ASYNC_FLUSH SYNC_FLUSH/ASYNC_FLUSH SYNC_FLUSH 模式下的 broker 保证在收到确认生产者之前将消息刷盘。ASYNC_FLUSH 模式下的 broker 则利用刷盘一组消息的模式,可以取得更好的性能。

4.6 操作命令​

  • 启动服务:
cd /root/apps/mqbroker
docker-compose up -d
  • 查看broker-a-m日志:
docker logs -f --tail 200 broker-a-m
  • 查看broker-b-s日志:
docker logs -f --tail 200 broker-b-s
  • 移除服务:
cd /root/apps/mqbroker
docker-compose down

五、192.168.0.41部署

192.168.0.41上部署broker-b Masterbroker-a Slave

5.1 目录结构

.
├──/root/apps/mqbroker
|   ├── broker-a-s
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-a-s.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   ├── broker-b-m
|   |   ├── conf
|   |   |    ├──2m-2s-async
|   |   |    |    └── broker-b.properties
|   |   |    └── plain_acl.yml
|   |   ├── logs
|   |   └── store
|   └── docker-compose.yml

5.2 目录赋权

由章节3.2部分可知对以下目录进行赋权:

chmod -R 777 /root/apps/mqbroker/{broker-a-s,broker-b-m}/{logs,store}

5.3 docker-compose.yml

version: "3.8"
# 通用日志设置
x-logging:
    &default-logging
    # 日志大小和数量
    options:
        max-size: "100m"
        max-file: "3"
    # 文件存储类型
    driver: json-file
services:
  broker-a-s:
    image: apache/rocketmq:5.1.0
    container_name: broker-a-s
    restart: always
    ports:
      - 11911:11911
      - 11909:11909
      - 11912:11912
    environment:
      #内存分配
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
      NAMESRV_ADDR: 192.168.0.30:9876
    volumes:
      - /root/apps/mqbroker/broker-a-s/logs:/home/rocketmq/logs/rocketmqlogs
      - /root/apps/mqbroker/broker-a-s/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async
      - /root/apps/mqbroker/broker-a-s/store:/home/rocketmq/store
      - /root/apps/mqbroker/broker-a-s/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.yml
    command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-a-s.properties --enable-proxy
    logging: *default-logging
  broker-b-m:
    image: apache/rocketmq:5.1.0
    container_name: broker-b-m
    restart: always
    ports:
      - 10911:10911
      - 10909:10909
      - 10912:10912
    environment:
      #内存分配
      JAVA_OPT_EXT: -Duser.home=/home/rocketmq -server -Xms8g -Xmx8g -Xmn4g
      NAMESRV_ADDR: 192.168.0.30:9876
    volumes:
      - /root/apps/mqbroker/broker-b-m/logs:/home/rocketmq/logs/rocketmqlogs
      - /root/apps/mqbroker/broker-b-m/conf/2m-2s-async:/home/rocketmq/conf/2m-2s-async
      - /root/apps/mqbroker/broker-b-m/store:/home/rocketmq/store
      - /root/apps/mqbroker/broker-b-m/conf/plain_acl.yml:/home/rocketmq/rocketmq-5.1.0/conf/plain_acl.yml
    command: sh mqbroker -c /home/rocketmq/conf/2m-2s-async/broker-b.properties --enable-proxy
    logging: *default-logging

注意事项请见章节4.3部分,此处就不进行重复赘述

5.4 编辑properties

基础的properties文件来自官网:https://dist.apache.org/repos/dist/release/rocketmq/5.1.0/rocketmq-all-5.1.0-bin-release.zip,再此跟进部署环境进行适当修改。

5.4.1 broker-b.properties

broker-b.propertiesbroker-b Master的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.41
brokerIP2=172.30.1.41
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

5.4.2 broker-a-s.properties

broker-a-s.propertiesbroker-a Slave的配置文件

# 集群名称
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-b
# brokerId master用0 slave用其他
brokerId=0
# 清理时机
deleteWhen=04
# 文件保留时长 48小时
fileReservedTime=48
# broker角色 -ASYNC_MASTER异步复制 -SYNC_MASTER同步双写 -SLAVE
brokerRole=ASYNC_MASTER
# 刷盘策略 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
# 主机ip
brokerIP1=192.168.0.41
brokerIP2=172.30.1.41
# 对外服务的监听接口,同一台机器上部署多个broker,端口号要不相同
listenPort=10911
# 是否能够自动创建topic
autoCreateTopicEnable=true

注意事项请见章节4.4.1部分,此处就不进行重复赘述

5.6 操作命令​

  • 启动服务:
cd /root/apps/mqbroker
docker-compose up -d
  • 查看broker-a-s日志:
docker logs -f --tail 200 broker-a-s
  • 查看broker-b-m日志:
docker logs -f --tail 200 broker-b-m
  • 移除服务:
cd /root/apps/mqbroker
docker-compose down

六、利用rocketmq-dashboard查看集群

浏览器访问:http://192.168.0.30:8001/#/cluster

docker-compose 搭建RocketMQ 5.1.0 集群(双主双从模式) | Spring Cloud 28_第3张图片
自此docker-compose搭建RocketMQ 5.1.0 集群(双主双从模式)完成,计划在下章继续补充关于ACL权限控制的相关内容

你可能感兴趣的:(docker,java-rocketmq,rocketmq)