Docker部署RocketMQ集羣

一、概述

Apache RocketMQ是阿里開源的一款高性能、高吞吐量、隊列模型的消息中間件的分佈式消息中間件。

關於RocketMQ集羣架構的詳細介紹,請參考鏈接:https://blog.csdn.net/Weixiaohuai/article/details/123607472

 

二、下載鏡像

docker pull apache/rocketmq:4.9.4
docker pull apacherocketmq/rocketmq-dashboard

主要用到了2個鏡像,第1個用來部署NameServer和Broker,第2個用來管理rocketmq

 

三、部署

本文主要採用一臺服務器來部署RocketMQ集羣,集羣部署模式採用多master模式,也就是2個NameServer和2個Broker

刷盤機制採用異步複製,異步刷盤

 

服務器配置:

操作系統:centos 7.6

硬件配置:2核4g

ip地址:192.168.137.138

 

創建目錄

mkdir -p /opt/rocketmq/logs/nameserver-a
mkdir -p /opt/rocketmq/logs/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 /opt/rocketmq/broker-a/
mkdir -p /opt/rocketmq/broker-b/

設置權限

chmod 777 -R /opt/rocketmq/logs/*
chmod 777 -R /opt/rocketmq/store/*

注意:這裏如果不設置權限,會導致docker寫入文件失敗,導致rocketmq啓動異常。

 

創建broker.conf

修改第一個節點配置

vim /opt/rocketmq/broker-a/broker-a.conf

內容如下:

brokerClusterName = rocketmq-cluster
brokerName = broker-a
brokerId = 0
#這個很有講究 如果是正式環境 這裏一定要填寫內網地址(安全)
#如果是用於測試或者本地這裏建議要填外網地址,因爲你的本地代碼是無法連接到阿里雲內網,只能連接外網。
brokerIP1 = 192.168.137.138
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 內網的(阿里雲有內網IP和外網IP)
namesrvAddr=192.168.137.138:9876;192.168.137.138:9877
autoCreateTopicEnable=true
#Broker 對外服務的監聽端口,
listenPort = 10911
#Broker角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH

注意:brokerIP1,namesrvAddr,這2個參數,一般配置爲內網ip,提供內網訪問。如果需要公網訪問,這裏一定要配置公網ip,否則無法訪問。

 

修改第二個節點配置

vim /opt/rocketmq/broker-b/broker-b.conf

內容如下:

brokerClusterName = rocketmq-cluster
brokerName = broker-b
brokerId = 0
#這個很有講究 如果是正式環境 這裏一定要填寫內網地址(安全)
#如果是用於測試或者本地這裏建議要填外網地址,因爲你的本地代碼是無法連接到阿里雲內網,只能連接外網。
brokerIP1 = 192.168.137.138
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH
# 內網的(阿里雲有內網IP和外網IP)
namesrvAddr=192.168.137.138:9876;192.168.137.138:9877
autoCreateTopicEnable=true
#Broker 對外服務的監聽端口,
listenPort = 10912
#Broker角色
#- ASYNC_MASTER 異步複製Master
#- SYNC_MASTER 同步雙寫Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盤方式
#- ASYNC_FLUSH 異步刷盤
#- SYNC_FLUSH 同步刷盤
flushDiskType=ASYNC_FLUSH
View Code

注意:brokerName,listenPort這2個參數和第一個節點不一樣,其他內容和第一個節點配置一樣

 

編寫 docker-compose.yml

vim /opt/rocketmq/docker-compose.yml

內容如下:

version: '3.5'
services:
  rmqnamesrv-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-a
    ports:
      - 9876:9876
    volumes:
      #- /opt/rocketmq/logs/nameserver-a:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-a

  rmqnamesrv-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-b
    ports:
      - 9877:9876
    volumes:
      #- /opt/rocketmq/logs/nameserver-b:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-b

  rmqbroker-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-a
    ports:
      - 10911:10911
    volumes:
      #- /opt/rocketmq/logs/broker-a/logs:/home/rocketmq/logs
      #- /opt/rocketmq/store/broker-a/store:/home/rocketmq/store
      - /opt/rocketmq/broker-a/broker-a.conf:/home/rocketmq/rocketmq-4.9.4/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 /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-a

  rmqbroker-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-b
    ports:
      - 10912:10912
    volumes:
      #- /opt/rocketmq/logs/broker-b/logs:/home/rocketmq/logs
      #- /opt/rocketmq/store/broker-b/store:/home/rocketmq/store
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-b:9877"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-b
  rmqconsole:
    image: apacherocketmq/rocketmq-dashboard
    container_name: rmqconsole
    ports:
      - 8087:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
    volumes:
      - /opt/rocketmq/console-ng/data:/tmp/rocketmq-console/data
    networks:
      rmq:
        aliases:
          - rmqconsole
networks:
  rmq:
    name: rmq
    driver: bridge
View Code

 

最後一步,執行docker-compose

cd /opt/rocketmq
docker-compose up -d

 

查看進程,使用命令docker-compose ps

# docker-compose ps
    Name                  Command               State                Ports              
----------------------------------------------------------------------------------------
rmqbroker-a    sh mqbroker -c /home/rocke ...   Up      10909/tcp,                      
                                                        0.0.0.0:10911->10911/tcp,       
                                                        10912/tcp, 9876/tcp             
rmqbroker-b    sh mqbroker -c /home/rocke ...   Up      10909/tcp, 10911/tcp,           
                                                        0.0.0.0:10912->10912/tcp,       
                                                        9876/tcp                        
rmqconsole     sh -c java $JAVA_OPTS -jar ...   Up      0.0.0.0:8087->8080/tcp          
rmqnamesrv-a   sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp,
                                                        0.0.0.0:9876->9876/tcp          
rmqnamesrv-b   sh mqnamesrv                     Up      10909/tcp, 10911/tcp, 10912/tcp,
                                                        0.0.0.0:9877->9876/tcp 

確保State狀態爲up

 

訪問管理平臺

http://192.168.137.138:8087

點擊右上角切換語言爲簡體中文,點擊集羣,效果如下:

 

看到這個圖,說明集羣啓動正常。

 

設置持久化配置

上面的 docker-compose.yml,註釋掉了一些文件掛載操作,因爲新版本的rocketmq無法啓動創建文件,直接掛載一個空目錄,會啓動報錯。

 

複製docker裏面的文件

docker cp rmqnamesrv-a:/home/rocketmq/logs /opt/rocketmq/logs/nameserver-a
docker cp rmqnamesrv-b:/home/rocketmq/logs /opt/rocketmq/logs/nameserver-b
docker cp rmqbroker-a:/home/rocketmq/logs /opt/rocketmq/logs/broker-a
docker cp rmqbroker-a:/home/rocketmq/store /opt/rocketmq/store/broker-a
docker cp rmqbroker-b:/home/rocketmq/logs /opt/rocketmq/logs/broker-b
docker cp rmqbroker-b:/home/rocketmq/store /opt/rocketmq/store/broker-b

設置權限,否則會寫入文件失敗,造成啓動失敗。

chmod 777 -R /opt/rocketmq/logs/*
chmod 777 -R /opt/rocketmq/store/*

 

關閉相關docker進程

docker-compose down

 

修改docker-compose.yml,開啓持久化配置

version: '3.5'
services:
  rmqnamesrv-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-a
    ports:
      - 9876:9876
    volumes:
      - /opt/rocketmq/logs/nameserver-a:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-a

  rmqnamesrv-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqnamesrv-b
    ports:
      - 9877:9876
    volumes:
      - /opt/rocketmq/logs/nameserver-b:/home/rocketmq/logs
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    command: sh mqnamesrv
    networks:
      rmq:
        aliases:
          - rmqnamesrv-b

  rmqbroker-a:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-a
    ports:
      - 10911:10911
    volumes:
      - /opt/rocketmq/logs/broker-a/logs:/home/rocketmq/logs
      - /opt/rocketmq/store/broker-a/store:/home/rocketmq/store
      - /opt/rocketmq/broker-a/broker-a.conf:/home/rocketmq/rocketmq-4.9.4/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 /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-a

  rmqbroker-b:
    image: apache/rocketmq:4.9.4
    container_name: rmqbroker-b
    ports:
      - 10912:10912
    volumes:
      - /opt/rocketmq/logs/broker-b/logs:/home/rocketmq/logs
      - /opt/rocketmq/store/broker-b/store:/home/rocketmq/store
      - /opt/rocketmq/broker-b/broker-b.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    environment:
      TZ: Asia/Shanghai
      NAMESRV_ADDR: "rmqnamesrv-b:9877"
      JAVA_OPTS: " -Duser.home=/opt"
      JAVA_OPT_EXT: "-server -Xms256m -Xmx256m -Xmn256m"
    command: sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
    links:
      - rmqnamesrv-a:rmqnamesrv-a
      - rmqnamesrv-b:rmqnamesrv-b
    networks:
      rmq:
        aliases:
          - rmqbroker-b
  rmqconsole:
    image: apacherocketmq/rocketmq-dashboard
    container_name: rmqconsole
    ports:
      - 8087:8080
    environment:
      JAVA_OPTS: -Drocketmq.namesrv.addr=rmqnamesrv-a:9876;rmqnamesrv-b:9877 -Dcom.rocketmq.sendMessageWithVIPChannel=false -Drocketmq.config.accessKey=rocketmq2 -Drocketmq.config.secretKey=12345678
    volumes:
      - /opt/rocketmq/console-ng/data:/tmp/rocketmq-console/data
    networks:
      rmq:
        aliases:
          - rmqconsole
networks:
  rmq:
    name: rmq
    driver: bridge
View Code

 

啓動相關docker進程

docker-compose up -d

 

等待30秒,再次訪問管理後臺,如果數據能顯示,表示正常。

 

測試

點擊主題,默認是空的

點擊新增

 

 選擇集羣,BROKER_NAME,輸入主題名test

 

點擊提交後,會出現一條數據,點擊發送消息

 

 點擊提交

 

 提示成功

 

 點擊消息,選擇主題test,點擊搜索,就可以看到發送記錄了。

 

 

 

本文參考鏈接:

https://www.136.la/jingpin/show-176132.html

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章