RockerMQ简介

RocektMQ是阿里巴巴在2012年开源的一个纯java、分布式、队列模型的第三代消息中间件,不仅在传统高频交易链路有着低延迟的出色表现,在实时计算等大数据领域也有着不错的吞吐。


2016年11月11号,双十一大促见证了RocketMQ低延迟存储架构的成功试水,99.996%的延迟落在了10ms以内,极个别由于GC引发的停顿在50ms以内,其高性能、低延时和高可靠的特性承载了近年来双十一17万笔/秒的交易峰值,在整个生产链路上都有着稳定和出色的表现。其在同年捐赠给Apache后正式进入孵化期。并于2017年9月RocketMQ正式从Apache社区正式毕业,成为Apache顶级项目。


服务器配置表

ip地址部署角色模式
192.168.1.20Nameserver1,Brokerserver1Master1
192.168.1.20Nameserver1,Brokerserver1Master2-Slave
192.168.1.21Nameserver2,Brokerserver2Master2
192.168.1.21Nameserver2,Brokerserver2Master1-Slave


系统部署架构图

RocketMQ4.5.1两主两从集群部署_rocketmq


分别修改20 和21的服务器hosts 文件

$sudo vim /etc/hosts
IP                NAME
192.168.1.20      nameserver1
192.168.1.20      master1
192.168.1.20      master1-slave1
192.168.1.21      nameserver2
192.168.1.21      master2
192.168.1.21      master2-slave2
下载官方源码
下载地址 
$unzip rocketmq-all-4.5.1-bin-release.zip -d /workspace/

分别在20和21两台服务器上创建持久化存储目录
Msater 目录设置
mkdir /data/rocketMQ-2m2s/store
mkdir /hdata/rocketMQ-2m2s/store/commitlog
mkdir /data/rocketMQ-2m2s/store/consumequeue
mkdir /data/rocketMQ-2m2s/store/index

Slave目录设置
mkdir /data/rocketMQ-2m2s/store-s
mkdir /hdata/rocketMQ-2m2s/store-s/commitlog
mkdir /data/rocketMQ-2m2s/store-s/consumequeue
mkdir /data/rocketMQ-2m2s/store-s/index

RocketMQ配置文件

20服务器配置

sudo vim /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-a.properties

sudo vim /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-b-s.properties


21服务器配置

sudo vim /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-b.properties

sudo vim /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-a-s.properties


20服务器 broker-a.properties配置文件


#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=192.168.1.20:9876;192.168.1.21:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10911

haListenPort=10912

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=18

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/rocketMQ-2m2s/store

#commitLog 存储路径

storePathCommitLog=/data/rocketMQ-2m2s/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/rocketMQ-2m2s/store/consumequeue

#消息索引存储路径

storePathIndex=/data/rocketMQ-2m2s/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/rocketMQ-2m2s/store/checkpoint

#abort 文件存储路径

abortFile=/data/rocketMQ-2m2s/store/abort

#限制的消息大小

maxMessageSize=65536

#flushCommitLogLeastPages=4

#flushConsumeQueueLeastPages=2

#flushCommitLogThoroughInterval=10000

#flushConsumeQueueThoroughInterval=60000

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=SYNC_MASTER

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=192.168.1.20


21服务器 broker-a-s.properties配置文件


#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-a

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=192.168.1.20:9876;192.168.1.21:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10923

haListenPort=10924

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=18

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/rocketMQ-2m2s/store-s

#commitLog 存储路径

storePathCommitLog=/data/rocketMQ-2m2s/store-s/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/rocketMQ-2m2s/store-s/consumequeue

#消息索引存储路径

storePathIndex=/data/rocketMQ-2m2s/store-s/index

#checkpoint 文件存储路径

storeCheckpoint=/data/rocketMQ-2m2s/store-s/checkpoint

#abort 文件存储路径

abortFile=/data/rocketMQ-2m2s/store-s/abort

#限制的消息大小

maxMessageSize=65536

#flushCommitLogLeastPages=4

#flushConsumeQueueLeastPages=2

#flushConsumeQueueLeastPages=2#flushCommitLogThoroughInterval=10000

#flushConsumeQueueThoroughInterval=60000

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=SLAVE

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=192.168.1.21



21服务器 broker-b.properties配置文件


#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=0

#nameServer地址,分号分割

namesrvAddr=192.168.1.20:9876;192.168.1.21:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10911

haListenPort=10912

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=18

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/rocketMQ-2m2s/store

#commitLog 存储路径

storePathCommitLog=/data/rocketMQ-2m2s/store/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/datarocketMQ-2m2s/store/consumequeue

#消息索引存储路径

storePathIndex=/data/rocketMQ-2m2s/store/index

#checkpoint 文件存储路径

storeCheckpoint=/data/rocketMQ-2m2s/store/checkpoint

#abort 文件存储路径

abortFile=/data/rocketMQ-2m2s/store/abort

#限制的消息大小

maxMessageSize=65536

#flushCommitLogLeastPages=4

#flushConsumeQueueLeastPages=2

#flushCommitLogThoroughInterval=10000

#flushConsumeQueueThoroughInterval=60000

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=SYNC_MASTER

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=192.168.1.21



20服务器 broker-b-s.properties配置文件

#所属集群名字

brokerClusterName=rocketmq-cluster

#broker名字,注意此处不同的配置文件填写的不一样

brokerName=broker-b

#0 表示 Master,>0 表示 Slave

brokerId=1

#nameServer地址,分号分割

namesrvAddr=192.168.1.20:9876;192.168.1.21:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数

defaultTopicQueueNums=4

#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭

autoCreateTopicEnable=true

#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭

autoCreateSubscriptionGroup=true

#Broker 对外服务的监听端口

listenPort=10923

haListenPort=10924

#删除文件时间点,默认凌晨 4点

deleteWhen=04

#文件保留时间,默认 48 小时

fileReservedTime=18

#commitLog每个文件的大小默认1G

mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整

mapedFileSizeConsumeQueue=300000

#destroyMapedFileIntervalForcibly=120000

#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间

diskMaxUsedSpaceRatio=88

#存储路径

storePathRootDir=/data/rocketMQ-2m2s/store-s

#commitLog 存储路径

storePathCommitLog=/data/rocketMQ-2m2s/store-s/commitlog

#消费队列存储路径存储路径

storePathConsumeQueue=/data/rocketMQ-2m2s/store-s/consumequeue

#消息索引存储路径

storePathIndex=/data/rocketMQ-2m2s/store-s/index

#checkpoint 文件存储路径

storeCheckpoint=/home/rocketMQ/ZHF/rocketMQ-2m2s/store-s/checkpoint

#abort 文件存储路径

abortFile=/data/rocketMQ-2m2s/store-s/abort

#限制的消息大小

maxMessageSize=65536

#flushCommitLogLeastPages=4

#flushConsumeQueueLeastPages=2

#flushCommitLogThoroughInterval=10000

#flushConsumeQueueThoroughInterval=60000

#Broker 的角色

#- ASYNC_MASTER 异步复制Master

#- SYNC_MASTER 同步双写Master

#- SLAVE

brokerRole=SLAVE

#刷盘方式

#- ASYNC_FLUSH 异步刷盘

#- SYNC_FLUSH 同步刷盘

flushDiskType=ASYNC_FLUSH

#checkTransactionMessageEnable=false

#发消息线程池数量

sendMessageThreadPoolNums=128

#拉消息线程池数量

pullMessageThreadPoolNums=128

#打开锁

useReentrantLockWhenPutMessage=true

waitTimeMillsInSendQueue=3000

#强制指定本机IP,需要根据每台机器进行修改。官方介绍可为空,系统默认自动识别,但多网卡时IP地址可能读取错误

brokerIP1=192.168.1.20


修改日志配置文件


$cd /workspace/rocketmq-all-4.5.1-bin-release/conf

$ vim logback_namesrv.xml 

$ vim logback_namesrv.xml

$mkdir /data/logs

按图将日志指定的对应的目录中

RocketMQ4.5.1两主两从集群部署_rocketmq_02

启动参数设置

RocketMQ启动文件位于/workspace/rocketmq-all-4.5.1-bin-release/bin/目录下,Linux中nameserver启动文件为:mqnamesrv,broker启动文件为:mqbroker,mqnamesrv和mqbroker启动文件分别调用了runserver.sh和runbroker.sh文件,这两个文件分别设置了nameserver和broker的启动内存,目前内存启动参数分别为nameserver启动内存4G,最大内存4G,新生代2G,broker启动内存8G,最大内存8G,新生代4G。


启动Nameserver

分别启动20、21的Nameserver

cd /workspace/rocketmq-all-4.5.1-bin-release/bin/

nohup sh mqnamesrv &


启动Broker

20上Master启动:

nohup sh mqbroker -c /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-a.properties &

21上Master启动:

nohup sh mqbroker -c /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-b.properties &

20上Slave启动:

nohup sh mqbroker -c /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-b-s.properties &

21上Slave启动:

nohup sh mqbroker -c /workspace/rocketmq-all-4.5.1-bin-release/conf/2m-2s-async/broker-a-s.properties &

至此,Nameserver、Broker启动完成,可以用jobs命令查看当前运行进程,如下是服务端相关shutdown,即在bin目录下:

sh mqshutdown namesrv

sh mqshutdown broker


RocketMQ监控平台部署

Apache版的RocketMQ管理界面部署工具可以从github上下载源码,地址:https://github.com/apache/rocketmq-externals,部署流程如下


修改配置文件,关联rocketMQ集群到管理界面

然后编译打包成rocketmq-console-ng-1.0.0.jar 上传到服务器

首先解压并进入解压后rockemq-externals-master目录rocketmq-externals-master/rocketmq-externals-master/rocketmq-console/src/main/resources,修改目录下application.properties配置文件

rocketmq.config.nameservAddr=192.168.1.20:9876,192.168.1.21:9876

rocketmq.config.dataPath=/data/rocketMQ-2m2s

设置登陆权限

$vim conf/application.properties

RocketMQ4.5.1两主两从集群部署_rocketmq_03

$ vim /data/rocketMQ-2m2s/users.properties 添加账号密码

RocketMQ4.5.1两主两从集群部署_rocketmq_04


运行jar包

nohup java -jar rocketmq-console-ng-1.0.0.jar -Xms512m -Xmx512m -Xmn256m -XX:MaxMetaspaceSize=64m -XX:MetaspaceSize=64m > /dev/null &

访问管理界面

浏览器输入:http://192.168.1.20:8080/回车显示监控界面


RocketMQ4.5.1两主两从集群部署_rocketmq_05

输入账号密码就可以登陆了

RocketMQ4.5.1两主两从集群部署_rocketmq_06