Centos下Docker部署RocketMQ集群


  • 關於RocketMQ

  RocketMQ是阿里開源的消息中間件, 支持分布式部署,具有高並發高可用的特性,總之很牛吧,對於他的詳細介紹網上有很多,現在社區也算比較活躍了,就不多介紹(其實是了解也不深入,就不誤人子弟了).

  這么厲害的中間件當然要去體驗一番,學習學習, 而既然要學習使用,就先得部署了環境再說,所以就有了這篇安裝步驟.

  • 環境

  16G內存雲虛擬機,Centos7.2,16G內存,由於性能並不高,所以測試條件有限,可能會有所勘誤,還請見諒.

  目前RocketMQ官方支持Centos和Alpine(很小巧的操作系統,用於制作docker鏡像很適合)

  默認系統中已經安裝有docker, 沒有安裝的同學請轉到https://www.cnblogs.com/stulzq/p/7743073.html安裝一下先,一般來說安裝好后需要設置一下鏡像加速,設置方法請查閱https://yq.aliyun.com/articles/29941

  • 開始
  1. 下載rocketmq-docker項目地址, 這個項目中包含了Centos和alpine系統創建鏡像的腳本,只需要簡單修改即可
  2. 進入image-build目錄,可以看到里面有一個Docker-centos文件,如下圖所示
  3. 打開Dockerfile,發現會去下載rocketmq的安裝包,並且默認是從Apache的主站下載的,所以會非常的慢,這里改成清華鏡像下載
    如下

    修改第50行左右為https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/${ROCKETMQ_VERSION}/rocketmq-all-${ROCKETMQ_VERSION}-bin-release.zip,
    這里要注意,如果你是從鏡像站拷貝的鏈接,很有可能拿到的URL協議名后面沒有帶":",比如這個清華的鏡像開始是"http//",

  4. 保存文件,執行build-image.sh

    這里的Version指rocketmq的版本,BaseImage指基礎鏡像,這里可以選centos或alpine,這里選擇了centos,rocketmq版本4.5.0.
    一頓輸出之后,有如下提示則說明我們的rocketmq鏡像安裝成功

    通過

    docker images

    查看可以看到有一個rocketmq鏡像

    至此我們的創建鏡像就結束了 

  5. 在本地創建MQ配置文件
    配置文件主要就是broker的配置文件, 在這里創建了兩個broker master以形成broker集群,所以配置了兩個配置文件,分別為broker-a.conf和broker-b.conf
    下面貼出配置文件
    broker-a.conf

    brokerClusterName = rocketmq-cluster
    brokerName = broker-a
    brokerId = 0
    brokerIP1 = 你的服務器IP, 如果你要從外網發送接收消息,需要貼外網IP
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    namesrvAddr = ip1:9876;ip2:9877, 
    autoCreateTopicEnable = true
    listenPort = 10911

    broker-b.conf

    brokerClusterName = rocketmq-cluster
    brokerName = broker-b
    brokerId = 0
    brokerIP1 = ip
    deleteWhen = 04
    fileReservedTime = 48
    brokerRole = ASYNC_MASTER
    flushDiskType = ASYNC_FLUSH
    namesrvAddr = ip1:9876;ip2:9877
    autoCreateTopicEnable = true
    listenPort = 10921

    上面的namesrvAddr中,如果broker能用內網訪問就貼內網IP, 而且一般broker訪問nameserver都是通過內網.
    在broker-b中, 需要修改的主要是brokerName,其他都可以保持一致,但listenPort需要跟后面docker-compose.yml中的ports匹配, docker-compose.yml在下面也會貼出來   

  6. 通過docker-compose創建RocketMQ服務
    k8s, swarm什么的又不會,只能用docker-compose維持一下生活這樣子.
    通過docker-compose,我們創建兩個nameserver, 兩個broker和監控台,兩個broker都是master模式,以構成注冊中心和數據服務的集群,高級應用filter以后再說
    docker-compose.yml
    version: '3.5'
    services:
     rmqnamesrv-a:
      image: rocketmqinc/rocketmq
      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
      container_name: rmqnamesrv-b
      ports: 
       - 9877:9876
      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
      container_name: rmqbroker-a
      ports:
       - 10911:10911
       - 10912:10912
      volumes:
       - /opt/rocketmq/logs/broker-a:/opt/logs
       - /opt/rocketmq/store/broker-a:/opt/store
       - /etc/rocketmq/conf/broker-a.conf:/opt/rocketmq-4.5.0/conf/broker.conf
      environment:
       TZ: Asia/Shanghai
       NAMESRV_ADDR: "rmqnamesrv-a:9876"
       JAVA_OPTS: "-Duser.home=/opt"
       JAVA_OPT_EXT: "-Xms256m -Xmx256m"
      command: sh mqbroker -c /opt/rocketmq-4.5.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
      container_name: rmqbroker-b
      ports:
       - 10921:10921
       - 10922:10922
      volumes:
       - /opt/rocketmq/logs/broker-b:/opt/logs
       - /opt/rocketmq/store/broker-b:/opt/store
       - /etc/rocketmq/conf/broker-b.conf:/opt/rocketmq-4.5.0/conf/broker.conf
      environment:
       TZ: Asia/Shanghai
       NAMESRV_ADDR: "rmqnamesrv-b:9876"
       JAVA_OPTS: "-Duser.home=/opt"
       JAVA_OPT_EXT: "-Xms256m -Xmx256m"
      command: sh mqbroker -c /opt/rocketmq-4.5.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 -Dserver.port=9001" 
      networks:
       rmq:
        aliases:
         - rmqconsole
      networks:
       rmq:
        aliases:
         - rmqbroker-b 
    networks:
     rmq:
      name: rmq
      driver: bridge

    NOTE: docker-compose.yml中的volumes對應的配置項中,本地目錄應該先創建好,並配置好權限

  7. 啟動服務
    docker-compose up

    在docker-compose.yml所在目錄執行上述代碼,就可以啟動整個服務.
    在啟動好以后,就可以通過瀏覽器進入控制台,訪問地址為http://consoleIp:9001/.
    這里的端口我配了9001,可以通過docker-compose.yml中的rmqconsole服務修改

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM