愛折騰 | docker搭建RocketMq測試環(huán)境踩坑

前言
最近公司在搞ActiveMQ切換到rocketMq的事,雖然不是特別緊急的事,而且好像已經(jīng)給出切換的文檔了,但是本著自己動手豐衣足食的想法,我還是打算把之前發(fā)過的rocketMq的相關(guān)內(nèi)容,再好好回顧下,畢竟知其然且知其所以然,才能更好地處理(裝)問題(逼)。
不過今天的內(nèi)容暫時還不涉及RocketMq的相關(guān)技術(shù)知識,只是一次簡單的環(huán)境搭建,關(guān)于技術(shù)層面的知識,我們后面繼續(xù)探討。
RocketMQ部署
部署namesrv
namesrv就類似于消息隊列的注冊中心,因為rocketmq原生支持集群,所以namesrv就顯得很重要。
拉取鏡像
首先是拉取鏡像,這里拉取的是rocketMQ的核心鏡像
docker?pull?rocketmqinc/rocketmq
啟動namesrv
啟動過程也很簡單,主要是docker的一些參數(shù)和配置指定
#?后臺運行,并映射端口
docker?run?-d?-p?9876:9876?\
#?設(shè)置容器名稱
--name?rmqnamesrv?\
#?設(shè)置重啟策略
--restart=always?\
#?映射日志文件夾(前面的為本地路徑)
-v?/home/syske/docker/mq/data/namesrv/logs:/root/logs?\
#?映射書籍存在文件夾(同上)
-v?/home/syske/docker/mq/namesrv/store:/root/store?\
#?指定環(huán)境變量
-e?"MAX_POSSIBLE_HEAP=100000000"?\
#?指定鏡像版本,這里建議指定具體版本,否則在和java交互的時候會報錯,目前最新版本是4.4.0,所以maven的依賴也必須對應(yīng),否則會報錯
rocketmqinc/rocketmq:latest?\
#?啟動命令
sh?mqnamesrv
部署broker
由于broker和namesrv是同一個鏡像,所以這里不需要再拉取鏡像
創(chuàng)建broker配置
除了最后兩行配置,其他的配置都是系統(tǒng)默認(rèn)的,具體說明可以參考官方文檔
# broker集群名稱
brokerClusterNam = DefaultCluster
# broker節(jié)點名稱
brokerName = broker-a
# broker節(jié)點id
brokerId = 0
# 刪除條件?這個還不清楚用途,后續(xù)研究下
deleteWhen = 04
# 文件保留時間(單位小時),默認(rèn)為3天
fileReservedTime = 48
# broker角色
brokerRole = ASYNC_MASTER
# 磁盤同步方式:同步,異步
flushDiskType = ASYNC_FLUSH
# 類似注冊中心
namesrvAddr=192.168.0.103:9876
# 當(dāng)前broker監(jiān)聽的IP(主)
brokerIP1 = 192.168.0.103
啟動broker
這里的啟動命令最核心的其實就是最后sh操作,這里制定了配置文件的路徑。
?#?后臺運行
?docker?run?-d?\
?#?映射端口
-p?10911:10911?\
#?映射端口
-p?10909:10909?\
#?容器名稱
--name?rmqbroker?\
#?重啟策略
--restart=always?\
#?映射日志路徑
-v?/home/syske/docker/mq/data/broker/logs:/root/logs?\
#?映射文件存儲路徑
-v?/home/syske/docker/mq/data/broker/store:/root/store?\
#?映射配置文件
-v?/home/syske/docker/mq/conf/broker.conf:/opt/rocketmq-4.4.0/conf/broker.conf?\
#?鏈接namesrv
--link?rmqnamesrv:namesrv?\
#?指定環(huán)境設(shè)置
-e?"NAMESRV_ADDR=namesrv:9876"?\
#?指定環(huán)境設(shè)置,指定鏡像
-e?"MAX_POSSIBLE_HEAP=200000000"?rocketmqinc/rocketmq:latest?\
#?啟動命令(指定配置啟動)
sh?mqbroker?-c?/opt/rocketmq-4.4.0/conf/broker.conf
由于這里我們把rocketmq的日志映射到了本機(jī)目錄,所以我們可以直接通過tail查看broker的啟動日志,比如broker.log:

當(dāng)然,你也可以通過docker exec命令的方式查看日志,當(dāng)然就是沒有上面這種方式方便。
安裝console
console是rocketmq的擴(kuò)展組件,console組件提供了圖形化的界面,便于我們管理和監(jiān)控rocketmq,界面截圖如下:


官方文檔:
https://rocketmq-1.gitbook.io/rocketmq-connector/rocketmq-connect/rocketmq-console/an-zhuang-shi-yong
拉取鏡像
默認(rèn)拉取最新版本鏡像:
docker?pull?styletang/rocketmq-console-ng
啟動
啟動命令也很簡單,只是指定rocketmq的namesrv的地址,除了端口有修改,其他直接復(fù)制官方文檔
docker?run?-e?"JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.0.103:9876?-Dcom.rocketmq.sendMessageWithVIPChannel=false"?-p?8000:8080?-t?styletang/rocketmq-console-ng
啟動成功后直接訪問我們配置的端口,即可看到如上截圖。
踩坑記錄
由于是時候回顧總結(jié),所以過程中的好多錯誤問題我已經(jīng)復(fù)現(xiàn)不出來了,下面是印象比較深刻的幾個問題,各位小伙伴可以參考下,少走一些彎路。
映射路徑配置錯誤,導(dǎo)致容器無限重啟。表現(xiàn)就是執(zhí)行
docker ps的時候,mqbroker服務(wù)狀態(tài)一直是Restarting:
最后幾經(jīng)檢查,發(fā)現(xiàn)是映射的本地文件夾不存在導(dǎo)致的。本地的路徑是
/home/syske/docker/mq/data/broker,但是啟動命令里面映射的路徑少了docker目錄,所以導(dǎo)致日志和配置文件路徑都錯誤了,所以報錯了版本問題導(dǎo)致配置文件讀取不到:也就是在啟動
boker服務(wù)的時候,broker.conf的路徑配置不正確,導(dǎo)致啟動直接報錯:
進(jìn)入容器中查看了
rocketmq的版本才知道這里的路徑需要配置成rocketmq-4.4.0,所以各位小伙伴在拉取鏡像的時候一定要指定版本,這樣在設(shè)置配置的時候也就不會出錯了。如果你在客戶端調(diào)用
rocketmq時有如下錯誤:
你需要在
broker的配置文件中指定brokerIP1的相關(guān)配置,因為172.17.0.5是docker的內(nèi)網(wǎng)ip,我們需要在外部調(diào)用broker,所以需要配置一個外部ip(docker主機(jī)的局域網(wǎng)ip)

- 如果客戶端調(diào)用
rocketmq報錯的話,那大概率是因為broker服務(wù)沒有正常啟動導(dǎo)致的(我就是因為第一個坑導(dǎo)致的)
結(jié)語
好了關(guān)于docker安裝配置rocketMq的相關(guān)內(nèi)容,我們就先到這里,下面我們聊點本次折騰的背景:
原本是打算在manjaro環(huán)境搞下rocketMQ的測試環(huán)境就可以了,但是在實際操作的時候,發(fā)現(xiàn)manjaro還沒有配置過JDK環(huán)境,而且在我一通安裝設(shè)置之后,rocketMq啟動還是報錯,具體報什么錯我也記不清楚了,總之就是很惡心,最后我就放棄了這種原生的方式。
之后我又想到了可以在k8s環(huán)境搞一套,但是不幸的是,我發(fā)現(xiàn)manjaro的k8s集群也壞了,就是執(zhí)行kubectl命令時候一直提示拒絕連接:
The?connection?to?the?server?localhost:8080?was?refused?-?did?you?specify?the?right?host?or?port?
好吧,太浪費時間了,于是我覺定重新裝個系統(tǒng)(一言不合就折騰),一頓操作之后,我安裝了特別熟悉的linux系統(tǒng)——ubuntu,不過網(wǎng)絡(luò)還算給力,20m/s的速度,系統(tǒng)很快就下載好了。之后經(jīng)過兩個小時的折騰,docker、jdk、git、oh-my-zsh都被我搞定了,然后今天又花了兩三個小時折騰rocketmq的docker環(huán)境。
總體來說,我還是很喜歡這種排查并處理問題的感覺的,特別是解決完所有問題之后的酣暢感,這給了我極大的成就感,這也是我熱愛折騰的原因吧!
- END -