- 问题描述
- 安装namesrv
- 修改broker连接地址
- 重启broker步骤
有四个cluster,每个集群上broker组都是一主一从结构,每个cluster上有四组broker,有三台namesrv服务,现在需要在不影响线上业务的情况下摘除旧的namesrv并将所有broker注册至新的三台namesrv上。
安装namesrv下载包:
wget https://archive.apache.org/dist/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip
解压
unzip rocketmq-all-4.8.0-bin-release.zip
进入bin目录下启动
nohup sh mqnamesrv >> /applogs/namesrv/namesrvrun.log 2>&1 &
这里可能会有个坑,我试了七台服务器都有这个问题,在使用./mqadmin指令和启动namesrv指令时会提示找不到Java environment,需要手动修改tools.sh 文件内内容
JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${base_DIR}/lib:${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext"
最后面加上Java全路径:[你的Java路径]/lib/ext",记得用:分隔
验证namesrv是否启动成功
$ tail -f ~/logs/rocketmqlogs/namesrv.log The Name Server boot success...修改broker连接地址
为了不影响线上业务,每次只暂停一组broker,修改配置文件之后重启该broker即可使其连接新namesrv
这里发现rocketMQ自身的一个问题,理论上可以使用指令updateBrokerConfig修改broker配置,之后对broker进行热更新,但是更新无效,后来我在rocketMQ GitHub closed issue里面找到相关回答:
https://github.com/apache/rocketmq/issues/1457
后来我在测试环境把4.4.0-4.9.1版本都试过,同样不好使。所以还是老老实实重启吧。
需要先暂停broker组的写入,待InTPS归零之后表明已没有客户端请求访问到当前broker
./mqadmin wipeWritePerm -b [brokerName] -n [namesrvAddr]
注意这里-b后面是brokername,会同时把主从节点都从namesrv标记禁写,如果这时候有主从同步,从节点的TPS是不会归零的。
把当前broker从所有旧的namesrv禁写之后大概要等待20分钟左右。禁写的broker由于diff及retry的原因TPS很难降为0(尤其是客户端有太多积压量的时候),看到TPS明显下降且稳定之后就可以停止broker了。
这里推荐使用rocketmq-exporter配合Prometheus来监控TPS下降。比刷指令快多了。
TPS没了之后就可以对broker进行一个停止
sh mqshutdown broker
这个指令是关闭当前机器上所有的broker,对于有些一台机器安装多个broker节点的要谨慎使用,不如手动kill。
重启broker:
先修改broker配置文件 ${ROCKET_HOME}/conf/broker.conf
namesrvAddr=XXX (把新建的namesrv加上)
启动broker
nohup sh ${ROCKET_HOME/}bin/mqbroker -c ${ROCKET_HOME}/conf/broker10-s.conf &
把${ROCKET_HOME}换成你的broker安装地址就行
检查启动成功
The broker[brokerName brokerIP] boot success. serializeType=JSON and name server is [namesrvAddr]
然后稍等片刻,去新的namesrv查一下
./mqadmin clusterList -n [namesrvAddr]
结果和之前一样,表明迁移成功,在消费低谷时段进行迁移,全程服务未积压报警。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)