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文件夹。

docker部署rocketmq集群。_第1张图片

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

nameserver1的namesrv.properties(端口9877)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

nameserver1的logback_namesrv.xml(2个一样)





    
        ${user.home}/logs/rocketmqlogs/namesrv_default.log
        true
        
            ${user.home}/logs/rocketmqlogs/otherdays/namesrv_default.%i.log.gz
            1
            5
        
        
            100MB
        
        
            %d{yyy-MM-dd HH:mm:ss,GMT+8} %p %t - %m%n
            UTF-8
        
    

    
        ${user.home}/logs/rocketmqlogs/namesrv.log
        true
        
            ${user.home}/logs/rocketmqlogs/otherdays/namesrv.%i.log.gz
            1
            5
        
        
            100MB
        
        
            %d{yyy-MM-dd HH:mm:ss,GMT+8} %p %t - %m%n
            UTF-8
        
    
    
        
        0
    

    
        true
        
            %d{yyy-MM-dd HH\:mm\:ss,SSS} %p %t - %m%n
            UTF-8
        
    

    
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

    
        
        
    

nameserver2的namesrv.properties(端口9878)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

##
# 名称:NettyServerConfig.useEpollNativeSelector 
# 默认值: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

docker部署rocketmq集群。_第2张图片

你可能感兴趣的:(docker部署rocketmq集群。)