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/