跳到主要內容
版本:5.0

DLedger

DLedger 快速部署

前言

DLedger 是一組基於 Raft 協定的分散式記錄儲存元件。部署 RocketMQ 時,您可以選擇使用 DLedger 來取代原生複本儲存機制。本文檔主要介紹如何建置和部署基於 DLedger 的自動故障轉移 RocketMQ 集群。

1. 從原始碼建置

建置階段分為兩部分,應先建置 DLedger,然後再建置 RocketMQ。

1.1 建置 DLedger

$ git clone https://github.com/openmessaging/dledger.git
$ cd dledger
$ mvn clean install -DskipTests

1.2 建置 RocketMQ

$ git clone https://github.com/apache/rocketmq.git
$ cd rocketmq
$ git checkout -b store_with_dledger origin/store_with_dledger
$ mvn -Prelease-all -DskipTests clean install -U

2. 快速部署

建置成功後

#{rocketmq-version} replace with rocketmq actual version. example: 5.1.0
$ cd distribution/target/rocketmq-{rocketmq-version}/rocketmq-{rocketmq-version}
$ sh bin/dledger/fast-try.sh start

如果上述命令執行成功,則使用 mqadmin 操作命令檢查叢集狀態。

$ sh bin/mqadmin clusterList -n 127.0.0.1:9876

如果一切順利,將會出現以下內容

ClusterList

(BID 為 0 表示 Master,其餘為 Follower)

啟動成功後,生產者可以生產訊息,然後測試故障轉移場景。

執行以下命令可以快速停止叢集

$ sh bin/dledger/fast-try.sh stop

快速部署,預設組態在目錄 conf/dledger 中,預設儲存路徑為 /tmp/rmqstore。

3. 故障轉移

部署成功後,終止 Leader 程序(以上述範例來說,終止綁定埠 30931 的程序),然後等待 10 秒,使用 clusterList 命令檢查叢集狀態,你會發現 Leader 已切換到另一個節點。

Dledger 叢集部署

本文檔介紹如何部署自動故障轉移 RocketMQ-on-DLedger 群組。

RocketMQ-on-DLedger 群組是一個具有相同名稱的代理群組,需要至少 3 個節點,自動透過 Raft 演算法選出一個 Leader,其餘作為 Follower,在 Leader 和 Follower 之間複製資料以實現系統高可用性。RocketMQ-on-DLedger 群組可以自動故障轉移,並保持一致性。RocketMQ-on-DLedger 群組可以橫向擴充,也就是說,可以部署任何 RocketMQ-on-DLedger 群組對外提供服務。

1. 新叢集部署

1.1 編寫組態

每個 RocketMQ-on-DLedger 群組至少需要 3 台機器。(本文檔假設為 3 台)編寫 3 個組態檔,建議參考 conf/dledger 目錄中的範例組態檔。主要組態項目

名稱意義範例
enableDLegerCommitLog是否啟用 DLedgertrue
dLegerGroupDLedger Raft 群組名稱,建議與 brokerName 保持一致RaftNode00
dLegerPeersDLedger 群組的節點埠資訊,同一個群組中每個節點的組態保持一致。n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
dLegerSelfId節點 ID,必須屬於 dLegerPeers;同一個群組中每個節點唯一。n0
sendMessageThreadPoolNums傳送執行緒數目,建議設定與 CPU 核心數相同。16

以下為範例設定檔 conf/dledger/broker-n0.conf。

brokerClusterName = RaftCluster
brokerName=RaftNode00
listenPort=30911
namesrvAddr=127.0.0.1:9876
storePathRootDir=/tmp/rmqstore/node00
storePathCommitLog=/tmp/rmqstore/node00/commitlog
enableDLegerCommitLog=true
dLegerGroup=RaftNode00
dLegerPeers=n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913
## must be unique
dLegerSelfId=n0
sendMessageThreadPoolNums=16

1.2 啟動 Broker

啟動方式與舊版本一致。

nohup sh bin/mqbroker -c conf/dledger/xxx-n0.conf &
nohup sh bin/mqbroker -c conf/dledger/xxx-n1.conf &
nohup sh bin/mqbroker -c conf/dledger/xxx-n2.conf &

2. 升級舊叢集

若舊叢集以 Master 模式部署,則每個 Master 都需要轉換成一個 RocketMQ-on-DLedger 集群。
若舊叢集以 Master-Slave 模式部署,則每個 Master-Slave 集群都需要轉換成一個 RocketMQ-on-DLedger 集群。

2.1 終止舊 Broker

執行 kill 指令,或呼叫 bin/mqshutdown broker

2.2 檢查舊 Commitlog

RocketMQ-on-DLedger 集群中的每個節點都與舊 Commitlog 相容,但 Raft 複製程序僅對新增訊息運作。因此,為避免發生例外狀況,舊 Commitlog 必須一致。若舊叢集以 Master-Slave 模式部署,則關閉後可能會不一致。建議使用 md5sum 檢查至少 2 個最近的 Commitlog 檔案,若發生不一致,請透過複製來維護一致性。

儘管 RocketMQ-on-DLedger 集群可以使用 2 個節點部署,但它缺乏故障轉移能力(至少 3 個節點才能容忍一個節點故障)。請確保 Master 和 Slave 的 Commitlog 一致,然後準備 3 台機器,將舊 Commitlog 從 Master 複製到這 3 台機器(順便說一下,複製設定目錄)。

然後,繼續設定設定檔。

2.3 修改設定檔

請參閱新的叢集部署。

2.4 重新啟動 Broker

請參閱新的叢集部署。