【Docker学习】5.集群部署RocketMQ


一、相关配置目录及文件映射

1.1 映射目录

1.1.1 name server

主要是给docker映射外部的日志及存储目录,即logsstore. 这里有两个nameserver组成集群,分别是namesrv-anamesrv-b

mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/store

1.1.2 broker

同name server,只是多了配置broker的文件夹。两个broker均为master。

# broker-a
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-a/conf
# broker-b
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/logs
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/store
mkdir -p /Users/zyxelva/docker-data/rocketMQ/data/broker-b/conf

1.2 映射配置文件

这里主要为broker的配置文件。

1.2.1 broker-a配置文件

# broker-a
# # 所属集群名字
brokerClusterName=rocketmq-cluster
# broker 名字,注意此处不同的配置文件填写的不一样,
# - 如果在 broker-a.properties 使用: broker-a,
# - 在 broker-b.properties 使用: broker-b
brokerName=broker-a
brokerId=0
# 启动IP,如果 docker 报 com.alibaba.rocketmq.remoting.exception.RemotingConnectException: connect to <192.168.0.120:10909> failed
# 解决方式1 加上一句 producer.setVipChannelEnabled(false);
# 解决方式2 brokerIP1 设置宿主机IP,不要使用docker 内部IP (建议直接设置)
#如果是正式环境 这里一定要填写内网地址(安全)
#如果是用于测试或者本地这里建议要填外网地址,因为你的本地代码是无法连接到阿里云内网,只能连接外网。
brokerIP1=192.168.50.205
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=48
# 注册到NameServer的地址,多个用分号分割
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.50.205:9876;192.168.50.205:9877
# 是否允许 Broker 自动创建 Topic,建议线下开启,线上关闭 !!!这里仔细看是 false,false,false
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort=10911
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

# 发消息线程池数量
# sendMessageThreadPoolNums=128
# 拉消息线程池数量
# pullMessageThreadPoolNums=128

Tips:
更多配置信息,可参看 【RocketMQ学习】13-源码之消息过滤与重试1.5节 内容

1.2.2 broker-b配置文件

brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
brokerIP1 = 192.168.50.205
deleteWhen = 04
fileReservedTime = 48
# 内网的(阿里云有内网IP和外网IP)
namesrvAddr=192.168.50.205:9876;192.168.50.205:9877
autoCreateTopicEnable=true
#Broker 对外服务的监听端口,
listenPort = 10909
#Broker角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

1.3 docker-compose文件

这里利用docker-compose进行服务编排,一次性按序启动所有需要的服务,包括nameserverbrokerconsole

我们可以简单把docker-compose.yml理解成一个类似Shell的脚本,这个脚本定义了运行多容器应用程序的信息。

version: '3.5'
services:
  rmqnamesrv-a:
    image: foxiswho/rocketmq:4.7.0
    container_name: rmqnamesrv-a
    ports:
      - 9876:9876
    volumes:
      - /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/logs:/opt/logs
      - /Users/zyxelva/docker-data/rocketMQ/data/namesrv-a/store:/opt/store
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-a

  rmqnamesrv-b:
    image: foxiswho/rocketmq:4.7.0
    container_name: rmqnamesrv-b
    ports:
      - 9877:9877
    volumes:
      - /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/logs:/opt/logs
      - /Users/zyxelva/docker-data/rocketMQ/data/namesrv-b/store:/opt/store
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-b

  rmqbroker-a:
    image: foxiswho/rocketmq:4.7.0
    container_name: rmqbroker-a
    ports:
      - 10911:10911
    volumes:
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-a/logs:/opt/logs
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-a/store:/opt/store
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-a/conf/broker-a.conf:/opt/rocketmq-4.7.0/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-a:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.7.0/conf/broker.conf autoCreateTopicEnable=true &
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-a

  rmqbroker-b:
    image: foxiswho/rocketmq:4.7.0
    container_name: rmqbroker-b
    ports:
      - 10909:10909
    volumes:
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-b/logs:/opt/logs
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-b/store:/opt/store
      - /Users/zyxelva/docker-data/rocketMQ/data/broker-b/conf/broker-b.conf:/opt/rocketmq-4.7.0/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-b:9876"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /opt/rocketmq-4.7.0/conf/broker.conf autoCreateTopicEnable=true &
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-b
  rmqconsole:
    image: styletang/rocketmq-console-ng
    container_name: rmqconsole
    ports:
      - 9001:8080
    environment:
      JAVA_OPTS: -Drocketmq.config.namesrvAddr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Drocketmq.config.isVIPChannel=false
    networks:
      rmq:
        aliases:
          - rmqconsole
networks:
  rmq:
    name: rmq
    driver: bridge

上述文件中,我们可以得出以下有用的信息:

  • rocketmq镜像,我们采用的是foxiswho/rocketmq:4.7.0;
  • 总共有5个镜像需要拉取:rmqnamesrv-armqnamesrv-brmqbroker-armqbroker-brmqconsole
  • rocketmq-console-ng是一个第三方的可视化工具,可以通过网页查看rocketmq组织信息,状态信息,消息等;
  • broker相关配置文件已经通过上面的配置文件进行了映射,后续需要更改,直接更改这些文件再重启broker即可。

二、环境部署

1. 建议使用64位操作系统,Linux / Unix / Mac;
2. 64位JDK 1.8+;
3. Maven 3.2.x;
4. Git;
5. 4g +免费磁盘用于Broker服务器

本机操作系统为MacOS Catalina 10.15,已安装docker desktop,因而已自带docker-compose,如果需要通过docker-compose启动,还需安装它。具体步骤可参考 官方说明

三、执行

假设上述步骤已然全部完成,执行下面命令

docker-compose -f docker-compose.yml up -d

看到如下结果,证明你已经全部安装成功了!

[zyxelva@192 11:40:32 ~/docker-data/rocketMQ]$ docker-compose -f docker-compose.yml up -d
[+] Running 5/5
 ⠿ Container rmqnamesrv-b  Running                                                                                          0.0s
 ⠿ Container rmqnamesrv-a  Running                                                                                          0.0s
 ⠿ Container rmqbroker-b   Running                                                                                          0.0s
 ⠿ Container rmqbroker-a   Running                                                                                          0.0s
 ⠿ Container rmqconsole    Started                                                                                          0.8s

通过docker-desktop查看启动情况。

docker-desktop服务启动概览

通过访问 http://localhost:9001可以看到可视化界面下的rocketmq相关监控信息。

name server监控概览
broker监控概览

文章作者: Kezade
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kezade !
评论
  目录