最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

27 部署一個小規(guī)模的 RocketMQ 集群,為壓測做好準(zhǔn)備

2023-06-11 10:49 作者:儒猿課堂  | 我要投稿

部署一個小規(guī)模的 RocketMQ 集群,為壓測做好準(zhǔn)備


1、小猛的第一個實戰(zhàn)任務(wù):部署一個小規(guī)模的RocketMQ集群


既然已經(jīng)完成了RocketMQ生產(chǎn)架構(gòu)的設(shè)計了,接著就得一步一步完成真正的生產(chǎn)集群的部署了,明哥這個時候給小猛布置了第一個實戰(zhàn)任務(wù),就是先分配幾臺機器給小猛,讓他完成一個小規(guī)模的RocketMQ集群的部署。


這個小規(guī)模的RocketMQ集群部署好了之后,還需要對這個集群進(jìn)行壓測,看一看在公司的機器配置下,可以抗下多高的QPS。


小猛接下了這個任務(wù),同時又看了看他之前設(shè)計出來的最終生產(chǎn)部署架構(gòu)圖,他知道這個圖僅僅是一個邏輯架構(gòu)圖,不是物理部署架構(gòu)圖,但是物理部署架構(gòu)圖得參照這個邏輯架構(gòu)圖才能部署出來。


? ? ? ? ? ?

? ? ? ? ? ??

2、公司給小猛分配的第一批機器


小猛先看了看公司給他分配的第一批機器的各項配置,然后迅速基于這批機器制定了RocketMQ集群部署的規(guī)劃。

  1. NameServer:3臺機器,每臺機器都是8核CPU + 16G內(nèi)存 + 500G磁盤 + 千兆網(wǎng)卡

  2. Broker:6臺機器,每臺機器都是24核CPU(兩顆x86_64 cpu,每顆cpu是12核) + 48G內(nèi)存 + 1TB磁盤 + 千兆網(wǎng)卡

  3. 生產(chǎn)者:2臺機器,每臺機器都是4核CPU + 8G內(nèi)存 + 500GB磁盤 + 千兆網(wǎng)卡

  4. 消費者:2臺機器,每臺機器都是4核CPU + 8G內(nèi)存 + 500GB磁盤 + 千兆網(wǎng)卡


NameServer是核心的路由服務(wù),所以給8核16G的較高配置的機器,但是他一般就是承載Broker注冊和心跳、系統(tǒng)的路由表拉取等請求,負(fù)載其實很低,因此不需要特別高的機器配置,部署三臺也可以實現(xiàn)高可用的效果了。


Broker是最負(fù)載最高的,未來要承載高并發(fā)寫入和海量數(shù)據(jù)存儲,所以把最高配置的機器都會留給他,這里用3臺機器組成一個“單Master + 雙Slave”的集群。


生產(chǎn)者和消費者機器都是臨時用來測試的,而且一般他們都是業(yè)務(wù)系統(tǒng),只會部署在標(biāo)準(zhǔn)的4核8G的機器配置下。


所有機器都是千兆網(wǎng)卡,足夠他們使用了。


小猛看著自己手頭的機器,點點頭,可以開始部署了。



3、選擇一臺機器快速部署RocketMQ嘗試一下


首先,小猛的第一步不是一下子就把整個集群部署好,而是先找一臺機器準(zhǔn)備在上面先快速部署一個RocketMQ嘗試一下。


在機器上部署RocketMQ之前,先安裝一下JDK,同時要在環(huán)境變量中設(shè)置Java_HOME,這個小猛很熟練就搞定了。(畫外音,如果有不會的同學(xué),可以自己查閱資料)


接著在一臺機器上執(zhí)行了下面的命令來構(gòu)建Dledger:


git clone?https://github.com/openmessaging/openmessaging-storage-dledger.git

cd openmessaging-storage-dledger

mvn clean install -DskipTests


接著小猛在機器上個執(zhí)行了下面的命令來構(gòu)建RocketMQ:


git clone https://github.com/apache/rocketmq.git

cd rocketmq

git checkout -b store_with_dledger origin/store_with_dledger

mvn -Prelease-all -DskipTests clean install -U


接著進(jìn)入一個目錄中:


cd distribution/target/apache-rocketmq


在這個目錄中,需要編輯三個文件,一個是bin/runserver.sh,一個是bin/runbroker.sh,另外一個是bin/tools.sh


在里面找到如下三行,然后將第二行和第三行都刪了,同時將第一行的值修改為你自己的JDK的主目錄


[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java

[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java

[ ! -e "$JAVA_HOME/bin/java" ] && error_exit "Please set the JAVA_HOME variable in your environment, We need java(x64)!"


注:如果要查看你的JDK裝哪兒了,可以用命令:/usr/libexec/java_home -V,修改為你的Java主目錄即可



接著執(zhí)行下面的命令進(jìn)行快速RocketMQ集群啟動:


sh bin/dledger/fast-try.sh start


這個命令會在當(dāng)前這臺機器上啟動一個NameServer和三個Broker,三個Broker其中一個是Master,另外兩個是Slave,瞬間就可以組成一個最小可用的RocketMQ集群。


接著使用下面的命令檢查一下RocketMQ集群的狀態(tài):


sh bin/mqadmin clusterList -n 127.0.0.1:9876


此時你需要等待一會兒,這個命令執(zhí)行的過程會有點緩慢,大概可能幾秒到幾十秒過后,你會看到三行記錄,說是一個RaftCluster,Broker名稱叫做RaftNode00,然后BID是0、1、2,也有可能是0、1、3


這就說明的RocketMQ集群啟動成功了,BID為0的就是Master,BID大于0的就都是Slave,其實在這里也可以叫做Leader和Follower


接著就可以嘗試一下Slave是如何自動切換為Master的了。


我們看到三臺機器的地址分別為:


  1. 192.168.31.153:30921

  2. 192.168.31.153:30911

  3. 192.168.31.153:30931


我們發(fā)現(xiàn)30921端口的Broker的BID是0,說明他是Master


此時我們可以用命令(lsof -i:30921)找出來占用30921端口的進(jìn)程PID,接著就用kill -9的命令給他殺了,比如我這里占用30921端口的進(jìn)程PID是4344,那么就執(zhí)行命令:kill -9 4344


接著等待個10s,再次執(zhí)行命令查看集群狀態(tài):

sh bin/mqadmin clusterList -n 127.0.0.1:9876


此時就會發(fā)現(xiàn)作為Leader的BID為0的節(jié)點,變成另外一個Broker了,這就是說Slave切換為Master了。


4、完成正式三臺NameServer的部署


其實RocketMQ集群部署并不難,主要就是在幾臺機器上做好相應(yīng)的配置,然后執(zhí)行一些命令啟動NameServer和Broker就可以了。


首先是在三臺NameServer的機器上,大家就按照上面的步驟安裝好Java,構(gòu)建好Dledger和RocketMQ,然后編輯對應(yīng)的文件,設(shè)置好JAVA_HOME就可以了。


此時可以執(zhí)行如下的一行命令就可以啟動NameServer:


nohup sh mqnamesrv &


這個NameServer監(jiān)聽的接口默認(rèn)就是9876,所以如果你在三臺機器上都啟動了NameServer,那么他們的端口都是9876,此時我們就成功的啟動了三個NameServer了



5、完成一組Broker集群的部署


接著需要啟動一個Master Broker和兩個Slave Broker,這個啟動也很簡單,分別在上述三臺為Broker準(zhǔn)備的高配置機器上,安裝好Java,構(gòu)建好Dledger和RocketMQ,然后編輯好對應(yīng)的文件。


接著就可以執(zhí)行如下的命令:


nohup sh bin/mqbroker -c conf/dledger/broker-n0.conf &


這里要給大家說一下,第一個Broker的配置文件是broker-n0.conf,第二個broker的配置文件可以是broker-n1.conf,第三個broker的配置文件可以是broker-n2.conf。


對于這個配置文件里的東西要給大家說明一下,自己要做對應(yīng)的修改。


我們用broker-n0.conf舉例子,然后在每個配置項上加入注釋,告訴大家應(yīng)該如何修改每臺機器的配置:


# 這個是集群的名稱,你整個broker集群都可以用這個名稱

brokerClusterName = RaftCluster


# 這是Broker的名稱,比如你有一個Master和兩個Slave,那么他們的Broker名稱必須是一樣的,因為他們?nèi)齻€是一個分組,如果你有另外一組Master和兩個Slave,你可以給他們起個別的名字,比如說RaftNode01

brokerName=RaftNode00


# 這個就是你的Broker監(jiān)聽的端口號,如果每臺機器上就部署一個Broker,可以考慮就用這個端口號,不用修改

listenPort=30911


# 這里是配置NameServer的地址,如果你有很多個NameServer的話,可以在這里寫入多個NameServer的地址

namesrvAddr=127.0.0.1:9876


# 下面兩個目錄是存放Broker數(shù)據(jù)的地方,你可以換成別的目錄,類似于是/usr/local/rocketmq/node00之類的

storePathRootDir=/tmp/rmqstore/node00

storePathCommitLog=/tmp/rmqstore/node00/commitlog


# 這個是非常關(guān)鍵的一個配置,就是是否啟用DLeger技術(shù),這個必須是true

enableDLegerCommitLog=true


# 這個一般建議和Broker名字保持一致,一個Master加兩個Slave會組成一個Group

dLegerGroup=RaftNode00


# 這個很關(guān)鍵,對于每一組Broker,你得保證他們的這個配置是一樣的,在這里要寫出來一個組里有哪幾個Broker,比如在這里假設(shè)有三臺機器部署了Broker,要讓他們作為一個組,那么在這里就得寫入他們?nèi)齻€的ip地址和監(jiān)聽的端口號

dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913


# 這個是代表了一個Broker在組里的id,一般就是n0、n1、n2之類的,這個你得跟上面的dLegerPeers中的n0、n1、n2相匹配

dLegerSelfId=n0


# 這個是發(fā)送消息的線程數(shù)量,一般建議你配置成跟你的CPU核數(shù)一樣,比如我們的機器假設(shè)是24核的,那么這里就修改成24核

sendMessageThreadPoolNums=24


上面說完了這個配置文件在各個Broker上應(yīng)該如何修改,其實你結(jié)合之前學(xué)習(xí)過的Broker的工作原理,就應(yīng)該理解這些配置的含義了。


其實最關(guān)鍵的是,你的Broker是分為多組的,每一組是三個Broker,一個Master和兩個Slave。


對每一組Broker,他們的Broker名稱、Group名稱都是一樣的,然后你得給他們配置好一樣的dLegerPeers(里面是組內(nèi)三臺Broker的地址)


然后他們得配置好對應(yīng)的NameServer的地址,最后還有就是每個Broker有自己的ID,在組內(nèi)是唯一的就可以了,比如說不同的組里都有一個ID為n0的broker,這個是可以的。


所以按照這個思路就可以輕松的配置好一組Broker,在三臺機器上分別用命令啟動Broker即可。啟動完成過后,可以跟NameServer進(jìn)行通信,檢查Broker集群的狀態(tài),就是如下命令:


sh bin/mqadmin clusterList -n 127.0.0.1:9876。



6、編寫最基本的生產(chǎn)者和消費者代碼準(zhǔn)備壓測


接著就可以編寫最基本的生產(chǎn)者和消費者代碼,準(zhǔn)備執(zhí)行壓測了。


可以新建兩個工程,一個是生產(chǎn)者,一個是消費者,兩個工程都需要加入下面的依賴:


然后生產(chǎn)者的示例代碼如下,大家現(xiàn)在不需要知道里面的含義,只要知道他可以發(fā)送消息即可,基本的代碼說明都寫在下面的注釋里了


簡單來說,就是只要一運行,就立馬不停的在while死循環(huán)里去發(fā)送消息,根據(jù)需要可以設(shè)置為多個線程:


接著是示例用的消費者代碼,如下所示,關(guān)鍵的注釋都寫在里面了,消費者就是不停的去獲取消息然后打印出來即可:



小猛忙活了幾天總算弄完了一個小集群,由三個NameServer、三個Broker以及四個業(yè)務(wù)系統(tǒng)機器組成,他試了一下,Broker都正常運行,請求NameServer可以看到集群信息,而且測試了一下,能夠正常的發(fā)送消息和接收消息。


一切萬事俱備,只欠東風(fēng),接下來就要調(diào)整Broker的OS內(nèi)核參數(shù)、JVM參數(shù)然后重新啟動Broker,接著就可以啟動生產(chǎn)者和消費者去發(fā)送消息和獲取消息,然后去觀察RocketMQ能承載的QPS,CPU、IO、磁盤、網(wǎng)絡(luò)等負(fù)載。

End

專欄版權(quán)歸公眾號儒猿技術(shù)窩所有

未經(jīng)許可不得傳播,如有侵權(quán)將追究法律責(zé)任

27 部署一個小規(guī)模的 RocketMQ 集群,為壓測做好準(zhǔn)備的評論 (共 條)

分享到微博請遵守國家法律
蕉岭县| 靖远县| 芜湖市| 神木县| 成安县| 根河市| 临泽县| 云林县| 黎平县| 大余县| 玛多县| 边坝县| 马山县| 锡林郭勒盟| 吴旗县| 澄迈县| 上犹县| 菏泽市| 南漳县| 云安县| 沾化县| 安庆市| 宁河县| 郓城县| 廉江市| 临桂县| 出国| 苏州市| 昌邑市| 开封市| 吴忠市| 周口市| 高尔夫| 乐安县| 柯坪县| 乳源| 淮南市| 小金县| 尖扎县| 娱乐| 上林县|