=前言=
javascript
一、由於本身只買了一臺阿里雲服務器,因此RocketMQ集羣都部署在單臺服務器上只是端口不一樣,若是實際開發,能夠分別部署在多臺服務器上。 二、這裏有關 Broker 和 NameServer 分別都作了了集羣部署(各部署兩個),且BroKer是按兩主進行部署。
之因此選用Docker部署主要仍是考慮 :經過Docker部署RocketMQ集羣更快速,並且對系統的資源利用更好!
html
以前有寫過Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker經常使用命令java
以前有關RocketMQ概念作了介紹的博客:RocketMQ(1)-架構原理linux
下面先寫好所需配置文件,在運行配置文件,最終看運行結果!
git
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/
broker.conf是Broker的配置文件
,由於此時RocketMQ鏡像尚未拉取,因此尚未默認的broker.conf。因此這裏直接寫好,到時候經過命令替換默認的broker.conf。github
由於是雙主模式部署,因此會有兩個broker.conf,這裏暫且命名 broker-a.conf 和 broker-b.confsql
1) broker-a.confdocker
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
這裏配置的主要信息有:apache
一、當前Broker對外暴露的端口號
二、註冊到NameServer的地址,看到這裏有兩個地址,說明NameServer也是集羣部署。
三、當前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對外暴露的端口不同。
咱們能夠簡單把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
從配置文件能夠大體看出幾點:
一、經過Docker總共拉取了5條鏡像記錄。rmqnamesrv-a
、rmqnamesrv-b
、rmqbroker-a
、rmqbroker-b
、rmqconsole
。
二、rmqconsole是一個可視化的工具
,能夠經過頁面來查看RocketMQ相關信息。
三、能夠看出對於broker的配置文件broker.conf已經被broker-a/b.conf替換。
上面僅僅是把配置文件寫好,但啓動RocketMQ還有不少前提條件
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
有關的介紹能夠看官方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
前面全部的操做,都是爲這一步的鋪墊,經過docker-compose執行docker-compose.yml
配置文件
docker-compose -f docker-compose.yml up -d
若是你看到,那說明你大功告成!
查看可視化界面
完美!
注意
這裏面涉及相關端口記獲得阿里雲後臺開啓!
說明
由於我這邊是單機部署集羣,我發現集羣部署NameServer沒有問題,集羣部署Broker的會由於端口的問題只能使用一臺。
三、docker部署RocketMQ集羣(很是感謝)
只要本身變優秀了,其餘的事情纔會跟着好起來(中將9)