一、环境准备
linux环境、64位 JDK 1.8+、RocketMQ环境包
官网:https://rocketmq.apache.org/zh/
二、服务器环境及规划
ip 角色 架构模式
10.0.0.22 nameserver1:9876、broker-master1:10911、broker-slave2:11011 Master1、Slave2
10.0.0.23 nameserver2:9876、broker-master2:10911、broker-slave1:11011 Master2、Slave1
2.1 开放端口
每个服务器需开放七个端口
9876 #namesrv
10911、10909、10912 #broker主节点
11011、11009、11012 #broker从节点
端口规则说明:
namesrv默认端口:9876
假设broker配置的 ListenPort 端口:10911
则vip 通道端口为:ListenPort - 2 = 10909
则HA 通道端口为: ListenPort + 1 = 10912
三、开始部署
3.1 做hosts解析(全部机器)
vim /etc/hosts
10.0.0.22 rocketmq-1
10.0.0.23 rocketmq-2
3.2 下载包(这里选择的4.9.3版本)
wget https://archive.apache.org/dist/rocketmq/4.9.3/rocketmq-all-4.9.3-bin-release.zip
3.3 解压软件包并配置环境变量(全部机器)
unzip rocketmq-all-4.9.3-bin-release.zip -d /usr/local/rocketmq/
vim /etc/profile
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-4.9.3
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH
source /etc/profile
3.4 修改配置
进入/usr/local/rocketmq/rocketmq-4.9.3/conf目录查看
2m-2s-async 目录为双master双slave异步复制配置目录
2m-2s-sync 目录为双master双slave同步双写配置目录
2m-noslave 目录为多master配置目录
这里我们只需要配置2m-2s-sync这个目录即可
10.0.0.22 服务器:broker配置
master1
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-a.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/master
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/master/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/master/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/master/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/master/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/master/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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
slave2
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-b-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/slave
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/slave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/slave/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/slave/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/slave/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/slave/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
10.0.0.23 服务器:broker配置
master2
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-b.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/master
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/master/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/master/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/master/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/master/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/master/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=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128
slave1
vim /usr/local/rocketmq/rocketmq-4.9.3/conf/2m-2s-sync/broker-a-s.properties
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=10.0.0.22:9876;10.0.0.23:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=11011
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketmq/slave
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/slave/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/slave/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/slave/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketmq/slave/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/slave/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
3.5 修改启动脚本(所有服务器)
原因:我启动的虚拟机的内存设置的是4G,而mq默认的JVM最小的堆内容是8G,太大了,不修改将无法启动。
vim /usr/local/rocketmq/rocketmq-4.9.3/bin/runserver.sh
修改如下:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m -Xmn128m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
vim /usr/local/rocketmq/rocketmq-4.9.3/bin/runbroker.sh
修改如下:
JAVA_OPT="${JAVA_OPT} -server -Xms256m -Xmx256m"
3.6 启动服务
创建日志目录
mkdir /usr/local/rocketmq/rocketmq-4.9.3/logs
启动nameserver (全部机器)
cd /usr/local/rocketmq/rocketmq-4.9.3/bin/
nohup sh mqnamesrv > /usr/local/rocketmq/rocketmq-4.9.3/logs/mqnamesrv.log 2>&1 &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/mqnamesrv.log
下面表示启动成功
启动broker
10.0.0.22机器
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a.log
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b-s.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b-s.log
10.0.0.23机器
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-b.log
nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties > /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a-s.log &
tail -f /usr/local/rocketmq/rocketmq-4.9.3/logs/broker-a-s.log
启动完成,通过jps查看java进程
[root@rocketmq-1 rocketmq-4.9.3]# jps
23635 BrokerStartup
23733 BrokerStartup
23038 NamesrvStartup
23823 Jps
关闭命令
停止服务的时候需要注意,要先停止broker,其次停止nameserver。
关闭broker服务 : sh /usr/local/rocketmq/rocketmq-4.9.3/bin/mqshutdown broker
关闭namesrv服务: sh /usr/local/rocketmq/rocketmq-4.9.3/bin/mqshutdown namesrv
四、安装可视化平台RocketMq-Dashboard
参考官方文档:https://rocketmq.apache.org/zh/docs/4.x/deployment/03Dashboard
4.1 安装docker,拉取 rocketmq-dashboard 镜像
docker pull apacherocketmq/rocketmq-dashboard:latest
4.2 docker 容器中运行rocketmq-dashboard
docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=10.0.0.22:9876;10.0.0.23:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest
namesrv.addr:port 替换为 rocketmq 中配置的 nameserver 地址:端口号
默认端口配置下,需开放端口号:控制台:8080;namesrv:9876;broker:10909、10911