RocketMQ(2)---Docker部署RocketMQ集羣

RocketMQ(2)—Docker集羣部署RocketMQ

=前言=javascript

一、由於本身只買了一臺阿里雲服務器,因此RocketMQ集羣都部署在單臺服務器上只是端口不一樣,若是實際開發,能夠分別部署在多臺服務器上。
二、這裏有關 Broker 和 NameServer 分別都作了了集羣部署(各部署兩個),且BroKer是按兩主進行部署。

之因此選用Docker部署主要仍是考慮 :經過Docker部署RocketMQ集羣更快速,並且對系統的資源利用更好!html

以前有寫過Liunx如何部署Docker的博客:【Docker】(3)---linux部署Docker、Docker經常使用命令java

以前有關RocketMQ概念作了介紹的博客:RocketMQ(1)-架構原理linux

下面先寫好所需配置文件,在運行配置文件,最終看運行結果!

git

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/

二、建立broker.conf

broker.conf是Broker的配置文件,由於此時RocketMQ鏡像尚未拉取,因此尚未默認的broker.conf。因此這裏直接寫好,到時候經過命令替換默認的broker.conf。github

由於是雙主模式部署,因此會有兩個broker.conf,這裏暫且命名 broker-a.confbroker-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

咱們能夠簡單把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-armqnamesrv-brmqbroker-armqbroker-brmqconsole
二、rmqconsole是一個可視化的工具,能夠經過頁面來查看RocketMQ相關信息。
三、能夠看出對於broker的配置文件broker.conf已經被broker-a/b.conf替換。


2、環境部署

上面僅僅是把配置文件寫好,但啓動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

二、安裝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的會由於端口的問題只能使用一臺。


參考

一、Apache RocketMQ

二、docker-compose

三、docker部署RocketMQ集羣(很是感謝)




只要本身變優秀了,其餘的事情纔會跟着好起來(中將9)
相關文章
相關標籤/搜索