docker部署rocketmq集群。

目录

1.镜像

2.集群方式

3.namesrv部署

4.broker部署

5.rocketmq-console-ng启动


1.镜像

rocketmqinc/rocketmq:4.4.0   rocketmq镜像

styletang/rocketmq-console-ng  rocketmq的管理界面

2.集群方式

  主要有3种:2m-2s-async、2m-2s-sync、2m-noslave。m表示master,s表示slave,由于机器及目前业务有限,使用2m-noslave方式,本文部署在同一个机器上。

  2个namesrv+2个broker

3.namesrv部署

创建两个文件夹nameserver1/nameserver2;每个文件夹下面都有conf、logs文件夹。

其中conf文件夹下面创建2个配置文件namesrv.properties、logback_namesrv.xml。

nameserver1的namesrv.properties(端口9877)

##
# 名称:NamesrvConfig.rocketmqHome <String>
# 默认值:(通过 sh mqnamesrv 设置 ROCKETMQ_HOME 环境变量,在源程序中获取环境变量得
#        到的目录)
# 描述:RocketMQ 主目录 
# 建议:不主动配置
##
rocketmqHome = /opt/rocketmq-4.4.0

##
# 名称:NamesrvConfig.kvConfigPath <String>
# 默认值:$user.home/namesrv/kvConfig.json <在源程序中获取用户环境变量后生成>
# 描述:kv 配置文件路径,包含顺序消息主题的配置信息 
# 建议:启用顺序消息时配置
##
#kvConfigPath = /root/namesrv/kvConfig.json

##
# 名称:NamesrvConfig.configStorePath <String>
# 默认值:$user.home/namesrv/namesrv.properties <在源程序中获取用户环境变量后生成>
# 描述:NameServer 配置文件路径
# 建议:启动时通过 -c 指定
##
#configStorePath = /root/namesrv/namesrv.properties

##
# 名称:NamesrvConfig.clusterTest <boolean>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否开启集群测试
# 建议:不主动配置
##
clusterTest = false

##
# 名称:NamesrvConfig.orderMessageEnable <boolean>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否支持顺序消息
# 建议:启用顺序消息时配置
##
orderMessageEnable = false

##
# 名称:NettyServerConfig.listenPort <int>
# 默认值:9876 <在源程序中初始化后单独设置>
# 描述:服务端监听端口
# 建议:不主动配置
##
listenPort = 9877

##
# 名称:NettyServerConfig.serverWorkerThreads <int>
# 默认值:8 <在源程序中初始化字段时指定>
# 描述:Netty 业务线程池线程个数
# 建议:不主动配置
##
serverWorkerThreads = 8

##
# 名称:NettyServerConfig.serverCallbackExecutorThreads <int>
# 默认值:0 <在源程序中初始化字段时指定>
# 描述:Netty public 任务线程池线程个数,Netty 网络设计,根据业务类型会创建不同的线程池,比如处理发送消息、消息消费、心跳检测等。如果该业务类型(RequestCode)未注册线程池,则由 public 线程池执行
# 建议:
##
serverCallbackExecutorThreads = 0

##
# 名称:NettyServerConfig.serverSelectorThreads <int>
# 默认值:3 <在源程序中初始化字段时指定>
# 描述:IO 线程池线程个数,主要是 NameServer、Broker 端解析请求、返回响应的线程个数,这类线程池主要是处理网络请求的,解析请求包,然后转发到各个业务线程池完成具体的业务操作,然后将结果再返回调用方
# 建议:不主动配置
##
serverSelectorThreads = 3

##
# 名称:NettyServerConfig.serverOnewaySemaphoreValue <int>
# 默认值:256 <在源程序中初始化字段时指定>
# 描述:send oneway 消息请求并发度
# 建议:不主动配置
##
serverOnewaySemaphoreValue = 256

##
# 名称:NettyServerConfig.serverAsyncSemaphoreValue <int>
# 默认值:64 <在源程序中初始化字段时指定>
# 描述:异步消息发送最大并发度
# 建议:不主动配置
##
serverAsyncSemaphoreValue = 64

##
# 名称:NettyServerConfig.serverChannelMaxIdleTimeSeconds <int>
# 默认值:120 <在源程序中初始化字段时指定>
# 描述:网络连接最大空闲时间,单位秒,如果连接空闲时间超过该参数设置的值,连接将被关闭
# 建议:不主动配置
##
serverChannelMaxIdleTimeSeconds = 120

##
# 名称:NettyServerConfig.serverSocketSndBufSize <int>
# 默认值:65535 <在源程序中初始化字段时指定>
# 描述:网络 socket 发送缓存区大小,单位 B,即默认为 64KB
# 建议:不主动配置
##
serverSocketSndBufSize = 65535

##
# 名称:NettyServerConfig.serverSocketRcvBufSize <int>
# 默认值:65535 <在源程序中初始化字段时指定>
# 描述:网络 socket 接收缓存区大小,单位 B,即默认为 64KB
# 建议:不主动配置
##
serverSocketRcvBufSize = 65535

##
# 名称:NettyServerConfig.serverPooledByteBufAllocatorEnable <int>
# 默认值:true <在源程序中初始化字段时指定>
# 描述:ByteBuffer 是否开启缓存,建议开启
# 建议:不主动配置
##
serverPooledByteBufAllocatorEnable = true

##
# 名称:NettyServerConfig.useEpollNativeSelector <int>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否启用 Epoll IO 模型
# 建议:Linux 环境开启
##
useEpollNativeSelector = true

nameserver1的logback_namesrv.xml(2个一样)

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  -->

<configuration>
    <appender name="DefaultAppender"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${user.home}/logs/rocketmqlogs/namesrv_default.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${user.home}/logs/rocketmqlogs/otherdays/namesrv_default.%i.log.gz</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{yyy-MM-dd HH:mm:ss,GMT+8} %p %t - %m%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>

    <appender name="RocketmqNamesrvAppender_inner"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${user.home}/logs/rocketmqlogs/namesrv.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>${user.home}/logs/rocketmqlogs/otherdays/namesrv.%i.log.gz</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>5</maxIndex>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>100MB</maxFileSize>
        </triggeringPolicy>
        <encoder>
            <pattern>%d{yyy-MM-dd HH:mm:ss,GMT+8} %p %t - %m%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>
    <appender name="RocketmqNamesrvAppender" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="RocketmqNamesrvAppender_inner"/>
        <discardingThreshold>0</discardingThreshold>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <append>true</append>
        <encoder>
            <pattern>%d{yyy-MM-dd HH\:mm\:ss,SSS} %p %t - %m%n</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
    </appender>

    <logger name="RocketmqNamesrv" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="RocketmqNamesrvAppender"/>
    </logger>

    <logger name="RocketmqCommon" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="RocketmqNamesrvAppender"/>
    </logger>

    <logger name="RocketmqRemoting" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="RocketmqNamesrvAppender"/>
    </logger>

    <logger name="RocketmqNamesrvConsole" additivity="false">
        <level value="INFO"/>
        <appender-ref ref="STDOUT"/>
    </logger>

    <root>
        <level value="INFO"/>
        <appender-ref ref="DefaultAppender"/>
    </root>
</configuration>

nameserver2的namesrv.properties(端口9878)

##
# 名称:NamesrvConfig.rocketmqHome <String>
# 默认值:(通过 sh mqnamesrv 设置 ROCKETMQ_HOME 环境变量,在源程序中获取环境变量得
#        到的目录)
# 描述:RocketMQ 主目录 
# 建议:不主动配置
##
rocketmqHome = /opt/rocketmq-4.4.0

##
# 名称:NamesrvConfig.kvConfigPath <String>
# 默认值:$user.home/namesrv/kvConfig.json <在源程序中获取用户环境变量后生成>
# 描述:kv 配置文件路径,包含顺序消息主题的配置信息 
# 建议:启用顺序消息时配置
##
#kvConfigPath = /root/namesrv/kvConfig.json

##
# 名称:NamesrvConfig.configStorePath <String>
# 默认值:$user.home/namesrv/namesrv.properties <在源程序中获取用户环境变量后生成>
# 描述:NameServer 配置文件路径
# 建议:启动时通过 -c 指定
##
#configStorePath = /root/namesrv/namesrv.properties

##
# 名称:NamesrvConfig.clusterTest <boolean>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否开启集群测试
# 建议:不主动配置
##
clusterTest = false

##
# 名称:NamesrvConfig.orderMessageEnable <boolean>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否支持顺序消息
# 建议:启用顺序消息时配置
##
orderMessageEnable = false

##
# 名称:NettyServerConfig.listenPort <int>
# 默认值:9876 <在源程序中初始化后单独设置>
# 描述:服务端监听端口
# 建议:不主动配置
##
listenPort = 9878

##
# 名称:NettyServerConfig.serverWorkerThreads <int>
# 默认值:8 <在源程序中初始化字段时指定>
# 描述:Netty 业务线程池线程个数
# 建议:不主动配置
##
serverWorkerThreads = 8

##
# 名称:NettyServerConfig.serverCallbackExecutorThreads <int>
# 默认值:0 <在源程序中初始化字段时指定>
# 描述:Netty public 任务线程池线程个数,Netty 网络设计,根据业务类型会创建不同的线程池,比如处理发送消息、消息消费、心跳检测等。如果该业务类型(RequestCode)未注册线程池,则由 public 线程池执行
# 建议:
##
serverCallbackExecutorThreads = 0

##
# 名称:NettyServerConfig.serverSelectorThreads <int>
# 默认值:3 <在源程序中初始化字段时指定>
# 描述:IO 线程池线程个数,主要是 NameServer、Broker 端解析请求、返回响应的线程个数,这类线程池主要是处理网络请求的,解析请求包,然后转发到各个业务线程池完成具体的业务操作,然后将结果再返回调用方
# 建议:不主动配置
##
serverSelectorThreads = 3

##
# 名称:NettyServerConfig.serverOnewaySemaphoreValue <int>
# 默认值:256 <在源程序中初始化字段时指定>
# 描述:send oneway 消息请求并发度
# 建议:不主动配置
##
serverOnewaySemaphoreValue = 256

##
# 名称:NettyServerConfig.serverAsyncSemaphoreValue <int>
# 默认值:64 <在源程序中初始化字段时指定>
# 描述:异步消息发送最大并发度
# 建议:不主动配置
##
serverAsyncSemaphoreValue = 64

##
# 名称:NettyServerConfig.serverChannelMaxIdleTimeSeconds <int>
# 默认值:120 <在源程序中初始化字段时指定>
# 描述:网络连接最大空闲时间,单位秒,如果连接空闲时间超过该参数设置的值,连接将被关闭
# 建议:不主动配置
##
serverChannelMaxIdleTimeSeconds = 120

##
# 名称:NettyServerConfig.serverSocketSndBufSize <int>
# 默认值:65535 <在源程序中初始化字段时指定>
# 描述:网络 socket 发送缓存区大小,单位 B,即默认为 64KB
# 建议:不主动配置
##
serverSocketSndBufSize = 65535

##
# 名称:NettyServerConfig.serverSocketRcvBufSize <int>
# 默认值:65535 <在源程序中初始化字段时指定>
# 描述:网络 socket 接收缓存区大小,单位 B,即默认为 64KB
# 建议:不主动配置
##
serverSocketRcvBufSize = 65535

##
# 名称:NettyServerConfig.serverPooledByteBufAllocatorEnable <int>
# 默认值:true <在源程序中初始化字段时指定>
# 描述:ByteBuffer 是否开启缓存,建议开启
# 建议:不主动配置
##
serverPooledByteBufAllocatorEnable = true

##
# 名称:NettyServerConfig.useEpollNativeSelector <int>
# 默认值:false <在源程序中初始化字段时指定>
# 描述:是否启用 Epoll IO 模型
# 建议:Linux 环境开启
##
useEpollNativeSelector = true

nameserver1启动:

docker run -u root -d -p 9877:9877\
 -v /home/zhanggw/rocketmq/cluster/nameserver1/conf/namesrv.properties:/opt/rocketmq-4.4.0/conf/namesrv.properties\
 -v /home/zhanggw/rocketmq/cluster/nameserver1/conf/logback_namesrv.xml:/opt/rocketmq-4.4.0/conf/logback_namesrv.xml\
 -v /home/zhanggw/rocketmq/cluster/nameserver1/logs:/root/logs\
 --name rmqnamesrv1\
 -e "MAX_POSSIBLE_HEAP=100000000"\
 rocketmqinc/rocketmq:4.4.0 sh mqnamesrv -c /opt/rocketmq-4.4.0/conf/namesrv.properties

nameserver2启动:

docker run -u root -d -p 9878:9878\
 -v /home/zhanggw/rocketmq/cluster/nameserver2/conf/namesrv.properties:/opt/rocketmq-4.4.0/conf/namesrv.properties\
 -v /home/zhanggw/rocketmq/cluster/nameserver2/conf/logback_namesrv.xml:/opt/rocketmq-4.4.0/conf/logback_namesrv.xml\
 -v /home/zhanggw/rocketmq/cluster/nameserver2/logs:/root/logs\
 --name rmqnamesrv2\
 -e "MAX_POSSIBLE_HEAP=100000000"\
 rocketmqinc/rocketmq:4.4.0 sh mqnamesrv -c /opt/rocketmq-4.4.0/conf/namesrv.properties

4.broker部署

创建2个broker文件夹(broker-a、broker-b),每个文件夹下面再创建conf(里面只有一个broker.conf)、logs、store 3个文件夹。

broker-a的broker.conf(10910 10908)

#broker集群名称,用于划分broker
brokerClusterName=MQCluster001

#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-a

#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0

brokerIP1=192.168.0.105

#broker服务监听端口 默认10911,vip端口为10911-2=10909
listenPort=10910

#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.0.105:9877;192.168.0.105:9878

#持久化消息存储根路径
storePathRootDir=/root/store/

#commitLog文件存储路径
storePathCommitLog=/root/store/commitlog

#未消费的持久化消息清理时间点
deleteWhen=04

#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8

#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true

#是否自动创建topic的订阅组,默认开启
autoCreateSubscriptionGroup=true

#持久化消息保存周期(单位:小时),超过该周期将被清理
fileReservedTime=24

#单个commitLog文件的大小限制(单位:字节)
mapedFileSizeCommitLog=1073741824

#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20)
mapedFileSizeConsumeQueue=8000000

#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88

#最大消息大小限制(单位:字节)
maxMessageSize=65536

#commitLog最少刷盘page数
flushCommitLogLeastPages=4

#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2

#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000

#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000

#处理消息发送线程池大小
sendMessageThreadPoolNums=128

#处理消息拉取线程池大小
pullMessageThreadPoolNums=128

#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=ASYNC_MASTER

#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

broker-b的broker.conf(10907  10905)

#broker集群名称,用于划分broker
brokerClusterName=MQCluster001

#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-b

#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0

brokerIP1=192.168.0.105

#broker服务监听端口 默认10911,vip端口为10911-2=10909
listenPort=10907

#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.0.105:9877;192.168.0.105:9878

#持久化消息存储根路径
storePathRootDir=/root/store/

#commitLog文件存储路径
storePathCommitLog=/root/store/commitlog

#未消费的持久化消息清理时间点
deleteWhen=04

#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8

#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true

#是否自动创建topic的订阅组,默认开启
autoCreateSubscriptionGroup=true

#持久化消息保存周期(单位:小时),超过该周期将被清理
fileReservedTime=24

#单个commitLog文件的大小限制(单位:字节)
mapedFileSizeCommitLog=1073741824

#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20)
mapedFileSizeConsumeQueue=8000000

#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88

#最大消息大小限制(单位:字节)
maxMessageSize=65536

#commitLog最少刷盘page数
flushCommitLogLeastPages=4

#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2

#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000

#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000

#处理消息发送线程池大小
sendMessageThreadPoolNums=128

#处理消息拉取线程池大小
pullMessageThreadPoolNums=128

#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=ASYNC_MASTER

#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

启动broker-a

docker run -u root -d -p 10910:10910 -p 10908:10908\
 -v /home/zhanggw/rocketmq/cluster/broker-a/logs:/root/logs\
 -v /home/zhanggw/rocketmq/cluster/broker-a/store:/root/store\
 -v /home/zhanggw/rocketmq/cluster/broker-a/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf\
 --name rmqbroker-a\
 -e "MAX_POSSIBLE_HEAP=200000000"\
 rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf

启动broker-b

docker run -u root -d -p 10907:10907 -p 10905:10905\
 -v /home/zhanggw/rocketmq/cluster/broker-b/logs:/root/logs\
 -v /home/zhanggw/rocketmq/cluster/broker-b/store:/root/store\
 -v /home/zhanggw/rocketmq/cluster/broker-b/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf\
 --name rmqbroker-b\
 -e "MAX_POSSIBLE_HEAP=200000000"\
 rocketmqinc/rocketmq:4.4.0 sh mqbroker -c /opt/rocketmq-4.4.0/conf/broker.conf 

5.rocketmq-console-ng启动

docker run -d -p 8085:8080\
 -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.105:9877;192.168.0.105:9878 -Dcom.rocketmq.sendMessageWithVIPChannel=false"\
 -t styletang/rocketmq-console-ng

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kenick

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

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

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

打赏作者

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

抵扣说明:

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

余额充值