目录
1.镜像
2.集群方式
3.namesrv部署
4.broker部署
5.rocketmq-console-ng启动
rocketmqinc/rocketmq:4.4.0 rocketmq镜像
styletang/rocketmq-console-ng rocketmq的管理界面
主要有3种:2m-2s-async、2m-2s-sync、2m-noslave。m表示master,s表示slave,由于机器及目前业务有限,使用2m-noslave方式,本文部署在同一个机器上。
2个namesrv+2个broker
创建两个文件夹nameserver1/nameserver2;每个文件夹下面都有conf、logs文件夹。
其中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
创建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
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