环境:centos7
版本:4.7.1–>4.9.7
部署架构:双主双从
(brocker-a、broker-a-s、btoker-b、broker-b-s)–>(brocker-c、broker-c-s、btoker-d、broker-d-s)
服务器信息:
192.168.88.80 –> broker-a –> brocker-c
192.168.88.81 –> broker-a-s –> broker-c-s
192.168.88.82 –> broker-b –> btoker-d
192.168.88.83 –> broker-b-s –> broker-d-s
升级步骤
1、rocketmq-4.7.1处于启动状态,上传rocketmq4.9.1(只上传安装包不启动)
2、配置文件修改
broker-c、broker-d,区别就只有brokerName和ip地址而已,还有要注意rocektmq_data的地址
brokerClusterName=DefaultCluster
brokerName=broker-c
brokerId=
0
namesrvAddr=
192.168
.
88.80
:
9876
;
192.168
.
88.82
:
9876
#本机地址
brokerIP1=
192.168
.
88.80
#配置跟brokerIP1一样,主节点才需要加
#从节点会连接主节点配置的brokerIP2进行同步
brokerIP2=
192.168
.
88.80
#表示Broker对外服务的监听端口
listenPort=
10911
#表示Master监听Slave请求的端口
haListenPort=
10912
#清除过期文件时间,默认凌晨
4
点
deleteWhen=
04
#文件过期时间,默认
72
小时
fileReservedTime=
72
#物理磁盘使用率阈值,默认
85
%
diskMaxUsedSpaceRatio=
75
#同步复制master
brokerRole=SYNC_MASTER
#异步刷盘
flushDiskType=ASYNC_FLUSH
#开启通过用户自定义属性进行消息过滤
enablePropertyFilter=
true
#关闭自动创建topic
autoCreateTopicEnable=
false
#自动创建topic的队列数量
defaultTopicQueueNums=
4
#这里不能变,因为数据地址还是原来的
#store存储路径
storePathRootDir=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1
#commitLog存储路径
storePathCommitLog=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1/commitlog
#消费队列的存储路径
storePathConsumeQueue=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1/index
#checkpoint文件存储路径
storeCheckpoint=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1/checkpoint
#异常中止文件存储路径
abortFile=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/master1/abort
#限制的消息大小为64M
maxMessageSize=
67108864
#同步超时时间 默认5s,单位毫秒
syncFlushTimeout=
30000
#发送线程池任务队列的等待时间,默认200ms
waitTimeMillsInSendQueue=
500
#写入线程池的数量,建议配置为cpu核数
sendMessageThreadPoolNums=
8
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=
true
#一次拉取允许的最大条数,默认是
32
maxTransferCountOnMessageInMemory=
128
#关闭通过堆外内存传输数据
transferMsgByHeap=
true
#HA主从同步传输的最大字节长度3M
haTransferBatchSize=
3145728
#Linux 环境开启Epoll IO模型
useEpollNativeSelector=
true
#消息堆积时当单次最大拉取消息量,默认
8
条
maxTransferCountOnMessageInDisk=
32
# IO线程池大小,建议配置为cpu核数
serverSelectorThreads=
8
# 工作线程大小,建议配置为cpu核数 *
2
serverWorkerThreads=
16
同理,broker-c-s和broker-d-s 区别就只有brokerName和ip地址而已,还有要注意rocektmq_data的地址
brokerClusterName=DefaultCluster
brokerName=broker-c
brokerId=
1
namesrvAddr=
192.168
.
88.80
:
9876
;
192.168
.
88.82
:
9876
# 本机地址
brokerIP1=
192.168
.
88.81
#brokerIP2=
192.168
.
88.81
#表示Broker对外服务的监听端口
listenPort=
10911
#表示Master监听Slave请求的端口
haListenPort=
10912
#清除过期文件时间,默认凌晨
4
点
deleteWhen=
04
#文件过期时间,默认
72
小时
fileReservedTime=
72
#物理磁盘使用率阈值,默认
85
%
diskMaxUsedSpaceRatio=
75
#broker从节点
brokerRole=SLAVE
#异步刷盘
flushDiskType=ASYNC_FLUSH
#开启通过用户自定义属性进行消息过滤
enablePropertyFilter=
true
#关闭自动创建topic
autoCreateTopicEnable=
false
#自动创建topic的队列数量
defaultTopicQueueNums=
4
#store存储路径
storePathRootDir=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1
#commitLog存储路径
storePathCommitLog=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1/commitlog
#消费队列的存储路径
storePathConsumeQueue=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1/index
#checkpoint文件存储路径
storeCheckpoint=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1/checkpoint
#异常中止文件存储路径
abortFile=/home/rocketmq-
4.7
.
1
/rocketmq_data/data/slave1/abort
#限制的消息大小为64M
maxMessageSize=
67108864
#同步超时时间 默认5s,单位毫秒
syncFlushTimeout=
30000
#发送线程池任务队列的等待时间,默认200ms
waitTimeMillsInSendQueue=
500
#写入线程池的数量,建议配置为cpu核数
sendMessageThreadPoolNums=
8
#发送消息是否使用可重入锁
useReentrantLockWhenPutMessage=
true
#一次拉取允许的最大条数,默认是
32
maxTransferCountOnMessageInMemory=
128
#关闭通过堆外内存传输数据
transferMsgByHeap=
true
#HA主从同步传输的最大字节长度3M
haTransferBatchSize=
3145728
#Linux 环境开启Epoll IO模型
useEpollNativeSelector=
true
#消息堆积时当单次最大拉取消息量,默认
8
条
maxTransferCountOnMessageInDisk=
32
# IO线程池大小,建议配置为cpu核数
serverSelectorThreads=
8
# 工作线程大小,建议配置为cpu核数 *
2
serverWorkerThreads=
16
4、日志文件路径更换
sed -i
's|${user.home}|/home/mq4.9|'
/home/rocketmq-
4.9
.
7
/conf/logback_broker.xml
sed -i
's|${user.home}|/home/mq4.9|'
/home/rocketmq-
4.9
.
7
/conf/logback_namesrv.xml
sed -i
's|${user.home}|/home/mq4.9|'
/home/rocketmq-
4.9
.
7
/conf/logback_tools.xml
上边的命令用于批量替换 RocketMQ 配置文件中 ${user.home}
变量为 /home/mq4.9
路径:
这三条命令分别处理 RocketMQ 4.9.7 版本的三个日志配置文件:
logback_broker.xml
– Broker 服务的日志配置logback_namesrv.xml
– NameServer 服务的日志配置logback_tools.xml
– 相关工具的日志配置
替换的作用是将默认使用用户主目录(${user.home}
)的日志路径统一修改为 /home/mq4.9
,这样可以集中管理 RocketMQ 的日志文件,避免日志分散在不同用户的主目录下。
5、数据备份
备份rocketmq_data/data数据,包括store、commitLog、消费队列、消息索引、checkpoint文件、异常中止文件等数据
cp -r /home/rocketmq-4.7.1/rocketmq_data /home/rocketmq-4.7.1/rocketmq_data.bak
所以在部署rocketmq时,数据文件和日志文件建议单独部署在rocketmq安装目录之外,便于数据迁移,升级、扩容等操作。
注意:备份前,需要保证所有消息队列被消费完
6、开始升级
首先关停4.7的一台namesrv,启动4.9的一台namesrv,观察broker状态,再关闭4.7的另一台namesrv,启动4.9的另一台namesrv
启停broker
(1)停止4.7.1的broker-a,启动4.9.7的broker-c,观察4.9.7的broker是否正常;
(2)停止4.7.1的broker-a-s,启动4.9.7的broker-c-s,观察4.9.7的broker是否正常;
(3)停止4.7.1的broker-b,启动4.9.7的broker-d,观察4.9.7的broker是否正常;
(4)停止4.7.1的broker-b-s,启动4.9.7的broker-d-s,观察4.9.7的broker是否正常;
已经重启完成后观察业务及应用是否正常
(1)检查是否有错误日志
(2)登录web页面检查各个模块功能是否正常
(3)通过页面发送消息是否正常
(4)通过接口发送消息是否正常
查看日志: