4.13. クラスターのスケールダウンをサポートするためのメッセージ移行の有効化
クラスター内のブローカーの数をスケールダウンして、クラスター内の残りの Pod にメッセージを移行できるようにするには、メッセージ移行を有効にする必要があります。
メッセージ移行が有効になっているクラスターをスケールダウンすると、スケールダウンコントローラーがメッセージ移行プロセスを管理します。
4.13.1. メッセージ移行プロセスの手順 リンクのコピーリンクがクリップボードにコピーされました!
メッセージ移行プロセスは、次の手順を実行します。
- デプロイメントの意図的なスケールダウンにより、デプロイメント内のブローカー Pod がシャットダウンすると、Operator は自動的にスケールダウンカスタムリソースをデプロイして、メッセージ移行の準備をします。
孤立した永続ボリューム (PV) の有無を確認するには、縮小コントローラーはボリューム要求上の序数を探します。コントローラーは、ボリューム要求の序数を、プロジェクトの StatefulSet (ブローカークラスター) で実行されているブローカー Pod と比較します。
ボリューム要求の序数がブローカー Pod の序数よりも高くなる場合、スケールダウンコントローラーは、その序数のブローカー Pod がシャットダウンされ、メッセージングデータが別のブローカー Pod に移行する必要があるかどうかを判断します。
- 縮小コントローラーはドレイン Pod を起動します。ドレイン Pod は、クラスター内の他のライブブローカー Pod の 1 つに接続し、メッセージをそのライブブローカー Pod に移行します。
以下の図は、スケールダウンコントローラー (ドレインコントローラーとしても知られる) がメッセージを稼働中のブローカー Pod に移行する方法を示しています。
メッセージを動作中のブローカー Pod に正常に移行した後、ドレイン Pod はシャットダウンし、スケールダウンコントローラーは孤立した PV の PVC を削除します。PV は Released の状態に戻ります。
PV の回収ポリシーが retain に設定されている場合、PV を削除して再作成するまで、その PV を別の Pod で使用することはできません。たとえば、クラスターをスケールダウンした後にスケールアップした場合、PV を削除して再作成するまで、起動した Pod で PV を使用することはできません。
関連情報
- ブローカーのデプロイメントをスケールダウンする際のメッセージ移行の例については、「メッセージ移行の有効化」 を参照してください。
4.13.2. メッセージ移行の有効化 リンクのコピーリンクがクリップボードにコピーされました!
ActiveMQArtemis カスタムリソース (CR) でメッセージ移行を有効にすることができます。
前提条件
- 基本的なブローカーデプロイメントがすでにある。「基本的なブローカーインスタンスのデプロイ」 を参照してください。
- メッセージの移行の仕組みを理解している。詳細は、「メッセージ移行プロセスの手順」 を参照してください。
- 縮小コントローラーは、単一の OpenShift プロジェクト内でのみ機能します。コントローラーは、別のプロジェクトのブローカー間でメッセージを移行できません。
- ブローカーデプロイメントを 0 (ゼロ) にスケールダウンする場合、メッセージングデータを移行できる稼働中のブローカー Pod がないため、メッセージ移行は行われません。ただし、デプロイメントをゼロにスケールダウンしてから、元のデプロイメントよりも小さいサイズに再び戻すと、シャットダウンされたブローカーについてのドレイン Pod が起動します。
手順
ブローカーデプロイメントの CR インスタンスを編集します。
OpenShift コマンドラインインターフェイスの使用:
- ブローカーデプロイメントのプロジェクトに CR をデプロイする権限を持つユーザーとして OpenShift Container Platform にログインします。
デプロイメントの CR を編集します。
oc edit ActiveMQArtemis <CR instance name> -n <namespace>
oc edit ActiveMQArtemis <CR instance name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
OpenShift Container Platform Web コンソールの使用
- ブローカーデプロイメントのプロジェクトに CR をデプロイする権限を持つユーザーとして OpenShift Container Platform にログインします。
-
左側のペインで、
をクリックします。 - ActiveMQArtemis CRD をクリックします。
- Instances タブをクリックします。
- ブローカーデプロイメントのインスタンスをクリックします。
YAML タブをクリックします。
コンソールで、YAML エディターが開き、CR インスタンスを編集できるようになります。
CR の
deploymentPlanセクションで、messageMigration属性を追加し、trueに設定します。設定されていない場合は、persistenceEnabled属性を追加し、trueに設定します。以下に例を示します。spec: deploymentPlan: messageMigration: true persistenceEnabled: true ...spec: deploymentPlan: messageMigration: true persistenceEnabled: true ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらの設定は、クラスターブローカーデプロイメントのサイズを後でスケールダウンすると、Operator はスケールダウンコントローラーが自動的に起動し、メッセージを実行中のブローカー Pod に移行することができます。
- CR を保存します。
(オプション) 以下の手順を実行してクラスターをスケールダウンし、メッセージ移行プロセスを表示します。
既存のブローカーデプロイメントで、実行中の Pod を確認します。
oc get pods
$ oc get podsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のような出力が表示されます。
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8s
activemq-artemis-operator-8566d9bf58-9g25l 1/1 Running 0 3m38s ex-aao-ss-0 1/1 Running 0 112s ex-aao-ss-1 1/1 Running 0 8sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の出力では、3 つの Pod が実行されていることが示されています。1 つはブローカー Operator 自体用で、デプロイメントの各ブローカーに個別の Pod が実行されていることを示しています。
各 Pod にログインし、各ブローカーにメッセージを送信します。
Pod
ex-aao-ss-0にクラスター IP アドレスが172.17.0.6である場合は、以下のコマンドを実行します。/opt/amq/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password admin
$ /opt/amq/bin/artemis producer --url tcp://172.17.0.6:61616 --user admin --password adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Pod
ex-aao-ss-1にクラスター IP アドレスが172.17.0.7である場合は、以下のコマンドを実行します。/opt/amq/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password admin
$ /opt/amq/bin/artemis producer --url tcp://172.17.0.7:61616 --user admin --password adminCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前述のコマンドは、各ブローカーに
TESTというキューを作成し、各キューに 1000 個のメッセージを追加します。クラスターを 2 つのブローカーにスケールダウンします。
-
メインブローカー CR
broker_activemqartemis_cr.yamlを開きます。 -
CR で、
deploymentPlan.sizeを1に設定します。 コマンドラインで変更を適用します。
oc apply -f deploy/crs/broker_activemqartemis_cr.yaml
$ oc apply -f deploy/crs/broker_activemqartemis_cr.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Pod
ex-aao-ss-1がシャットダウンを開始したことを確認します。縮小コントローラーは、同じ名前の新しいドレイン Pod を起動します。このドレイン Pod は、ブローカー Podex-aao-ss-1からクラスター内の他のブローカー Pod にすべてのメッセージを移行した後にシャットダウンします (ex-aao-ss-0)。
-
メインブローカー CR
-
ドレイン Pod がシャットダウンされたら、ブローカー Pod
ex-aao-ss-0のTESTキューのメッセージ数を確認します。キューのメッセージ数が 2000 であることを確認できます。これは、ドレイン Pod がシャットダウンするブローカー Pod から 1000 個のメッセージを正常に移行しました。