rocketmq高可用集群部署(RocketMQ-on-DLedger Group)


rocketmq高可用集群部署(RocketMQ-on-DLedger Group)

rocketmq部署架構

rocketmq部署架構非常多,都是為了解決一些問題,越來越高可用,越來越復雜。

  1. 單master模式

    這種方式風險較大,一旦Broker重啟或者宕機時,會導致整個服務不可用。不建議線上環境使用,可以用於本地測試。

  2. 多master

    一個集群無Slave,全是Master,例如2個Master或者3個Master

    • 優點:配置簡單,單個Master宕機或重啟維護對應用無影響,在磁盤配置為RAID10時,即使機器宕機不可恢復情況下,由於RAID10磁盤非常可靠,消息也不會丟(異步刷盤丟失少量消息,同步刷盤一條不丟),性能最高;
    • 缺點:單台機器宕機期間,這台機器上未被消費的消息在機器恢復之前不可訂閱,消息實時性會受到影響。
  3. 多master異步復制slave

    每個Master配置一個Slave,有多對Master-Slave,HA采用異步復制方式,主備有短暫消息延遲(毫秒級),這種模式的優缺點如下:

    • 優點:即使磁盤損壞,消息丟失的非常少,且消息實時性不會受影響,同時Master宕機后,消費者仍然可以從Slave消費,而且此過程對應用透明,不需要人工干預,性能同多Master模式幾乎一樣;
    • 缺點:Master宕機,磁盤損壞情況下會丟失少量消息。
  4. 多master同步復制slave。

    每個Master配置一個Slave,有多對Master-Slave,HA采用同步雙寫方式,即只有主備都寫成功,才向應用返回成功,這種模式的優缺點如下:

    • 優點:數據與服務都無單點故障,Master宕機情況下,消息無延遲,服務可用性與數據可用性都非常高;
    • 缺點:性能比異步復制模式略低(大約低10%左右),發送單個消息的RT會略高,且目前版本在主節點宕機后,備機不能自動切換為主機。
  5. RocketMQ-on-DLedger Group(可自動主從容災)

    之前的幾種方式,能解決數據冗余備份,一定高可用問題。但是master故障后,多master多slave架構能提供繼續想slave消費數據。但是生產數據呢?這會導致生產服務中斷不可用。所以又出現了RocketMQ-on-DLedger Group架構。可自主容災。引入了DLedger工具。

rocketmq架構:

部署架構

部署架構:RocketMQ-on-DLedger Group

服務器數量3台。

部署操作步驟

  1. 官網下載rocketmq二進制包

    官網下載地址:http://rocketmq.apache.org/dowloading/releases/

  2. 解壓並安裝

    cd /opt
    wget http://192.168.0.155:9999/rocketmq-all-4.9.1-bin-release.zip
    unzip rocketmq-all-4.9.1-bin-release.zip 
    mkdir /data/rocketmq-4.9.1-raftcluster
    
  3. 3台主機分別配置nameserver

    修改bin目錄下的文件:runserver.sh,將jvm調整至1G。(由於我服務器資源內存有限)

  4. 3台主機分別啟動nameserver

    cd ./bin   #切換到bin目錄
    nohup sh mqnamesrv > ./nameserver.log 2>&1 &
    

    每台nameserver是不需要互相通信,NameServer之間數據不同步。和hdfs的nameserver不是一樣的概念。

    通過命令netstat -tunlp | grep 9876檢查端口9876是否存在

  5. 編輯broker的配置文件

    第一台主機node0的配置(192.168.0.218):vim ./conf/dledger/broker-n0.conf

    內容如下:

    brokerClusterName = RaftCluster  #集群名
    brokerName=RaftNode00  #broker組名,建議和dLegerGroup名一致
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node00/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00  #dleger組名
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911  #注意配置格式
    ## must be unique
    dLegerSelfId=n0  #每個dleger組下面的實例ip,保證唯一
    sendMessageThreadPoolNums=4  #發送線程數,建議和服務器cpu一致
    

    第二台主機node1的配置(192.168.0.89):vim ./conf/dledger/broker-n1.conf

    內容如下:

    brokerClusterName = RaftCluster  #集群名
    brokerName=RaftNode00  #broker組名,建議和dLegerGroup名一致
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node01/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00  #dleger組名
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911  #注意配置格式
    ## must be unique
    dLegerSelfId=n1   #每個dleger組下面的實例ip,保證唯一
    sendMessageThreadPoolNums=4
    

    第三台主機node2的配置(192.168.0.77):vim ./conf/dledger/broker-n2.conf

    內容如下:

    brokerClusterName = RaftCluster
    brokerName=RaftNode00
    listenPort=30911
    namesrvAddr=192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876
    storePathRootDir=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02
    storePathCommitLog=/data/rocketmq-4.9.1-raftcluster/rmqstore/node02/commitlog
    enableDLegerCommitLog=true
    dLegerGroup=RaftNode00
    dLegerPeers=n0-192.168.0.218:40911;n1-192.168.0.89:40911;n2-192.168.0.77:40911  #注意配置格式
    ## must be unique
    dLegerSelfId=n2
    sendMessageThreadPoolNums=4
    
  6. 修改3台broker的jvm大小,默認是8G

    ./bin目錄下,由於我服務器沒有8G內存,需修改jvm大小。

    vim runbroker.sh

  1. 每台實例啟動broker實例進程

    cd /data/rocketmq-4.9.1-raftcluster/rocketmq-all-4.9.1-bin-release/bin  #安裝路徑
    
    #在第一台服務器上啟動broker
    nohup ./mqbroker -c ../conf/dledger/broker-n0.conf > ./broker.log 2>&1 &
    
    #在第二台服務器上啟動broker
    nohup ./mqbroker -c ../conf/dledger/broker-n1.conf > ./broker.log 2>&1 &
    
    #在第三台服務器上啟動broker
    nohup ./mqbroker -c ../conf/dledger/broker-n2.conf > ./broker.log 2>&1 &
    

    驗證:

    查看輸出日志或者用netstat -tunlp | grep 30911命令查看端口是否啟動

  2. 用命令行查看dleger集群的狀態

    sh bin/mqadmin clusterList -n 127.0.0.1:9876

  3. 安裝rocketmq-console的web管理頁面(rocketmq-dashboard)

    備注:新版本rocketmq-console已經改名叫rocketmq-dashboard

    rocketmq-dashboard下載地址為:https://github.com/apache/rocketmq-dashboard

    unzip rocketmq-dashboard-master.zip
    cd rocketmq-dashboard-master
    mvn clean package -Dmaven.test.skip=true  #打包如果失敗,可以多嘗試幾次
    
    #構建成功后,jar包在target目錄里面
    
    #啟動rocketmq-dashboardd的jar包
    java -jar rocketmq-dashboard-1.0.1-SNAPSHOT.jar --rocketmq.config.namesrvAddr="192.168.0.218:9876;192.168.0.89:9876;192.168.0.77:9876" --server.port=8080
    

    訪問服務器的192.168.0.218:8080端口,能看到集群信息,如下:

  1. RocketMQ-on-DLedger Group集群部署完成。

其他

  1. rocketmq的默認日志文件在啟動用戶的家目錄下的logs里面。

    如需變更需要修改以下3個文件

  1. 本教程部署的RocketMQ-on-DLedger Group。只有一個分片,如果服務器數量充足,可以部署多分片。部署方式參考前面的操作步驟。只是部署更多的服務器,修改配置而已。


免責聲明!

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



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