Apache RocketMQ是一个分布式消息传递和流媒体平台,具有低延迟、高性能和可靠性、万亿级容量和灵活的可伸缩性。它由四部分组成:nameserver、broker、producer和consumer。它们中的每一个都可以进行水平扩展,以此来避免单点故障。如下图所示:
按上图所示,进行2主2从的搭建,服务分布如下表
ip | 服务 | 角色 |
---|---|---|
192.168.0.194 | namesrv1 | |
192.168.0.200 | namesrv2 | |
192.168.0.194 | broker-a | master |
192.168.0.194 | broker-a-s | slave |
192.168.0.200 | broker-b | master |
192.168.0.200 | broker-b-s | slave |
1. 下载和编译安装
> wget https://archive.apache.org/dist/rocketmq/4.6.0/rocketmq-all-4.6.0-source-release.zip
> unzip rocketmq-all-4.6.0-source-release.zip
> cd rocketmq-all-4.6.0/
> mvn -Prelease-all -DskipTests clean install -U
> cd distribution/target
> ll
rocketmq-4.6.0 rocketmq-4.6.0.tar.gz rocketmq-4.6.0.zip
rocketmq-4.6.0.tar.gz
是编译好的压缩文件,将此文件上传到服务器中解压运行
2. 解压和修改配置文件
2.1 解压文件
> cd /home/op/server/rocketmq
> tar -zxvf rocketmq-4.6.0.tar.gz
> cd rocketmq-4.6.0
注:后面的操作都是在/home/op/server/rocketmq/rocketmq-4.6.0
目录下进行的
2.2 修改内存配置
由于演示服务器配置较低,需要修改内存配置,不然因为内存不足无法启动
> vi bin/runserver.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
> vi bin/runbroker.sh
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=256m"
> vi bin/tools.sh
JAVA_OPT="${JAVA_OPT} -server -Xms64m -Xmx64m -Xmn32m -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=32m"
2.3 修改日志配置文件
> sed -i 's#${user.home}/logs/rocketmqlogs#/home/op/server/rocketmq/logs/broker#g' conf/logback_broker.xml
> sed -i 's#${user.home}/logs/rocketmqlogs#/home/op/server/rocketmq/logs/namesrv#g' conf/logback_namesrv.xml
> sed -i 's#${user.home}/logs/rocketmqlogs#/home/op/server/rocketmq/logs/tools#g' conf/logback_tools.xml
2.4 broker-a配置文件
在192.168.0.194
中,将conf/2m-2s-async/broker-a.properties
替换为如下内容
# 所属集群名称,如果多个master,那么每个master配置的名称应该一致,要不然识别不了
brokerClusterName=DefaultCluster
# broker名称
brokerName=broker-a
# 0 表示master,>0 表示slave
brokerId=0
# nameServer地址,分号隔开
namesrvAddr=192.168.0.194:9876;192.168.0.200:9876
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=true
# broker对外服务的监听端口,
# 同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
listenPort=10911
# 删除文件的时间节点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小,默认大小1g
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# store存储路径,master与slave目录要不同
storePathRootDir=/home/op/server/rocketmq/store/master
# commitLog存储路径
storePathCommitLog=/home/op/server/rocketmq/store/master/commitlog
# 消费队列存储路径
storePathConsumeQueue=/home/op/server/rocketmq/store/master/consumequeue
# 消息索引存储路径
storePathIndex=/home/op/server/rocketmq/store/master/index
# checkpoint 文件存储路径
storeCheckpoint=/home/op/server/rocketmq/store/master/checkpoint
# abort 文件存储路径
abortFile=/home/op/server/rocketmq/store/master/abort
# 限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
# 发消息线程池数
sendMessageThreadPoolNums=128
# 拉去消息线程池数
pullMessageThreadPoolNums=128
# broker角色:
# ASYNC_MASTER 异步复制master
# SYNC_MASTER 同步复制master
# SLAVE 从
brokerRole=ASYNC_MASTER
# 刷盘方式
# ASYNC_FLUSH 异步刷盘
# SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
2.5 broker-a-s配置文件
在192.168.0.194
中,拷贝conf/2m-2s-async/broker-a.properties
到conf/2m-2s-async/broker-a-s.properties
,修改如下内容
# broker名称
brokerName=broker-a
# 0 表示master,>0 表示slave
brokerId=1
# broker对外服务的监听端口,
# 同一台机器部署多个broker,端口号要不同,且端口号之间要相距大些
listenPort=10921
# store存储路径,master与slave目录要不同
storePathRootDir=/home/op/server/rocketmq/store/slave
# commitLog存储路径
storePathCommitLog=/home/op/server/rocketmq/store/slave/commitlog
# 消费队列存储路径
storePathConsumeQueue=/home/op/server/rocketmq/store/slave/consumequeue
# 消息索引存储路径
storePathIndex=/home/op/server/rocketmq/store/slave/index
# checkpoint 文件存储路径
storeCheckpoint=/home/op/server/rocketmq/store/slave/checkpoint
# abort 文件存储路径
abortFile=/home/op/server/rocketmq/store/slave/abort
# broker角色:
# ASYNC_MASTER 异步复制master
# SYNC_MASTER 同步复制master
# SLAVE 从
brokerRole=SLAVE
2.6 broker-b配置文件
将192.168.0.194
中的conf/2m-2s-async/broker-a.properties
拷贝到192.168.0.200
的conf/2m-2s-async/
目录中,并修改名称为broker-b.properties
,文件内容修改如下
# broker名称
brokerName=broker-b
2.7 broker-b-s配置文件
将192.168.0.194
中的conf/2m-2s-async/broker-a-s.properties
拷贝到192.168.0.200
的conf/2m-2s-async/
目录中,并修改名称为broker-b-s.properties
,文件内容修改如下
# broker名称
brokerName=broker-b
3.启动RocketMQ
先启动nameserver再启动broker
3.1 在192.168.0.194中
> nohup sh bin/mqnamesrv &
> nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a.properties &
> nohup sh bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties &
3.2 在192.168.0.200中
> nohup sh bin/mqnamesrv &
> nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b.properties &
> nohup sh bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties &
3.3 查看启动情况
> sh bin/mqadmin clusterList -n 192.168.0.200:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster broker-a 0 192.168.0.194:10911 V4_6_0 0.00(0,0ms) 0.00(0,0ms) 0 438751.89 -1.0000
DefaultCluster broker-a 1 192.168.0.194:10921 V4_6_0 0.00(0,0ms) 0.00(0,0ms) 0 438751.89 0.0785
DefaultCluster broker-b 0 192.168.0.200:10911 V4_6_0 0.00(0,0ms) 0.00(0,0ms) 0 438751.89 -1.0000
DefaultCluster broker-b 1 192.168.0.200:10921 V4_6_0 0.00(0,0ms) 0.00(0,0ms) 0 438751.89 0.0790
3.4 文件目录
/home/op/server/rocketmq
├── rocketmq-4.6.0
│ ├── lib
│ ├── bin
│ │ ├── runserver.sh
│ │ ├── runbroker.sh
│ │ ├── mqshutdown.sh
│ │ ├── mqadmin.sh
│ │ └── tools.sh
│ └── conf
│ ├── 2m-2s-async
│ │ ├── broker-a.properties
│ │ └── broker-a-s.properties
│ ├── logback_namesrv.xml
│ ├── logback_broker.xml
│ └── logback_tools.xml
│
├── store
│ ├── master
│ └── slave
└── logs
├── namesrv
├── broker
└── tools
3.5 停止RocketMQ
先停止broker再停止namesrv,或者使用kill命令也可以
> sh bin/mqshutdown broker
> sh bin/mqshutdown namesrv
3.6 搭建控制台
3.7 公网访问
服务器存在多网卡时(公网和私网),想通过公网来生产和消费消息,需要修改broker监听的IP,涉及配置项如下:
- brokerIP1:broker注册namesrv时使用的IP,这样生产者和消费者会使用此IP连接broker
- brokerIP2:当broker存在slave时,配置此项可让slave使用该IP同步数据。一般不用设置,使用私网IP,速度更快
- 注:namesrvAddr配置和其他启动命令均可使用上述配置,不用变更