Linux RocketMQ双主双从,Centos7 RocketMQ4集群(双主双从)

Linux RocketMQ双主双从,Centos7 RocketMQ4集群(双主双从)

================================

©Copyright 蕃薯耀 2020-12-28

https://www.cnblogs.com/fanshuyao/

一、Linux RocketMQ单机版安装配置和使用

Linux RocketMQ安装配置和使用,Centos7 RocketMQ4安装配置,见:

https://www.cnblogs.com/fanshuyao/p/14200170.html

二、RocketMQ集群搭建官网中文说明文档

#集群
https://rocketmq-1.gitbook.io/rocketmq-connector/quick-start/qian-qi-zhun-bei/ji-qun-huan-jing
#其它
https://rocketmq-1.gitbook.io/rocketmq-connector/

三、RocketMQ集群说明

1、多Master模式
一个集群无Slave,全是Master,例如2个Master或者3个Master,这种模式的优缺点如下:
优点:配置简单,单个Master宕机或重启维护对应用无影响,在磁盘配置为RAID10时,即使机器宕机不可恢复情况下,由于RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢),性能最高;
缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响。

2、多Master多Slave模式-异步复制
每个Master配置一个Slave,有多对Master-Slave,HA采用异步复制方式,主备有短暂消息延迟(毫秒级),这种模式的优缺点如下:
优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,同时Master宕机后,消费者仍然可以从Slave消费,而且此过程对应用透明,不需要人工干预,性能同多Master模式几乎一样;
缺点:Master宕机,磁盘损坏情况下会丢失少量消息。

3、多Master多Slave模式-同步双写
每个Master配置一个Slave,有多对Master-Slave,HA采用同步双写方式,即只有主备都写成功,才向应用返回成功,这种模式的优缺点如下:
优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。

四、默认端口

nameserver默认使用9876端口
master默认使用10911端口
slave默认使用11011端口

正式开始:

五、RocketMQ双主双从(同步),配置文件复制及说明:

1、创建自定义的配置文件目录:

mkdir -p /java/rocketmq4/myconf

复制双主双从(同步)配置文件:

cp /java/rocketmq4/conf/2m-2s-sync/* /java/rocketmq4/myconf

回到自定义配置文件目录,查看复制的配置文件:

[root@host_132 2m-2s-sync]# cd /java/rocketmq4/myconf
[root@host_132 myconf]# ll
总用量 16
-rw-r--r--. 1 root root 928 12月 25 09:53 broker-a.properties
-rw-r--r--. 1 root root 922 12月 25 09:53 broker-a-s.properties
-rw-r--r--. 1 root root 928 12月 25 09:53 broker-b.properties
-rw-r--r--. 1 root root 922 12月 25 09:53 broker-b-s.properties

2、集群在2台服务器进行(最好使用4台,不然后面配置文件目录冲突或者端口冲突,总有一个broker启动失败,很折腾人)
192.168.170.128:部署broker-a和broker-b-s
192.168.170.129:部署broker-b和broker-a-s

broker-a:为主1

broker-a-s:为主1的从

broker-b:为主2

broker-b-s:为主2的从

3、RocketMQ如何区分主从(提前说明,可忽略,后面配置文件修改需要用到):

brokerClusterName:为集群的名称,名称相同的表示同一个集群,无论是主机还是从机,都要设置成一样的。

brokerClusterName=myRocketMQ

brokerName:主从配对,相同名称的broker才能做主从设置

brokerName=broker-a

brokerId:用于标识主从关系,0为主,其他大于0的为从(不能小于0)。

一般master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。

#Master节点设置
brokerId=0

#Slave节点设置
#brokerId=1

六、RocketMQ双主双从(同步),备份日志文件及修改存放目录(两个服务器都要修改):

修改前,先备份

cp /java/rocketmq4/conf/logback_broker.xml /java/rocketmq4/conf/logback_broker.xml.bak
cp /java/rocketmq4/conf/logback_namesrv.xml /java/rocketmq4/conf/logback_namesrv.xml.bak
cp /java/rocketmq4/conf/logback_tools.xml /java/rocketmq4/conf/logback_tools.xml.bak

修改日志的文件存放位置:

sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_broker.xml 
sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_namesrv.xml
sed -i "s/${user.home}//java/rocketmq4/g" /java/rocketmq4/conf/logback_tools.xml

修改后的日志存放位置:

/java/rocketmq4/logs/rocketmqlogs

七、RocketMQ双主双从(同步),配置文件修改:

服务器1(192.168.170.128)的配置:

1、删除192.168.170.128无用的配置

[root@host_132 myconf]# rm -f broker-a-s.properties
[root@host_132 myconf]# rm -f broker-b.properties 
[root@host_132 myconf]# ll
总用量 8
-rw-r--r--. 1 root root 928 12月 25 09:53 broker-a.properties
-rw-r--r--. 1 root root 922 12月 25 09:53 broker-b-s.properties

2、创建各种文件存储路径,放master:

mkdir -p /java/rocketmq4/master/store/
mkdir -p /java/rocketmq4/master/store/commitlog
mkdir -p /java/rocketmq4/master/store/consumequeue
mkdir -p /java/rocketmq4/master/store/index

因为在同一个服务器要启动两个broker,区分一个主从配置文件的文件夹,slave放在/slave(不然文件冲突,会导致broker启动失败)

mkdir -p /java/rocketmq4/slave/store/
mkdir -p /java/rocketmq4/slave/store/commitlog
mkdir -p /java/rocketmq4/slave/store/consumequeue
mkdir -p /java/rocketmq4/slave/store/index

3、broker-a.properties配置文件内容:

位置:/java/rocketmq4/myconf/broker-a.properties

需要特别注意的配置项(主从在某些配置项存在不同的配置):

brokerClusterName:集群的名称

brokerName:broker的名称,主从的名称是一样的

brokerId:区分主从,0表示是主机,1表示是从机(大于0都是从机,可以设置2、3)

namesrvAddr:NameServer的服务地址,需要修改自己的

listenPort:监听的端口,如果一台服务启动两个broker或者以上,请一定要修改该端口

storePathRootDir:各类文件的存储根路径,这个也要特别注意,如果一台服务启动两个broker或者以上,请一定要修改不同的目录,而且要先创建相应的目录,不然文件冲突,导致某一个broker一直启动失败

brokerRole:broker的角色,区分主、从、主异步、主同步

flushDiskType:刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)

配置的内容:

#broker集群名称,用于划分broker
brokerClusterName=myRocketMQ
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-a
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0
#Slave节点设置
#brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启,生产需保持关闭
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=10911
#未消费的持久化消息清理时间点,默认是凌晨4点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
fileReservedTime=72
#单个commitLog文件的大小限制(单位:字节),默认是1G
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/java/rocketmq4/master/store
#commitLog文件存储路径
storePathCommitLog=/java/rocketmq4/master/store/commitlog
#消费队列文件存储路径
storePathConsumeQueue=/java/rocketmq4/master/store/consumequeue
#消息索引文件存储路径
storePathIndex=/java/rocketmq4/master/store/index
#checkpoint文件存储路径
storeCheckpoint=/java/rocketmq4/master/store/checkpoint
#abort文件存储路径
abortFile=/java/rocketmq4/master/store/abort

#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=SYNC_MASTER
#Slave节点设置
#brokerRole=SLAVE
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

4、broker-b-s.properties配置文件内容(部署在同一台服务器,需要修改成不同的端口):11011

文件位置:/java/rocketmq4/myconf/broker-b-s.properties

和主机不同的配置项:

brokerName

brokerId

listenPort

storePathRootDir

brokerRole

配置的内容:

#broker集群名称,用于划分broker
brokerClusterName=myRocketMQ
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-b
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Slave节点设置
brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启,生产需保持关闭
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=11011
#未消费的持久化消息清理时间点,默认是凌晨4点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
fileReservedTime=72
#单个commitLog文件的大小限制(单位:字节),默认是1G
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/java/rocketmq4/slave/store
#commitLog文件存储路径
storePathCommitLog=/java/rocketmq4/slave/store/commitlog
#消费队列文件存储路径
storePathConsumeQueue=/java/rocketmq4/slave/store/consumequeue
#消息索引文件存储路径
storePathIndex=/java/rocketmq4/slave/store/index
#storeCheckpoint文件存储路径
storeCheckpoint=/java/rocketmq4/slave/store/checkpoint
#abortFile文件存储路径
abortFile=/java/rocketmq4/slave/store/abort

#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#Slave节点设置
brokerRole=SLAVE
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

服务器2(192.168.170.129)的配置:

1、删除192.168.170.129无用的配置

[root@host_132 myconf]# rm -f broker-a.properties
[root@host_132 myconf]# rm -f broker-b-s.properties 
[root@host_132 myconf]# 
[root@host_132 myconf]# ll
总用量 8
-rw-r--r--. 1 root root 922 12月 25 10:39 broker-a-s.properties
-rw-r--r--. 1 root root 928 12月 25 10:39 broker-b.properties

2、broker-b.properties配置文件内容:

文件路径:/java/rocketmq4/myconf/broker-b.properties

配置内容:

#broker集群名称,用于划分broker
brokerClusterName=myRocketMQ
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-b
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Master节点设置
brokerId=0
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启,生产需保持关闭
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=10911
#未消费的持久化消息清理时间点,默认是凌晨4点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
fileReservedTime=72
#单个commitLog文件的大小限制(单位:字节),默认是1G
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/java/rocketmq4/master/store
#commitLog文件存储路径
storePathCommitLog=/java/rocketmq4/master/store/commitlog
#消费队列文件存储路径
storePathConsumeQueue=/java/rocketmq4/master/store/consumequeue
#消息索引文件存储路径
storePathIndex=/java/rocketmq4/master/store/index
#checkpoint文件存储路径
storeCheckpoint=/java/rocketmq4/master/store/checkpoint
#abort文件存储路径
abortFile=/java/rocketmq4/master/store/abort

#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#broker角色(SYNC_MASTER:同步双写Master、ASYNC_MASTER:异步复制Master、SLAVE:Slave)
brokerRole=SYNC_MASTER
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

3、broker-a-s.properties配置文件内容:

文件路径:/java/rocketmq4/myconf/broker-a-s.properties

配置内容:

#broker集群名称,用于划分broker
brokerClusterName=myRocketMQ
#broker名称,用于主从配对,相同名称的broker才能做主从设置
brokerName=broker-a
#用于标识主从关系,0为主,其他大于0的为从(不能小于0)master设置0,slave设置1。Master角色的Broker支持读和写,Slave角色的Broker仅支持读,也就是Producer只能和Master角色的Broker连接写人消息:Consumer可以连接Master角色的Broker,也可以连接Slave角色的Broker来读取消息。
#Slave节点设置
brokerId=1
#name server服务器地址及端口,可以是多个,分号隔开
namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
#创建topic时,若未指定topic下的队列数,则取该默认值作为默认队列数
defaultTopicQueueNums=8
#是否自动创建默认topic,生产需保持关闭
autoCreateTopicEnable=true
#是否自动创建topic的订阅组,默认开启,生产需保持关闭
autoCreateSubscriptionGroup=true
#broker服务监听端口
listenPort=11011
#未消费的持久化消息清理时间点,默认是凌晨4点
deleteWhen=04
#持久化消息保存周期(单位:小时),超过该周期将被清理,默认是48小时
fileReservedTime=72
#单个commitLog文件的大小限制(单位:字节),默认是1G
mapedFileSizeCommitLog=1073741824
#单个consumeQueue大小限制(存储的消息条数 * 每条消息的索引大小20),默认存30W条
mapedFileSizeConsumeQueue=8000000
#存储使用率阀值,当使用率超过阀值时,将拒绝发送消息请求
diskMaxUsedSpaceRatio=88
#持久化消息存储根路径
storePathRootDir=/java/rocketmq4/slave/store
#commitLog文件存储路径
storePathCommitLog=/java/rocketmq4/slave/store/commitlog
#消费队列文件存储路径
storePathConsumeQueue=/java/rocketmq4/slave/store/consumequeue
#消息索引文件存储路径
storePathIndex=/java/rocketmq4/slave/store/index
#storeCheckpoint文件存储路径
storeCheckpoint=/java/rocketmq4/slave/store/checkpoint
#abortFile文件存储路径
abortFile=/java/rocketmq4/slave/store/abort

#最大消息大小限制(单位:字节)
maxMessageSize=65536
#commitLog最少刷盘page数
flushCommitLogLeastPages=4
#consumeQueue最少刷盘page数
flushConsumeQueueLeastPages=2
#commitLog刷盘间隔时间
flushCommitLogThoroughInterval=10000
#consumeQueue刷盘间隔时间
flushConsumeQueueThoroughInterval=60000
#处理消息发送线程池大小
sendMessageThreadPoolNums=128
#处理消息拉取线程池大小
pullMessageThreadPoolNums=128
#Slave节点设置
brokerRole=SLAVE
#刷盘方式(ASYNC_FLUSH:异步刷盘、SYNC_FLUSH:同步刷盘)
flushDiskType=ASYNC_FLUSH

七、RocketMQ双主双从(同步),启动测试:

1、先在两台服务器分别启动nameServer

nohup sh mqnamesrv &

2、在【192.168.170.128】启动master-a和broker-b-s(&符号表示后台运行)
启动master-a:

nohup sh mqbroker -c /java/rocketmq4/myconf/broker-a.properties &

启动broker-b-s:

nohup sh mqbroker -c /java/rocketmq4/myconf/broker-b-s.properties &

查看进程:

ps -ef | grep BrokerStartup

查看日志文件:

tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log

3、在【192.168.170.129】启动master-b和broker-a-s
启动master-b:

nohup sh mqbroker -c /java/rocketmq4/myconf/broker-b.properties &


启动broker-a-s:

nohup sh mqbroker -c /java/rocketmq4/myconf/broker-a-s.properties &

查看集群信息,192.168.170.128:9876 为nameServer

sh mqadmin clusterList -n 192.168.170.128:9876

查看集群信息结果:

[root@host_132 store]# sh mqadmin  clusterList -n 192.168.170.128:9876 
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
myRocketMQ        broker-a                0     192.168.170.128:10911  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.4031
myRocketMQ        broker-a                1     192.168.170.129:11011  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.3966
myRocketMQ        broker-b                0     192.168.170.129:10911  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.3966
myRocketMQ        broker-b                1     192.168.170.128:11011  V4_8_0                   0.00(0,0ms)         0.00(0,0ms)          0 446914.70 0.4031

八、RocketMQ双主双从(同步),关闭rocketMQ

sh mqshutdown broker
sh mqshutdown namesrv

九、RocketMQ双主双从(同步),启动失败问题解决

查看broker启动失败的错误日志(此处是修改了日志路径的,root用户默认是在:/root/logs/rocketmqlogs/broker.log):

tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log

1、RocketMQ Broker端口和目录冲突导致启动失败问题解决

Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]

Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

详细错误内容:

[root@host_132 myconf]# tail -f /java/rocketmq4/logs/rocketmqlogs/broker.log
2020-12-25 16:05:30 INFO main - dLegerGroup=
2020-12-25 16:05:30 INFO main - dLegerPeers=
2020-12-25 16:05:30 INFO main - dLegerSelfId=
2020-12-25 16:05:30 INFO main - preferredLeaderId=
2020-12-25 16:05:30 INFO main - isEnableBatchPush=false
2020-12-25 16:05:30 INFO main - Try to start service thread:AllocateMappedFileService started:false lastThread:null
2020-12-25 16:05:30 INFO main - Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]
2020-12-25 16:05:30 INFO main - shutdown thread AllocateMappedFileService interrupt true
2020-12-25 16:05:30 INFO main - join thread AllocateMappedFileService elapsed time(ms) 7 90000
2020-12-25 16:05:30 INFO main - Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

错误点1:配置文件

双主双从中,如果同一个服务器部署启动了2个broker,配置文件需要注意修改的地方:

#broker服务监听端口,同一个服务器中,主从的端口不能一样
listenPort=11011

#持久化消息存储根路径,同一个服务器中,主从的端口不能一样
storePathRootDir=/java/rocketmq4/slave/store

错误点2:产生了lock锁定

由于第一次启动失败,导致产生相应的lock文件,所以需要清除之前产生的文件(注意:生产环境不能这样操作)

如果日志存放路径没有修改,则删除:

root用户在/root目录下,其他用户在/home目录

rm -rf /root/store/*

如果在多台服务器,分别有主从配置目录,请一定要仔细全部删除,然后重新启动。

rm -rf /java/rocketmq4/master/store/*

rm -rf /java/rocketmq4/slave/store/*

另外需要注意的是,不使用kill -9 pid的方式结束进程,因为启动时产生了lock文件,这样操作可能导致下次启动失败。

而是使用命令进行关闭:

sh mqshutdown broker

sh mqshutdown namesrv

错误点3:特别需要注意:

 之前创建相关配置目录时,创建了很多目录,导致broker一直启动失败,而且没有明确的错误,只提示:

Try to shutdown service thread:AllocateMappedFileService started:true lastThread:Thread[AllocateMappedFileService,5,main]

Try to shutdown service thread:PullRequestHoldService started:false lastThread:null

mkdir -p /java/rocketmq4/master/store
mkdir -p /java/rocketmq4/master/store/commitlog
mkdir -p /java/rocketmq4/master/store/consumequeue
mkdir -p /java/rocketmq4/master/store/index
mkdir -p /java/rocketmq4/master/store/checkpoint
mkdir -p /java/rocketmq4/master/store/abort

最后取消了相关文件的配置,查看store,有些配置是文件来的:

[root@host_132 store]# ll
总用量 12
-rw-r--r--. 1 root root    0 12月 29 10:33 abort
-rw-r--r--. 1 root root 4096 12月 29 10:33 checkpoint
drwxr-xr-x. 2 root root    6 12月 29 10:32 commitlog
drwxr-xr-x. 2 root root  193 12月 29 10:33 config
-rw-r--r--. 1 root root    4 12月 29 10:33 lock

问题原因:abort、checkpoint是文件来的,但创建成了目录,导致一直启动失败,这2个文件系统会自动创建。

commitlog、consumequeue、index是目录,config是目录,但config自动创建的。

启动后,如果提示consumequeue不存在:

Error when measuring disk space usage, file doesn't exist on this path: /java/rocketmq4/master/store/consumequeue

 可以直接创建一个文件夹解决报错:

mkdir -p /java/rocketmq4/master/store/consumequeue

consumequeue这个是目录,千万不要创建成文件类型,不然后面可能报RocketMQ硬盘满了的错误:the broker's disk is full

Caused by: org.apache.rocketmq.client.exception.MQBrokerException: CODE: 14 DESC:
service not available now. It may be caused by one of the following reasons:
the broker's disk is full [CL: 0.41 CQ: 0.41 INDEX: 0.41], messages are put to the slave, message store has been shut down, etc.

2、、RocketMQ 默认配置文件内存过大,导致启动失败问题解决

见:https://www.cnblogs.com/fanshuyao/p/14200170.html

十、rocketmq-console安装和使用

rocketmq-console是RocketMQ的运行监控管理系统

1、下载地址:rocketmq-externals-rocketmq-console-1.0.0.zip

https://github.com/apache/rocketmq-externals/releases

源代码地址:

https://github.com/apache/rocketmq-externals

千万不要下载最新的源码运行,因为会报错:、

最版本的代码下载下来会报错:

java.lang.IllegalStateException: defaultMQAdminExt should be init before you get this
at org.apache.rocketmq.console.service.client.MQAdminInstance.threadLocalMQAdminExt(MQAdminInstance.java:39)
at org.apache.rocketmq.console.service.client.MQAdminExtImpl.examineBrokerClusterInfo(MQAdminExtImpl.java:204)
at org.apache.rocketmq.console.task.DashboardCollectTask.collectBroker(DashboardCollectTask.java:170)

2、配置荐修改:

application.properties

server.port=4000
rocketmq.config.namesrvAddr=192.168.170.128:9876;192.168.170.129:9876
#修改成windows的目录,在eclipse运行
rocketmq.config.dataPath=E:/datas/rocketmq-console/data

rocketmq.config.namesrvAddr必须修改成自己的NameServer地址,多个通过英文分号分隔

3、rocketmq-console在eclipse中启动运行(或者打包成jar包运行)

rocketmq-console是Java Springboot项目,依赖Jdk8和maven,打包需要用到。

访问地址:

http://127.0.0.1:4000/

运行效果图:

================================

©Copyright 蕃薯耀 2020-12-28

https://www.cnblogs.com/fanshuyao/

原文地址:https://www.cnblogs.com/fanshuyao/p/14200573.html