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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM