centos8.0下安装rocketMq4.7+openJDK11.0以及broker启动失败问题排查

背景:rocketMQ4.7默认支持jdk1.8
环境:linux(centos8.0),rocketMQ4.7,openJDK11.0
首先更改rocketMQ启动脚本runbroker.sh,runserver.sh,tools.sh(目录:///mq/rocketmq-all-4.7.0-bin-release/bin):
主要涉及:CLASSPATH和JAVA_OPT的更改
1.runserver.sh更改:

#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}更改为:
export CLASSPATH=${BASE_DIR}/lib/rocketmq-namesrv-4.7.0.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

注释掉:

#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"

添加:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
**

2.runbroker.sh的更改:(注意内存根据实际情况调整)

#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}更改为:
export CLASSPATH=${BASE_DIR}/lib/rocketmq-broker-4.7.0.jar:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

注释掉:

#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"

添加:

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
JAVA_OPT="${JAVA_OPT} -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:${GC_LOG_DIR}/rmq_broker_gc_%p_%t.log"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:+AlwaysPreTouch"
JAVA_OPT="${JAVA_OPT} -XX:MaxDirectMemorySize=1g"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages -XX:-UseBiasedLocking"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

3.修改tools.sh(#为注释掉)

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xlog:gc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log"
#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"
$JAVA ${JAVA_OPT} $@

然后简单编写启动脚本并配置broker.conf:
start_mqbroker.sh:

#!/bin/bash
nohup sh ./bin/mqbroker -n localhost:9876  -c conf/broker.conf  >./logs/broker.out 2>&1 &

start_mqnamesrv.sh:

#!/bin/bash
nohup sh ./bin/mqnamesrv  >./logs/mqnamesrv.out 2>&1 &

**注:**内部启动过程举例:start_mqnamesrv.sh->./bin/mqnamesrv->runserver.sh;
修改
broker.conf:

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 自动注册Topic
autoCreateTopicEnable=true
# 修改为公网ip
brokerIP1=XX.XX.XX.XX
namesrvAddr=XXX.XXX.XXX.XXX:9876

注意:
autoCreateTopicEnable=true允许自动创建topic
*****可以手动修改/etc/profile导入环境变量:略(自行百度)
启动顺序:
start_mqnamesrv.sh-》start_mqbroker.sh查看日志看对否成功:
*logs/目录是自编写启动脚本里面自行创建的。
测试:
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

问题:broker无法启动。
1.查看broker.conf中是否设置了:brokerIP1
扩展:(注意此处)
在这里插入图片描述
2.排查设置并没有问题启动报错(自定义的logs中并没有明显报错信息):
查看:/root/logs/rocketmqlogs/broker.log

2020-7-15 13:11:11 INFO main - load /usr/rocketmq/store/config/consumerOffset.json OK
2020-7-15 13:11:11 INFO main - load /usr/rocketmq/store/config/consumerFilter.json OK
2020-7-15 13:11:11 INFO main - Try to start service thread:AllocateMappedFileService started:false lastThread:null
2020-7-15 13:11:11 INFO main - Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]
2020-7-15 13:11:11 INFO main - shutdown thread AllocateMappedFileService interrupt true
2020-7-15 13:11:11 INFO main - join thread AllocateMappedFileService elapsed time(ms) 5 90000
2020-7-15 13:11:11 INFO main - Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

就这些日志就是死活起不来:
解决:
一般第一次启动成功kill -9 方式停止后第二次启动失败
打开:/root下store删除,重试即可。
broker存储目录 默认为用户的主目录/store
注:

/store/commitlog 下的文件可以全部删除,如
-rw-rw-r– 1 search search 1073741824 Jul  1 14:11 00000000000000000000 
-rw-rw-r– 1 search search 1073741824 Jul  1 11:48 00000000001073741824
/store/config下的这四个文件可以全部删除,如: 
-rw-rw-r– 1 search search  636 Jul  1 14:12 consumerOffset.json 
-rw-rw-r– 1 search search  636 Jul  1 14:12 consumerOffset.json.bak 
-rw-rw-r– 1 search search   21 Jul  1 14:12 delayOffset.json 
-rw-rw-r– 1 search search   21 Jul  1 14:12 delayOffset.json.bak
/store/consumequeue下的子目录都可以删除,如: 
[search@QT-Q-0082 consumequeue]$ ll 
total 4 
drwxrwxr-x 5 search search 4096 Jul  1 11:58 DataChangeLog
/store/index下的子目录可以全部删除,如: 
-rw-rw-r– 1 search search 420000040 Jul  1 14:13 20150701114823005

*注意:此场景只适用于测试部署初次部署,生产环境切勿删除store文件,生产环境禁止使用kill -9 命令删除broker进程,使用bin/下的mqshutdown命令

后续:

生产环境问题后续更新

猜你喜欢

转载自blog.csdn.net/weixin_41546244/article/details/107813967