RocketMQ(2)—Docker集群部署RocketMQ
=前言=
1、因為自己只買了一台阿里雲服務器,所以RocketMQ集群都部署在單台服務器上只是端口不同,如果實際開發,可以分別部署在多台服務器上。
2、這里有關 Broker 和 NameServer 分別都做了了集群部署(各部署兩個),且BroKer是按兩主進行部署。
之所以選用Docker部署主要還是考慮 :通過Docker部署RocketMQ集群更快速,而且對系統的資源利用更好!
之前有寫過Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker常用命令
之前有關RocketMQ概念做了介紹的博客:RocketMQ(1)-架構原理
下面先寫好所需配置文件,在運行配置文件,最終看運行結果!
一、寫配置文件
1、創建所需文件夾
mkdir -p /opt/rocketmq/logs/nameserver-a
mkdir -p /opt/rocketmq/logs/nameserver-b
mkdir -p /opt/rocketmq/store/nameserver-a
mkdir -p /opt/rocketmq/store/nameserver-b
mkdir -p /opt/rocketmq/logs/broker-a
mkdir -p /opt/rocketmq/logs/broker-b
mkdir -p /opt/rocketmq/store/broker-a
mkdir -p /opt/rocketmq/store/broker-b
mkdir -p /home/rocketmq/broker-a/
mkdir -p /home/rocketmq/broker-b/
2、創建broker.conf
broker.conf是Broker的配置文件
,因為此時RocketMQ鏡像還沒有拉取,所以還沒有默認的broker.conf。所以這里直接寫好,到時候通過命令替換默認的broker.conf。
因為是雙主模式部署,所以會有兩個broker.conf,這里暫且命名 broker-a.conf 和 broker-b.conf
1) broker-a.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-a
brokerId = 0
#這個很有講究 如果是正式環境 這里一定要填寫內網地址(安全)
#如果是用於測試或者本地這里建議要填外網地址,因為你的本地代碼是無法連接到阿里雲內網,只能連接外網。
brokerIP1 = xxxxx
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 內網的(阿里雲有內網IP和外網IP)
namesrvAddr=172.18.0.5:9876;172.18.0.5:9877
autoCreateTopicEnable=true
#Broker 對外服務的監聽端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
這里配置的主要信息有:
1、當前Broker對外暴露的端口號
2、注冊到NameServer的地址,看到這里有兩個地址,說明NameServer也是集群部署。
3、當前Broker的角色,是主還是從,這里表示是主。
2)broker-b.conf
brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
brokerIP1 = xxxxx
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 內網的(阿里雲有內網IP和外網IP)
namesrvAddr=172.18.0.5:9876;172.18.0.5:9877
autoCreateTopicEnable=true
#Broker 對外服務的監聽端口,
listenPort = 10909
#Broker角色
#- ASYNC_MASTER 異步復制Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
這個上面並無差別,只是當前Brocker對外暴露的端口不一樣。
3、編寫 docker-compose.yml
我們可以簡單把docker-compose.yml理解成一個類似Shell的腳本,這個腳本定義了運行多容器應用程序的信息。
version: '3.5'
services:
rmqnamesrv-a:
image: rocketmqinc/rocketmq:4.3.0
container_name: rmqnamesrv-a
ports:
- 9876:9876
volumes:
- /opt/rocketmq/logs/nameserver-a:/opt/logs
- /opt/rocketmq/store/nameserver-a:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-a
rmqnamesrv-b:
image: rocketmqinc/rocketmq:4.3.0
container_name: rmqnamesrv-b
ports:
- 9877:9877
volumes:
- /opt/rocketmq/logs/nameserver-b:/opt/logs
- /opt/rocketmq/store/nameserver-b:/opt/store
command: sh mqnamesrv
networks:
rmq:
aliases:
- rmqnamesrv-b
rmqbroker-a:
image: rocketmqinc/rocketmq:4.3.0
container_name: rmqbroker-a
ports:
- 10911:10911
volumes:
- /opt/rocketmq/logs/broker-a:/opt/logs
- /opt/rocketmq/store/broker-a:/opt/store
- /home/rocketmq/broker-a/broker-a.conf:/opt/rocketmq-4.3.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-a:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-a
rmqbroker-b:
image: rocketmqinc/rocketmq:4.3.0
container_name: rmqbroker-b
ports:
- 10909:10909
volumes:
- /opt/rocketmq/logs/broker-b:/opt/logs
- /opt/rocketmq/store/broker-b:/opt/store
- /home/rocketmq/broker-b/broker-b.conf:/opt/rocketmq-4.3.0/conf/broker.conf
environment:
TZ: Asia/Shanghai
NAMESRV_ADDR: "rmqnamesrv-b:9876"
JAVA_OPTS: " -Duser.home=/opt"
JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
command: sh mqbroker -c /opt/rocketmq-4.3.0/conf/broker.conf autoCreateTopicEnable=true &
links:
- rmqnamesrv-a:rmqnamesrv-a
- rmqnamesrv-b:rmqnamesrv-b
networks:
rmq:
aliases:
- rmqbroker-b
rmqconsole:
image: styletang/rocketmq-console-ng
container_name: rmqconsole
ports:
- 9001:9001
environment:
JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false
networks:
rmq:
aliases:
- rmqconsole
networks:
rmq:
name: rmq
driver: bridge
從配置文件可以大致看出幾點:
1、通過Docker總共拉取了5條鏡像記錄。rmqnamesrv-a
、rmqnamesrv-b
、rmqbroker-a
、rmqbroker-b
、rmqconsole
。
2、rmqconsole是一個可視化的工具
,可以通過頁面來查看RocketMQ相關信息。
3、可以看出對於broker的配置文件broker.conf已經被broker-a/b.conf替換。
二、環境部署
上面僅僅是把配置文件寫好,但啟動RocketMQ還有很多前提條件
1、所需環境
1. 建議使用64位操作系統,Linux / Unix / Mac;
2. 64位JDK 1.8+;
3. Maven 3.2.x;
4. Git的;
5. 4g +免費磁盤用於Broker服務器
同時需要運行docker-compose.yml還需要安裝docker-compose
2、安裝docker-compose
有關的介紹可以看官方GitHub : https://github.com/docker/compose
安裝docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
查看是否安裝成功
[root@izbp13196wp34obmnd4avdz ~]# docker-compose --version
docker-compose version 1.24.1, build 4667896b
3、關鍵一步
前面所有的操作,都是為這一步的鋪墊,通過docker-compose執行docker-compose.yml
配置文件
docker-compose -f docker-compose.yml up -d
如果你看到,那說明你大功告成!
查看可視化界面
完美!
注意
這里面涉及相關端口記得到阿里雲后台開啟!
說明
因為我這邊是單機部署集群,我發現集群部署NameServer沒有問題,集群部署Broker的會因為端口的問題只能使用一台。
參考
3、docker部署RocketMQ集群(非常感謝)
只要自己變優秀了,其他的事情才會跟着好起來(中將9)