第9章 AMQ Streams のダウングレード
アップグレードしたバージョンの AMQ Streams で問題が発生した場合は、インストールを直前のバージョンに戻すことができます。
以下のダウングレードを実行できます。
Cluster Operator を以前の AMQ Streams バージョンに戻します。
すべての Kafka ブローカーとクライアントアプリケーションを、以前の Kafka バージョンにダウングレードします。
以前のバージョンの AMQ Streams では使用している Kafka バージョンがサポートされない場合、メッセージに追加されるログメッセージ形式のバージョンが一致すれば Kafka をダウングレードすることができます。
9.1. Cluster Operator の以前のバージョンへのダウングレード
AMQ Streams で問題が発生した場合は、インストールを元に戻すことができます。
この手順では、Cluster Operator デプロイメントを以前のバージョンにダウングレードする方法を説明します。
前提条件
- 既存の Cluster Operator デプロイメントを利用できる必要があります。
- 以前のバージョンのインストールファイルがダウンロード済みである必要があります。
手順
-
既存の Cluster Operator リソース (
/install/cluster-operator
ディレクトリー内) に追加した設定変更を覚えておきます。すべての変更は、以前のバージョンの Cluster Operator によって上書きされます。 - カスタムリソースを元に戻して、ダウングレードする AMQ Streams バージョンで利用可能なサポート対象の設定オプションを反映します。
Cluster Operator を更新します。
Cluster Operator を実行している namespace に従い、以前のバージョンのインストールファイルを編集します。
Linux の場合は、以下を使用します。
sed -i 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
MacOS の場合は、以下を使用します。
sed -i '' 's/namespace: .*/namespace: my-cluster-operator-namespace/' install/cluster-operator/*RoleBinding*.yaml
-
既存の Cluster Operator
Deployment
で 1 つ以上の環境変数を編集した場合、install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml
ファイルを編集し、これらの環境変数を使用します。
設定を更新したら、残りのインストールリソースとともにデプロイします。
oc replace -f install/cluster-operator
ローリングアップデートが完了するのを待ちます。
Kafka Pod のイメージを取得して、アップグレードが正常に完了したことを確認します。
oc get pod my-cluster-kafka-0 -o jsonpath='{.spec.containers[0].image}'
イメージタグには、新しい AMQ Streams バージョンと Kafka バージョンが順に示されます。例:
NEW-STRIMZI-VERSION-kafka-CURRENT-KAFKA-VERSION
Cluster Operator は以前のバージョンにダウングレードされました。
9.2. Kafka のダウングレード
Kafka バージョンのダウングレードは、Cluster Operator によって実行されます。
9.2.1. ダウングレードでの Kafka バージョンの互換性
Kafka のダウングレードは、互換性のある現在およびターゲットの Kafka バージョン と、メッセージがログに記録された状態に依存します。
そのバージョンが、クラスターでこれまで使用された inter.broker.protocol.version
設定をサポートしない場合、または新しい log.message.format.version
を使用するメッセージメッセージにメッセージが追加された場合は、下位バージョンの Kafka に戻すことはできません。
inter.broker.protocol.version
は、__consumer_offsets
に書き込まれたメッセージのスキーマなど、ブローカーによって保存される永続メタデータに使用されるスキーマを判断します。クラスターで以前使用された inter.broker.protocol.version
を認識しない Kafka バージョンにダウングレードすると、ブローカーが認識できないデータに遭遇します。
ダウングレードする Kafka のバージョンの関係は次のとおりです。
-
ダウングレードする Kafka バージョンの
log.message.format.version
が現行バージョンと 同じ である場合、Cluster Operator は、ブローカーのローリング再起動を 1 回実行してダウングレードを行います。 ダウングレードする Kafka バージョンの
log.message.format.version
が異なる 場合、稼働するクラスターのlog.message.format.version
が常にダウングレードされたバージョンによって使用されるバージョンに設定された場合のみダウングレードが可能になります。通常は、アップグレードの手順がlog.message.format.version
の変更前に中止された場合にのみ該当します。その場合、ダウングレードには以下が必要です。- 2 つのバージョンで Interbroker プロトコルが異なる場合、ブローカーのローリング再起動が 2 回必要です。
- 両バージョンで同じ場合は、ローリング再起動が 1 回必要です。
以前のバージョンでサポートされない log.message.format.version
が新バージョンで使われていた場合 (log.message.format.version
のデフォルト値が使われていた場合など)、ダウングレードは実行 できません。たとえば以下のリソースの場合、log.message.format.version
が変更されていないので、Kafka バージョン 2.6.0 にダウングレードできます。
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 2.7.0 config: log.message.format.version: "2.6" # ...
log.message.format.version
が "2.7"
に設定されているかまたは値がない (このためパラメーターに 2.7.0 ブローカーのデフォルト値 2.7 が採用される) 場合は、ダウングレードは実施できません。
9.2.2. Kafka ブローカーおよびクライアントアプリケーションのダウングレード
この手順では、AMQ Streams Kafka クラスターを Kafka の下位 (以前の) バージョンにダウングレードする方法 (2.7.0 から 2.6.0 へのダウングレードなど) を説明します。
前提条件
Kafka
リソースをダウングレードするには、以下を確認します。
- 重要: Kafka バージョンの互換性。
- 両バージョンの Kafka をサポートする Cluster Operator が稼働している。
-
Kafka.spec.kafka.config
に、ダウングレードする Kafka バージョンでサポートされていないオプションが含まれていない。 -
Kafka.spec.kafka.config
に、ダウングレードする Kafka バージョンでサポートされるlog.message.format.version
およびinter.broker.protocol.version
がある。
手順
Kafka クラスター設定を更新します。
oc edit kafka KAFKA-CONFIGURATION-FILE
Kafka.spec.kafka.version
を変更して、以前のバージョンを指定します。たとえば、Kafka 2.7.0 から 2.6.0 へのダウングレードは以下のようになります。
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka spec: # ... kafka: version: 2.6.0 1 config: log.message.format.version: "2.6" 2 inter.broker.protocol.version: "2.6" 3 # ...
注記log.message.format.version
およびinter.broker.protocol.version
の値は、浮動小数点数として解釈されないように文字列にする必要があります。Kafka バージョンのイメージが Cluster Operator の
STRIMZI_KAFKA_IMAGES
に定義されているイメージとは異なる場合は、Kafka.spec.kafka.image
を更新します。「Kafka バージョンおよびイメージマッピング」 を参照してください。
エディターを保存して終了し、ローリングアップデートの完了を待ちます。
更新をログで確認するか、または Pod 状態の遷移を監視して確認します。
oc logs -f CLUSTER-OPERATOR-POD-NAME | grep -E "Kafka version downgrade from [0-9.]+ to [0-9.]+, phase ([0-9]+) of \1 completed"
oc get pod -w
Cluster Operator のログで
INFO
レベルのメッセージを確認します。Reconciliation #NUM(watch) Kafka(NAMESPACE/NAME): Kafka version downgrade from FROM-VERSION to TO-VERSION, phase 1 of 1 completed
すべてのクライアントアプリケーション (コンシューマー) をダウングレードして、以前のバージョンのクライアントバイナリーを使用します。
これで、Kafka クラスターおよびクライアントは以前の Kafka バージョンを使用するようになります。
トピックメタデータの保存に ZooKeeper を使用する 0.22 よりも前のバージョンの AMQ Streams に戻す場合は、Kafka クラスターから内部トピックストアのトピックを削除します。
oc run kafka-admin -ti --image=registry.redhat.io/amq7/amq-streams-kafka-27-rhel7:1.7.0 --rm=true --restart=Never -- ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi-topic-operator-kstreams-topic-store-changelog --delete && ./bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic __strimzi_store_topic --delete
その他のリソース