第17章 Cruise Control を使用した JBOD ディスクでのパーティションの再割り当て
JBOD ストレージを使用しており、Cruise Control が Strimzi とともにインストールされている場合は、同じブローカー上のストレージに使用される JBOD ディスク間でパーティションを再割り当てし、データを移動できます。この機能により、データを失うことなく JBOD ディスクを削除することもできます。
Kafka kafka-log-dirs.sh ツールを使用して、Kafka トピックパーティションの移動前と移動後の情報とブローカー上の場所を確認します。
Cruise Control REST API の remove_disks エンドポイントにリクエストを送信して、クラスター内のディスクを降格し、そのパーティションを他のディスクボリュームに再割り当てします。
前提条件
- Red Hat Enterprise Linux に Kafka ユーザーとしてログインしている。
- Cruise Control を設定 している。
- Cruise Control Metrics Reporter をデプロイ している。
- Kafka ブローカーが JBOD ストレージを使用している。
- ブローカーには複数の JBOD ディスクが設定されている必要がある。
この手順では、3 つの JBOD ボリュームとトピックレプリケーション係数 3 で設定されたブローカーを使用します。
JBOD ストレージを使用したブローカー設定の例
node.id=1
process.roles=broker
default.replication.factor = 3
log.dirs = /var/lib/kafka/data-0,/var/lib/kafka/data-1,/var/lib/kafka/data-2
# ...
この手順では、ブローカー 1 のパーティションをボリューム 0 からボリューム 1 と 2 に再割り当てします。
手順
Cruise Control サーバーを起動します。デフォルトでは、サーバーはポート 9092 で起動します。オプションで別のポートを指定します。
cd ./cruise-control/ ./kafka-cruise-control-start.sh config/cruisecontrol.properties <port_number>Cruise Control が実行していることを確認するには、Cruise Control サーバーの
/stateエンドポイントに GET リクエストを送信します。curl -X GET 'http://<cc_host>:<cc_port>/kafkacruisecontrol/state'(オプション) Kafka
kafka-log-dirs.shツールを使用して、ブローカー上のパーティションレプリカデータを確認します。kafka-log-dirs.sh --describe --bootstrap-server my-cluster-kafka-bootstrap:9092 --broker-list 1 --topic-list my-topicこのツールは、各ログディレクトリーのトピック情報を返します。この例では、情報を
my-topicに制限して、単一のトピックに対する手順を表示しています。ログディレクトリーに使用される JBOD ボリュームは、/var/lib/kafka/<volume_id>にマウントされます。各ログディレクトリーの出力データの例
{ "brokers": [ { "broker": 1,1 "logDirs": [ { "partitions": [2 { "partition": "my-topic-0", "size": 0, "offsetLag": 0, "isFuture": false } ], "error": null,3 "logDir": "/var/lib/kafka/data-0"4 }, { "partitions": [ { "partition": "my-topic-1", "size": 0, "offsetLag": 0, "isFuture": false } ], "error": null, "logDir": "/var/lib/kafka/data-1" }, { "partitions": [ { "partition": "my-topic-2", "size": 0, "offsetLag": 0, "isFuture": false } ], "error": null, "logDir": "/var/lib/kafka/data-2" } ] } ] }ノードからボリュームを削除します。
curl -v -X POST 'http://<cc_host>:<cc_port>/kafkacruisecontrol/remove_disks?dryrun=false&brokerid_and_logdirs=1-/var/lib/kafka/data-0'このコマンドは、削除するボリュームのブローカー ID とログディレクトリーを指定します。成功した場合、ブローカー 1 のボリューム 0 からパーティションが再割り当てされます。
注記必要に応じて、変更を適用する前にこの操作のドライランを実行できます。
ボリュームの削除とデータの移動を確認するには、Kafka
kafka-log-dirs.shツールを再度使用します。この例では、ボリューム 0 が削除され、
my-topic-0パーティションが/var/lib/kafka/data-1に再割り当てされています。パーティションの再割り当て後の出力データの例
{ "brokers": [ { "broker": 1, "logDirs": [ { "partitions": [ { "partition": "my-topic-0", "size": 0, "offsetLag": 0, "isFuture": false }, { "partition": "my-topic-1", "size": 0, "offsetLag": 0, "isFuture": false } ], "error": null, "logDir": "/var/lib/kafka/data-1" }, { "partitions": [ { "partition": "my-topic-2", "size": 0, "offsetLag": 0, "isFuture": false } ], "error": null, "logDir": "/var/lib/kafka/data-2" } ] } ] }