DLedger
DLedgerクイックデプロイメント
はじめに
DLedgerは、Raftプロトコルに基づく分散ログストレージコンポーネントのセットです。 RocketMQをデプロイする際に、ネイティブのレプリカストレージメカニズムの代わりにDLedgerを使用することを選択できます。 このドキュメントでは、主にDLedgerに基づく自動フェイルオーバーRocketMQクラスタを構築およびデプロイする方法について説明します。
1. ソースコードからビルドする
ビルドフェーズは2つのパートに分かれており、最初に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
すべてがうまくいけば、以下の内容が表示されます
(BIDが0はマスター、それ以外はフォロワー)
起動が成功したら、プロデューサーはメッセージを生成し、フェイルオーバーシナリオをテストできます。
次のコマンドを実行して、クラスタをすばやく停止します
$ sh bin/dledger/fast-try.sh stop
クイックデプロイメントでは、デフォルト設定はconf/dledgerディレクトリにあり、デフォルトのストレージパスは/tmp/rmqstoreです。
3. フェイルオーバー
デプロイメントが成功した後、リーダープロセスを強制終了します(上記の例では、ポート30931にバインドされているプロセスを強制終了します)。10秒待ってから、clusterListコマンドを使用してクラスタの状態を確認すると、リーダーが別のノードに切り替えられていることがわかります。
Dledgerクラスタデプロイメント
このドキュメントでは、自動フェイルオーバーRocketMQ-on-DLedgerグループをデプロイする方法について説明します。
RocketMQ-on-DLedgerグループは、**同じ名前**を持つブローカーグループであり、少なくとも3つのノードが必要です。Raftアルゴリズムによってリーダーを自動的に選出し、残りはフォロワーとして、リーダーとフォロワー間でデータを複製してシステムの高可用性を実現します。 RocketMQ-on-DLedgerグループは自動的にフェイルオーバーでき、一貫性を維持します。 RocketMQ-on-DLedgerグループは水平方向にスケールアップできます。つまり、外部にサービスを提供するRocketMQ-on-DLedgerグループをいくつでもデプロイできます。
1. 新しいクラスタのデプロイ
1.1 設定を記述する
各RocketMQ-on-DLedgerグループには、少なくとも3台の maszine が必要です。(このドキュメントでは3台と仮定します) 3つの設定ファイルを記述します。conf/dledger の設定ファイル例を参照することをお勧めします。 主要な設定項目
名前 | 意味 | 例 |
---|---|---|
enableDLegerCommitLog | DLedgerを有効にするかどうか | true |
dLegerGroup | DLedger Raftグループの名前。brokerNameと一致させることをお勧めします。 | RaftNode00 |
dLegerPeers | DLedgerグループのノードポート情報。各ノードの設定は、同じグループ内で一貫性を保ちます。 | 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 ブローカーを起動する
起動は古いバージョンと一貫性を保ちます。
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. 古いクラスタをアップグレードする
古いクラスタがマスタモードでデプロイされている場合、各マスタをRocketMQ-on-DLedgerグループに変換する必要があります。
古いクラスタがマスタスレーブモードでデプロイされている場合、各マスタスレーブグループをRocketMQ-on-DLedgerグループに変換する必要があります。
2.1 古いブローカーを強制終了する
killコマンドを実行するか、 `bin/mqshutdown broker` を呼び出します。
2.2 古いコミットログを確認する
RocketMQ-on-DLedgerグループの各ノードは古いコミットログと互換性がありますが、Raft複製プロセスは追加されたメッセージに対してのみ機能します。そのため、例外が発生しないように、古いコミットログは一貫性がある必要があります。古いクラスタがマスタスレーブモードでデプロイされている場合、シャットダウン後に一貫性がなくなる可能性があります。 md5sumを使用して、少なくとも2つの最近のコミットログファイルをチェックすることをお勧めします。一貫性がない場合は、コピーして一貫性を維持します。
RocketMQ-on-DLedgerグループは2ノードでデプロイできますが、フェイルオーバー機能がありません(少なくとも3ノードで1ノードの障害に耐えることができます)。 マスタとスレーブの両方のコミットログが一貫していることを確認し、3台の maszine を準備し、マスタからこの3台の maszine に古いコミットログをコピーします(ちなみに、設定ディレクトリもコピーします)。
次に、設定に進みます。
2.3 設定を変更する
新しいクラスタのデプロイを参照してください。
2.4 ブローカーを再起動する
新しいクラスタのデプロイを参照してください。