Rocket描述:
RocketMQ: producer:消息的發送者,寫信人; consumer:消息的接收者;收信人; broker:存儲和傳遞消息,郵局 nameserv:管理broker,相當於郵局的管理機構一樣!(數據無狀態,) topic:區分消息的種類,一個producer可以給一個或多個topic發送短信,一個consumer可以接收一個或多個topic的消息; Message queue:相當於消息的分區,用於並行發送和接收消息;
Rocket集群描述
集群描述: nameserv/producer/consumer:啟動多個nameserv就是集群 1.nameservver是一個幾乎無狀態節點,可集群部署,節點直接無任何數據同步; 2.broker: 2.1:分為master和slave節點;一個master可以有多個salver,但是一個slave只能有一個master; 2.2:他們通過brokerName進行分組,brokerId=0代表master,brokerId=1代表salver; 2.3:每個broker和nameserver建立長連接,定時注冊topic信息到所有的nameserver; 3.producer:producer和nameserver集群中的一個節點建立長連接(隨機),定期從nameserver中獲取topic路由信息,並向提供topic服務的master建立長連接,並定時向master節點發送心跳;producer完全無狀態可集群部署; 4.consumer:consumer和namesever集群中的任一節點建立長連接,定期從namserver中獲取topic路由信息,並向提過topic服務的maseter節點和slaver節點建立長連接,然后定時向master和slaver發送心跳,consumer可以master和slaver節點中都訂閱消息,訂閱規則由broker配置的規則決定;
三.集群搭建模式;
1.單master模式;不推薦使用,宕機玩完了!
2.多master模式:
3.多master多slaver(異步):單台master宕機后數據會有少量的丟失;
4.多master多slaver(同步):
四:集群的工作流程:
1.啟動namaserver:nameserver啟動后,監聽broker,producer和consumer是否上線,相當於一個路由中心; 2.啟動broker:broker和所有的nameserver建立長連接,定時發送心跳包,心跳包包含當前broker(ip+端口)以及topic儲藏信息;當注冊成功后,namserver就有了所有的broker和topic的映射關系; 3.創建topic:發送消息前需要先創建topic,需要指明當前topic要儲藏在那個broker上 去; 4.producer生產消息:先和nameserver建立長連接,看當前的topic是在那些broker上面去,輪詢從隊列列表中選擇一個隊列,然后與所在隊列的broker建立長連接從而向其發送信息; 5.consumer消費消息:跟其中的一台namsever建立長連接,獲取當前的topic在那些Broker上,然后和broker建立連接,消費信息!
五:Rocket集群搭建:
服務器環境:
序號 | IP | 角色 | 架構模式 |
1 | 192.168.237.14 | nameserver/broker | Master1/slave2 |
2 | 192.168.237.9 | nameserver/broker | Master2/slave1 |
1.host添加信息
vim /etc/hosts #nameserver 192.168.237.14 rocketmq-nameserver1 192.168.237.9 rocketmq-nameserver2 #broker 192.168.237.14 rocketmq-master1 192.168.237.14 rocketmq-slave2 192.168.237.9 rocketmq-master2 192.168.237.9 rocketmq-slave1 配置完場重啟網卡: systemctl restart network
2.防火牆關閉;
#查看防火牆狀態; filewall-cmd --state #禁止firewalld開機啟動; systemctl disable filewalld.server
在實際的生產環境可以指定開放端口: #開放nameserver端口: filewalld-cmd --remove-port=9876/tcp--permanent #開放master端口: filewalld-cmd --remove-port=10911/tcp--permanent #開放slaved端口(集群模式下不可開啟) filewalld-cmd --remove-port=11011/tcp--permanent 重啟防火牆: filewalld-cmd --reload
3.環境變量配置:
[root@docker ~]# vim /etc/profile
#set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq/rocketmq-all-4.2.0-bin-release
PATH=$ROCKETMQ_HOME/bin:$PATH
export ROCKETMQ_HOME PATH
[root@docker ~]# source /etc/profile
4.創建消息存儲路徑:
在配置雙主雙從集群時,配置文件中相關的存儲路徑需要區分,主節點、從節點的數據不能保存在同一個目錄下,不然則會出現:啟動NamesrvStartup成功,啟動第一個broker master成功,啟動第二個broker slave則一直失敗。
master文件目錄:
mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index
slave文件目錄:
mkdir /usr/local/rocketmq/store_slave mkdir /usr/local/rocketmq/store_slave/commitlog mkdir /usr/local/rocketmq/store_slave/consumequeue mkdir /usr/local/rocketmq/store_slave/index
5.broker配置文件:
采用的多master多slave,同步刷新策略(ASYNC)
1、在192.238.237.14主機上對broker-a.properties文件進行Master1配置
[root@docker ~]# cd /usr/local/rocketmq/conf/2m-2s-async/ [root@docker 2m-2s-async]# ll total 16 -rw-r--r--. 1 root root 929 Sep 19 2017 broker-a.properties -rw-r--r--. 1 root root 922 Sep 19 2017 broker-a-s.properties -rw-r--r--. 1 root root 929 Sep 19 2017 broker-b.properties -rw-r--r--. 1 root root 922 Sep 19 2017 broker-b-s.properties [root@docker 2m-2s-async]#vim broker-a.properties
在192.168.237.14機器上的Master Broker的配置文件broker-a.properties # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreements. See the NOTICE file distributed with # this work for additional information regarding copyright ownership. # The ASF licenses this file to You under the Apache License, Version 2.0 # (the "License"); you may not use this file except in compliance with # the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 例如:在a.properties 文件中寫 broker-a 在b.properties 文件中寫 broker-b brokerName=broker -a #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,這里nameserver是單台,如果nameserver是多台集群的話,就用分號分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3) namesrvAddr=192.168.237.14:9876;192.168.237.9:9876 #每個topic對應隊列的數量,默認為4,實際應參考consumer實例的數量,值過小不利於consumer負載均衡 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,生產建議關閉 autoCreateTopicEnable= true #是否允許 Broker 自動創建訂閱組,生產建議關閉 autoCreateSubionGroup= true #Broker 對外服務的監聽端口 listenPort=10911 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #檢測物理文件磁盤空間 disMaxUsedSpaceRatio=88 #存儲路徑 storePathRootDir=/usr/local/rocketmq/store #commitLog 存儲路徑 storePathCommitLog=/usr/local/rocketmq/store/commitlog #消費隊列存儲路徑存儲路徑 storePathConsumerQueue=/usr/local/rocketmq/store/consumequeue #消息索引存儲路徑 storePathIndex=/usr/local/rocketmq/store/index #checkpoint 文件存儲路徑 storeCheckpoint=/usr/local/rocketmq/store/checkpoint #abort 文件存儲路徑 abortFile=/usr/local/rocketmq/store/abort #限制消息的大小 maxMessageSize=65536 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=ASYNC_MASTER #刷盤方式,ASYNC_FLUSH=異步刷盤,SYNC_FLUSH=同步刷盤 flushDiskType=SYNC_FLUSH
2、在192.238.237.14主機上對broker-b-s.properties文件進行slvave2配置:
[root@docker 2m-2s-async]#vim broker-b-s.properties
在192.168.237.14機器上的slave2 Broker的配置文件broker-b-s.properties
#所屬集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此處不同的配置文件填寫的不一樣 例如:在a.properties 文件中寫 broker-a 在b.properties 文件中寫 broker-b
brokerName=broker-b
#0 表示 Master,>0 表示 Slave
brokerId=1
#刪除文件時間點,默認凌晨 4點
deleteWhen=04
#文件保留時間,默認 48 小時
fileReservedTime=120
#Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點
brokerRole=SLAVE
#刷盤方式,ASYNC_FLUSH=異步刷盤,SYNC_FLUSH=同步刷盤
flushDiskType=SYNC_FLUSH
#Broker 對外服務的監聽端口
listenPort=11011
#nameServer地址,這里nameserver是單台,如果nameserver是多台集群的話,就用分號分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3)
namesrvAddr=192.168.237.14:9876;192.168.237.9:9876
#每個topic對應隊列的數量,默認為4,實際應參考consumer實例的數量,值過小不利於consumer負載均衡
defaultTopicQueueNums=4
#是否允許 Broker 自動創建Topic,生產建議關閉
autoCreateTopicEnable= true
#是否允許 Broker 自動創建訂閱組,生產建議關閉
autoCreateSubionGroup= true
#commitLog每個文件的大小默認1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每個文件默認存30W條,根據業務情況調整
mapedFileSizeConsumeQueue=300000
#檢測物理文件磁盤空間
disMaxUsedSpaceRatio=88
#限制消息的大小
maxMessageSize=65536
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store_slave
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store_slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/usr/local/rocketmq/store_slave/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store_slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store_slave/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store_slave/abort
3.在192.168.237.9主機上對 broker-b.properties進行Master2配置; 、
[root@node1 2m-2s-sync]# vim broker-b.properties
#所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 例如:在a.properties 文件中寫 broker-a 在b.properties 文件中寫 broker-b brokerName=broker-b #0 表示 Master,>0 表示 Slave brokerId=0 #nameServer地址,這里nameserver是單台,如果nameserver是多台集群的話,就用分號分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3) namesrvAddr=192.168.237.14:9876;192.168.237.9:9876 #每個topic對應隊列的數量,默認為4,實際應參考consumer實例的數量,值過小不利於consumer負載均衡 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,生產建議關閉 autoCreateTopicEnable= true #是否允許 Broker 自動創建訂閱組,生產建議關閉 autoCreateSubionGroup= true #Broker 對外服務的監聽端口 listenPort=10911 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 檢測物理文件磁盤空間 disMaxUsedSpaceRatio=88 #存儲路徑 storePathRootDir=/usr/local/rocketmq/store #commitLog 存儲路徑 storePathCommitLog=/usr/local/rocketmq/store/commitlog #消費隊列存儲路徑存儲路徑 storePathConsumerQueue=/usr/local/rocketmq/store/consumequeue #消息索引存儲路徑 storePathIndex=/usr/local/rocketmq/store/index #checkpoint 文件存儲路徑 storeCheckpoint=/usr/local/rocketmq/store/checkpoint #abort 文件存儲路徑 abortFile=/usr/local/rocketmq/store/abort #限制消息的大小 maxMessageSize=65536 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=ASYNC_MASTER #刷盤方式,ASYNC_FLUSH=異步刷盤,SYNC_FLUSH=同步刷盤 flushDiskType=SYNC_FLUSH
4.在192.168.237.9主機上對 broker-a-s.properties進行slave1配
[root@node1 2m-2s-sync]# vim broker-a-s.properties
在192.168.237.9機器上的Slave Broker的配置文件broker-a-s.properties #所屬集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此處不同的配置文件填寫的不一樣 例如:在a.properties 文件中寫 broker-a 在b.properties 文件中寫 broker-b brokerName=broker-a #0 表示 Master,>0 表示 Slave brokerId=1 #刪除文件時間點,默認凌晨 4點 deleteWhen=04 #文件保留時間,默認 48 小時 fileReservedTime=120 #Broker 的角色,ASYNC_MASTER=異步復制Master,SYNC_MASTER=同步雙寫Master,SLAVE=slave節點 brokerRole=SLAVE #刷盤方式,ASYNC_FLUSH=異步刷盤,SYNC_FLUSH=同步刷盤 flushDiskType=SYNC_FLUSH #Broker 對外服務的監聽端口 listenPort=11011 #nameServer地址,這里nameserver是單台,如果nameserver是多台集群的話,就用分號分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3) namesrvAddr=192.168.237.14:9876;192.168.237.9:9876 #每個topic對應隊列的數量,默認為4,實際應參考consumer實例的數量,值過小不利於consumer負載均衡 defaultTopicQueueNums=4 #是否允許 Broker 自動創建Topic,生產建議關閉 autoCreateTopicEnable= true #是否允許 Broker 自動創建訂閱組,生產建議關閉 autoCreateSubionGroup= true #commitLog每個文件的大小默認1G mapedFileSizeCommitLog=1073741824 #ConsumeQueue每個文件默認存30W條,根據業務情況調整 mapedFileSizeConsumeQueue=300000 #檢測物理文件磁盤空間 disMaxUsedSpaceRatio=88 #限制消息的大小 maxMessageSize=65536
#存儲路徑
storePathRootDir=/usr/local/rocketmq/store_slave
#commitLog 存儲路徑
storePathCommitLog=/usr/local/rocketmq/store_slave/commitlog
#消費隊列存儲路徑存儲路徑
storePathConsumerQueue=/usr/local/rocketmq/store_slave/consumequeue
#消息索引存儲路徑
storePathIndex=/usr/local/rocketmq/store_slave/index
#checkpoint 文件存儲路徑
storeCheckpoint=/usr/local/rocketmq/store_slave/checkpoint
#abort 文件存儲路徑
abortFile=/usr/local/rocketmq/store_slave/abort
6.修改啟動腳本文件:
7.服務啟動:
1.啟動Namaserver集群: 分別在192.168.237.14和192.168.237.9啟動nameserv: cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin nohup sh mqnamesrv & sh shutdown nameserv 2.啟動Broker集群 在92.168.237.14主機上啟動master1和slave2 master1: cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-a.properties & slave2: cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-b-s.properties &
master2: cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-b.properties & slave2: cd /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/bin nohup sh mqbroker -c /usr/local/rocketmq/rocketmq-all-4.2.0-bin-release/conf/2m-2s-sync/broker-a-s.properties &