docker進行RocketMq集群部署方式
環(huán)境
- (1)Centos7
- (2)JDK1.8
- (3)docker
- (4)rocketmq 4.8
兩臺服務器ip
- A:192.168.5.49
- B:192.168.5.50
集群模式
1、單節(jié)點 :
- 優(yōu)點:本地開發(fā)測試,配置簡單,同步刷盤消息一條都不會丟
- 缺點:不可靠,如果宕機,會導致服務不可用
2、主從(異步、同步雙寫) :
- 優(yōu)點:同步雙寫消息不丟失, 異步復制存在少量丟失 ,主節(jié)點宕機,從節(jié)點可以對外提供消息的消費,但是不支持寫入
- 缺點:主備有短暫消息延遲,毫秒級,目前不支持自動切換,需要腳本或者其他程序進行檢測然后進行停止broker,重啟讓從節(jié)點成為主節(jié)點
3、雙主:
- 優(yōu)點:配置簡單, 可以靠配置RAID磁盤陣列保證消息可靠,異步刷盤丟失少量消息
- 缺點: master機器宕機期間,未被消費的消息在機器恢復之前不可消費,實時性會受到影響
4、雙主雙從,多主多從模式(異步復制)我們這里采用這種
- 優(yōu)點:磁盤損壞,消息丟失的非常少,消息實時性不會受影響,Master 宕機后,消費者仍然可以從Slave消費
- 缺點:主備有短暫消息延遲,毫秒級,如果Master宕機,磁盤損壞情況,會丟失少量消息
5、雙主雙從,多主多從模式(同步雙寫)
- 優(yōu)點:同步雙寫方式,主備都寫成功,向應用才返回成功,服務可用性與數(shù)據(jù)可用性都非常高
- 缺點:性能比異步復制模式略低,主宕機后,備機不能自動切換為主機
概念
rocketmq分為Name Server和Broker Server
名字服務(Name Server)
名稱服務充當路由消息的提供者。
生產者或消費者能夠通過名字服務查找各主題相應的Broker IP列表。
多個Namesrv實例組成集群,但相互獨立,沒有信息交換。
是Topic路由注冊中心,端口默認為9876
代理服務器(Broker Server)
消息中轉角色,負責存儲消息、轉發(fā)消息。
代理服務器在RocketMQ系統(tǒng)中負責接收從生產者發(fā)送來的消息并存儲、同時為消費者的拉取請求作準備。
代理服務器也存儲消息相關的元數(shù)據(jù),包括消費者組、消費進度偏移和主題和隊列消息等。
端口有三個:
- listenPort:默認10911,接受客戶端連接的監(jiān)聽端口,作為對producer和consumer使用服務的端口號,可以通過配置文件改
- haListenPort:默認為listenPort + 1,高可用服務監(jiān)聽端口,主要用于slave同master同步
- fastListenPort:默認為listenPort -2, 主要是fastRemotingServer服務使用,用于VIP通道
部署
1、安裝rmqnamesrv
兩臺的rmqnamesrv都直接運行即可,所有配置都用默認的即可
docker run -d --name rmqnamesrv \ -v /home/docker/rocketmq/data/namesrv/logs:/home/rocketmq/logs \ -p 9876:9876 \ --restart=always \ apacherocketmq/rocketmq:4.8.0-alpine sh mqnamesrv
2、安裝rmqbroker
docker run -d --name rmqbroker \ -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \ --link rmqnamesrv:namesrv \ --restart=always \ -e "NAMESRV_ADDR=namesrv:9876" \ -p 10909:10909 -p 10911:10911 -p 10912:10912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
拷貝rmqbroker的配置文件到主機目錄
docker cp rmqbroker:/home/rocketmq/rocketmq-4.8.0/conf /home/docker/rocketmq/data/broker/conf
編輯配置文件broker.conf
#切換到剛剛拷貝出來的文件夾下 cd /home/docker/rocketmq/data/broker/conf #編輯主節(jié)點配置文件 sudo vi broker.conf #編輯從節(jié)點配置文件 sudo vi broker-s.conf
主節(jié)點broker.conf內容如下:
# 集群名稱,取同一個 brokerClusterName = docker-mq-cluster # 節(jié)點名稱,每個主節(jié)點取不一樣的,另一個主節(jié)點我們取broker-b,如果是主從節(jié)點名稱保持一致 brokerName = broker-a #brokerName = broker-b # 主從標識,0為主,其他大于0的為從,從只允許讀,主可以讀寫 brokerId = 0 #未消費的持久化消息清理時間點,默認凌晨4點 deleteWhen = 04 #持久化消息保存周期(單位:小時) fileReservedTime = 48 #brocker角色,異步主 #- ASYNC_MASTER 異步復制Master #- SYNC_MASTER 同步雙寫Master #- SLAVE brokerRole = ASYNC_MASTER #刷盤方式:異步刷盤 flushDiskType = ASYNC_FLUSH #節(jié)點IP brokerIP1 = 192.168.5.49 #brokerIP1 = 192.168.5.50 #broker的服務端口 listenPort=10911 #server服務器地址和端口,多個用分號隔開 namesrvAddr=192.168.5.49:9876;192.168.5.50:9876 #延遲消息等級時間, #這個設置也影響全局的消費重試機制的間隔時間,消費重試機制走的就是延遲消息,這里設置后,第一次重試是在是失敗的10s后(從第三個開始 ,DefaultMQPushConsumerImpl源碼中setDelayTimeLevel(3 + msg.getReconsumeTimes()),舍去了前兩個),第二次是上次失敗的30s后,因為消費重試次數(shù)是16次(DefaultMQPushConsumerImpl源碼默認是16次),而我們30s后面沒有設置了,他后面的13次都會按30s間隔去重試 messageDelayLevel = 1s 5s 10s 30s
從節(jié)點broker-s.conf內容如下:
# 集群名稱,取同一個 brokerClusterName = docker-mq-cluster # 節(jié)點名稱,每個主節(jié)點取不一樣的,另一個主節(jié)點我們取broker-b,如果是主從節(jié)點名稱保持一致 brokerName = broker-a #brokerName = broker-b # 主從標識,0為主,其他大于0的為從,從只允許讀,主可以讀寫 brokerId = 1 #未消費的持久化消息清理時間點,默認凌晨4點 deleteWhen = 04 #持久化消息保存周期(單位:小時) fileReservedTime = 48 #brocker角色,從 #- ASYNC_MASTER 異步復制Master #- SYNC_MASTER 同步雙寫Master #- SLAVE brokerRole = SLAVE #刷盤方式:異步刷盤 flushDiskType = ASYNC_FLUSH #節(jié)點IP brokerIP1 = 192.168.5.49 #brokerIP1 = 192.168.5.50 #broker的服務端口,和主節(jié)點區(qū)分開 listenPort=11911 #server服務器地址和端口,多個用分號隔開 namesrvAddr=192.168.5.49:9876;192.168.5.50:9876 #延遲消息等級時間 messageDelayLevel = 1s 5s 10s 30s
刪除rmqbroker原容器
#t停止容器 docker stop rmqbroker #刪除容器 docker rm rmqbroker
重啟啟動rmqbroker
啟動主節(jié)點
docker run -d --name rmqbroker \ -v /home/docker/rocketmq/data/broker/logs:/home/rocketmq/logs \ -v /home/docker/rocketmq/data/broker/conf/broker.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \ --restart=always \ -p 10909:10909 -p 10911:10911 -p 10912:10912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
啟動從節(jié)點
注意我們的啟動命令,-p后面的端口是和主節(jié)點不一樣的,
從節(jié)點和主節(jié)點區(qū)分開,我們就直接用11909、11911、11912
docker run -d --name rmqbroker-s \ -v /home/docker/rocketmq/data/broker-s/logs:/home/rocketmq/logs \ -v /home/docker/rocketmq/data/broker/conf/broker-s.conf:/home/rocketmq/rocketmq-4.8.0/conf/broker.conf \ --restart=always \ -p 11909:11909 -p 11911:11911 -p 11912:11912 \ apacherocketmq/rocketmq:4.8.0-alpine \ sh mqbroker -c /home/rocketmq/rocketmq-4.8.0/conf/broker.conf
3、啟動可視化頁面rocketmq-console-ng
在一臺服務器安裝可視化頁面即可
docker run -d -p 8080:8080 --name rocketmq-console-ng \ -v /home/docker/rocketmq/tmp:/tmp \ --restart=always \ -e "JAVA_OPTS=-Drocketmq.namesrv.addr=192.168.5.49:9876;192.168.5.50:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" \ styletang/rocketmq-console-ng
結果驗證
查看服務端和客戶端日志無報錯,查看可視化界面
http://192.168.5.49:8080
成功檢測到兩個服務端,集群狀態(tài)也正常
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
教你如何從正在運行的容器創(chuàng)建?Docker?映像
這篇文章主要介紹了如何從正在運行的容器創(chuàng)建?Docker?映像,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02