オープンソースのApache RocketMQと比較して、Alibaba Cloud ApsaraMQ for RocketMQはより安定しており、より包括的なO&Mシステムを提供します。 Apache RocketMQクラスターをApsaraMQ for RocketMQインスタンスに移行して、エクスペリエンスを向上させることができます。 このトピックでは、ApsaraMQ for RocketMQが提供する移行ツールを使用して、自己管理型Apache RocketMQクラスターをApsaraMQ for RocketMQインスタンスに移行する方法について説明します。
前提条件
ApsaraMQ for RocketMQ 5.0インスタンスが作成されました。 詳細は、インスタンスの作成をご参照ください。
サービスにリンクされたロールが作成されます。 詳細については、「サービスにリンクされたロール」をご参照ください。
ロール名: AliyunServiceRoleForRMQMigration
ポリシー: AliyunServiceRolePolicyForRMQMigration
説明: ApsaraMQ for RocketMQがこのロールを引き受けて仮想プライベートクラウド (VPC) にアクセスできるようにします。
使用上の注意
移行の前に、スケジュールされたメッセージと再試行に失敗したメッセージがApache RocketMQクラスターに存在するかどうかを確認します。 移行が完了すると、すべてのコンシューマーおよびプロデューサークライアント接続がApsaraMQ for RocketMQインスタンスに切り替えられます。 これにより、一部のスケジュールされたメッセージまたは再試行に失敗したメッセージの消費が失敗する可能性があります。 スケジュールされたメッセージや再試行に失敗したメッセージを消費するために、一部のコンシューマプロセスをApache RocketMQクラスターに保持することを推奨します。
移行プロセス
次の図は、Apache RocketMQクラスターをApsaraMQ for RocketMQインスタンスに移行するプロセスを示しています。
移行のリスク、Apache RocketMQクラスターとApsaraMQ for RocketMQインスタンス間のバージョンと機能の互換性を評価して、移行するデータの範囲を決定します。
Apache RocketMQクラスターのネットワークとノードに関する情報を指定します。 ApsaraMQ for RocketMQは、トラフィックの切り替えとトラフィックの切り替えチェックに権限を付与するための最小スコープポリシーに基づいてネットワークに接続します。
ApsaraMQ for RocketMQは、Apache RocketMQクラスター内のトピックとグループのメタデータを読み取り、そのメタデータをコピー先のApsaraMQ for RocketMQインスタンスにコピーします。
移行に関与するすべてのプロデューサーとコンシューマーを確認し、移行元Apache RocketMQクラスターのメッセージングコードのエンドポイントを移行先ApsaraMQ for RocketMQインスタンスのエンドポイントに変更します。
トピックごとに段階的なトラフィック切り替えを実行します。
ステップ1: 移行タスクを評価する
Apache RocketMQクラスターをApsaraMQ for RocketMQインスタンスにバッチで移行する前に、移行タスクの技術的な評価を実行し、移行範囲を確認する必要があります。
技術評価: Apache RocketMQクラスターの環境が移行の要件を満たしているかどうかを判断するのに役立ちます。 これにより、移行の前後でサポートされる機能に関する情報を取得することもできます。
移行範囲の確認: ビジネスの重要性とビジネスアプリケーション間の結合に基づいて、段階的移行をバッチで実行することを推奨します。 ビジネスの一部を移行し、移行したビジネスが安定した後に残りのビジネスを移行できます。
テクニカル評価
Apache RocketMQクラスターの制限: ApsaraMQ for RocketMQインスタンスにApache RocketMQクラスターを移行する前に、クラスターが要件を満たしているかどうかを評価します。 クラスターが要件を満たしていない場合、 チケットを起票します。 次の表に、Apache RocketMQクラスターの制限を示します。
制限事項
説明
デプロイ済みバージョン
Apache RocketMQ 4.xおよび5.xブローカーがサポートされています。
ネットワーク
ソースApache RocketMQクラスターはVPCにデプロイする必要があります。 ソースApache RocketMQクラスターがオンプレミスデータセンターにデプロイされている場合は、VPCからクラスターにアクセスできることを確認してください。
リージョン
セルフマネージド型Apache RocketMQクラスターは、中国 (杭州) 、中国 (上海) 、中国 (北京) 、中国 (深セン) 、中国 (張家口) のリージョンでApsaraMQ for RocketMQインスタンスに移行できます。
機能
ApsaraMQ for RocketMQは、アクセス制御リスト (ACL) 検証をサポートしていません。 Apache RocketMQクラスターのACL機能を有効にする場合は、移行前にこの機能を無効にする必要があります。 ACL機能を無効にしない場合、移行後にこの機能は有効になりません。
パラメーター
メッセージサイズ
メッセージのサイズは4 MBを超えることはできません。
メッセージ保存期間
最小値: 24。 単位:時間。
最大値: 720。 単位:時間。
スケジュールされたメッセージの最大遅延時間
サブスクリプションおよび従量課金制のStandard EditionインスタンスおよびサーバーレスのStandard EditionおよびProfessional Editionインスタンス: 7日間。
サブスクリプションおよび従量課金のProfessional EditionおよびEnterprise Platinum Editionインスタンス: 40日。
詳細については、「クォータと制限」をご参照ください。
SDKバージョンの制限: 移行ソリューションは、最小限の変更の原則に従います。 ほとんどの場合、クライアントSDKのバージョンは自動的にアップグレードされます。 移行にメジャーバージョンのアップグレードが含まれる場合、新しい機能が追加され、安定性の最適化が提供されます。 この場合、移行中にSDKのバージョンをアップグレードすることを推奨します。
SDK
プログラミング言语
SDKバージョン
アップグレードが必要かどうか
Apache RocketMQリモート処理SDK
次のコードは、このタイプのSDKのエンドポイント形式を示しています。
producer.setNamesrvAddr("xxx:9876"); consumer.setNamesrvAddr("xxx:9876");
Java
5.x SDK
このタイプのSDKはApsaraMQ for RocketMQインスタンスと互換性があります。 アップグレードは必要ありません。
JavaとC ++
4.x SDK
PullConsumer、DefaultLitePullConsumer、およびDefaultPullConsumer操作がソースApache RocketMQクラスターによって呼び出される場合、SDKを5.xにアップグレードする必要があります。 詳細については、「概要」をご参照ください。
Apache RocketMQ gRPC SDK
次のコードは、このタイプのSDKのエンドポイント形式を示しています。
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(192.168.XX.XX:9876) .setCredentialProvider(sessionCredentialsProvider) .build();
Java、C ++ 、Go、およびC#
5.x SDK
このタイプのSDKはApsaraMQ for RocketMQインスタンスと互換性があります。 アップグレードは必要ありません。
移行スコープの確認
ApsaraMQ for RocketMQが提供する移行ソリューションでは、Apache RocketMQクラスターをApsaraMQ for RocketMQインスタンスにトピックごとに移行できます。 一括移行、カナリアリリース、ロールバックもサポートされています。 これにより、大規模な変更によるリスクが効果的に軽減されます。
移行する前に、各トピックのビジネススコープを確認し、各バッチで移行するトピックを決定する必要があります。
トピックの選択: クラスターで移行するトピックを選択し、各バッチで移行するトピックを決定します。 まず、非中核ビジネスのトピックを移行することを推奨します。
アップストリームおよびダウンストリームアプリケーションからの連携: 移行するトピックを選択した後、これらのトピックを使用するすべてのプロデューサーおよびコンシューマーアプリケーションにエンドポイントの変更を通知する必要があります。
重要トピックを使用するすべてのアップストリームおよびダウンストリームアプリケーションに通知するようにしてください。 特定のアプリケーションがエンドポイントを変更しない場合、メッセージ消費遅延などのリスクが発生する可能性があります。
ステップ2: ネットワークの設定
このステップでは、移行タスクを作成し、ソースApache RocketMQクラスターのネットワークを設定する必要があります。 ApsaraMQ for RocketMQが提供する移行ツールは、設定されたネットワークを使用して、ソースApache RocketMQクラスターのメタデータを読み取り、移行タスクを管理できます。
使用上の注意
ApsaraMQ for RocketMQが提供する移行ツールは、最小スコープポリシーに基づいて、ソースApache RocketMQクラスターに関する次の情報にのみアクセスできます。
トピックのメタデータ
グループのメタデータ
トピックの動的ルーティング登録に関する情報
コンシューマーの接続とメッセージの蓄積に関する情報
移行ツールは、ソースApache RocketMQクラスターに関する他の情報にアクセスしたり、クラスターに設定情報を書き込んだりしません。 したがって、Apache RocketMQクラスターへの移行ツールのアクセスは、クラスターの実行に影響を与えません。
次の手順に進む前に、ネットワーク設定が有効であることを確認してください。 次のステップに入ると、ネットワーク設定ステップにロールバックすることはできません。 ネットワーク設定を変更するには、新しい移行タスクを作成する必要があります。
手順
ApsaraMQ for RocketMQコンソールにログインします。
上部のナビゲーションバーで、ソースApache RocketMQクラスターとターゲットApsaraMQ for RocketMQインスタンスが存在するリージョンを選択します。 左側のナビゲーションウィンドウで、 を選択します。
クラウドへの移行ページで、タスクの作成をクリックします。
移行タスクの作成パネルで、パラメータを設定し、OKをクリックします。
パラメーターの詳細については、「ソースApache RocketMQクラスターのネットワークに設定されたパラメーター」をご参照ください。
クラウドへの移行ウィザードのネットワーク情報の設定ステップで、ソースApache RocketMQクラスターに関するネットワーク情報を入力し、ネットワーク情報の設定をクリックします。
パラメーターの詳細については、「ソースApache RocketMQクラスターのネットワークに設定されたパラメーター」をご参照ください。
バックグラウンド設定が完了するまで待ちます。 次に、次へ をクリックします。
パラメータ設定
表 1. ソースApache RocketMQクラスターのネットワークに設定されたパラメーター
パラメーター | 説明 | 例 |
クラスタータイプ | Apache RocketMQクラスターがデプロイされているネットワーク環境。 有効な値:
| VPC クラスター |
クラスター名 | Apache RocketMQクラスターのカスタム識別子。 クラスター名は、クラスターの識別と移行タスクの表示にのみ使用されます。 名前はビジネスシステムに影響しません。 | 第一 |
[VPC] | Apache RocketMQクラスターがデプロイされているVPCのID。 このパラメーターは、クラスタータイプパラメーターをVPC クラスターに設定した場合にのみ必要です。 | vpc-bp1mhd******24chrxn |
vSwitch | vSwitch。 vSwitchは、ApsaraMQ for RocketMQ移行ツールがApache RocketMQクラスターのネットワークにアクセスできるようにするためにのみ使用されます。 vSwitchを選択するときは、次のルールに従う必要があります。
このパラメーターは、クラスタータイプパラメーターをVPC クラスターに設定した場合にのみ必要です。 | vsw-bp1hejs******0los38rn |
セキュリティグループ | セキュリティグループ。 Apache RocketMQクラスターがデプロイされているElastic Compute Service (ECS) インスタンスが属するセキュリティグループを選択することを推奨します。 別のセキュリティグループを選択した場合は、そのセキュリティグループのセキュリティルールがApsaraMQ for RocketMQインスタンスへのアクセスを許可していることを確認してください。 このパラメーターは、クラスタータイプパラメーターをVPC クラスターに設定した場合にのみ必要です。 | sg-bp160q******vtcxvwl |
NameServer アドレス | Apache RocketMQクラスターのネームサーバーのIPアドレス。 複数のIPアドレスは、コンマ (,) またはセミコロン (;) で区切ります。 重要 移行するApache RocketMQクラスターのネームサーバーのすべてのIPアドレスを指定する必要があります。 そうしないと、移行中に移行するトピックを選択できない場合があります。 | 192.168.XX.XX:9876 |
アクセス資格情報 |
| ACL |
ユーザー名 | Apache RocketMQクラスターの管理者アカウントの名前。 このパラメーターは、Apache RocketMQクラスターでACL機能が有効になっている場合にのみ必要です。 | admin |
ユーザーパスワード | Apache RocketMQクラスターの管理者アカウントのパスワード。 このパラメーターは、Apache RocketMQクラスターでACL機能が有効になっている場合にのみ必要です。 | ****** |
ステップ3: メタデータの移行
ネットワークを設定した後、移行計画に基づいて移行するトピックとグループを選択して、メタデータの移行を完了する必要があります。
使用上の注意
メタデータの移行中、ApsaraMQ for RocketMQ移行ツールは、Apache RocketMQクラスターに作成されたすべてのトピックとグループに関する情報を動的に読み取り、リストに表示します。 移行するトピックとグループのメタデータのみを移行する必要があります。
このステップにロールバックすることはできません。 次の手順に進む前に、移行するトピックとグループがすべて移行されていることを確認してください。 それ以外の場合は、後続の操作でトピックを手動で追加する必要があります。
手順
メタデータの移行ステップで、トピックメタデータタブをクリックします。
移行するトピックをトピックリストから選択し、対応するメッセージタイプを メッセージのタイプ ドロップダウンリストから選択します。 次に、操作 列の 確認してインポート をクリックしてトピックをインポートします。
複数のトピックを選択し、一括インポート をクリックしてトピックを一度にインポートすることもできます。
重要メッセージタイプはApache RocketMQ 4.xで定義されていません。 ApsaraMQ for RocketMQは、移行するトピックに指定したメッセージタイプが、トピックが処理するメッセージタイプと一致しているかどうかを検証します。 メタデータを移行するときは、実際の業務に基づいてメッセージタイプを選択する必要があります。
間違ったメッセージタイプを選択した場合、移行後にメッセージの送受信が失敗します。 トピックのメッセージタイプ、またはトピックに異なるタイプのメッセージが存在するかどうかがわからない場合は、チケットを起票します。
グループメタデータタブをクリックし、グループリストから移行するグループを選択し、消費シーケンスのタイプドロップダウンリストからメッセージが消費される順序を選択し、操作列の確認してインポートをクリックしてグループをインポートします。
複数のグループを選択し、一括インポート をクリックしてグループを一度にインポートすることもできます。
重要Apache RocketMQ 4.x SDKのメッセージの消費順序は、クライアントで指定されています。 ApsaraMQ for RocketMQ 5.xインスタンスのグループ内のメッセージの消費順序は、ブローカーによって制御されます。 メタデータを移行するときは、ビジネスシナリオに基づいてグループ内のメッセージの使用順序を指定する必要があります。
間違ったメッセージ消費順序を選択した場合、移行後に消費例外が発生します。 グループ内のメッセージの消費順序がわからない場合は、チケットを起票します。
移行するすべてのトピックとグループがインポートされていることを確認した後、インポートが完了したら、次のステップに進みますをクリックします。
ステップ4: エンドポイントの変更
指定したトピックとグループのメタデータを移行した後、オンラインビジネスの移行を開始します。 この段階で、プロデューサアプリケーションとコンシューマアプリケーションがソースクラスターへのアクセスに使用するエンドポイントを、ターゲットApsaraMQ for RocketMQ 5.xインスタンスへのアクセスに使用するエンドポイントに変更する必要があります。 これにより、移行タスクに関与するプロデューサアプリケーションとコンシューマアプリケーションを、ターゲットApsaraMQ for RocketMQインスタンスに接続できます。
使用上の注意
エンドポイントを変更した後、プロデューサアプリケーションとコンシューマアプリケーションを再起動して、アプリケーションをターゲットApsaraMQ for RocketMQインスタンスに接続する必要があります。 このプロセス中、移行ツールは、メッセージングに使用されるトピックをバックエンドのApache RocketMQクラスターにルーティングします。 メッセージングシステムは、このステップにおいて変更されないままである。 メッセージングアプリケーションがエンドポイントを変更する順序に制限は課されない。
移行に関与するすべてのプロデューサーおよびコンシューマーアプリケーションでエンドポイントが変更されていることを確認します。
エンドポイントが特定のプロデューサアプリケーションで変更されていない場合、特定のメッセージは送信されません。
特定のコンシューマアプリケーションでエンドポイントが変更されていない場合、メッセージの蓄積が発生し、特定のメッセージを消費できません。
エンドポイント変更の例
Apache RocketMQリモートSDK
変更前:
producer.setNamesrvAddr("192.168.XX.XX:9876"); consumer.setNamesrvAddr("192.168.XX.XX:9876");
変更後:
producer.setNamesrvAddr("rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080"); consumer.setNamesrvAddr("rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080");
Apache RocketMQ gRPC SDK
変更前:
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(192.168.XX.XX:9876) .setCredentialProvider(sessionCredentialsProvider) .build();
変更後:
ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder() .setEndpoints(rmq-cn-pe334******-vpc.cn-hangzhou.rmq.aliyuncs.com:8080) .setCredentialProvider(sessionCredentialsProvider) .build();
手順
エンドポイントを変更してメッセージングアプリケーションを再起動したら、エンドポイントの交換ステップで変更が完了したら、次のステップに進みますをクリックします。
ステップ5: メッセージを移行する
メッセージを移行するには、Apache RocketMQクラスターの各トピックの読み書きトラフィックをApsaraMQ for RocketMQインスタンスに切り替える必要があります。
使用上の注意
トラフィックの切り替え中は、トピックのステータスが変更されるたびに、メッセージが期待どおりに送受信されるかどうかを確認する必要があります。 例外が発生しない場合は、次のステップに進みます。 例外が発生した場合は、前の手順に戻り、問題のトラブルシューティングを行います。
移行タスクを完了する前に、移行するすべてのトピックのトラフィックが切り替えられ、メッセージが期待どおりに送受信できることを確認してください。 移行タスクの完了後、トラフィックの切り替えに関する情報を変更することはできません。
トラフィック切り替えの詳細
表 2. トラフィック切り替えステータス
ステータス | 説明 | トラフィックトポロジ |
読み取り / 書き込みソースクラスター | メッセージ移行の初期ステータス。
| |
書き込みソースクラスター冗長読み取り |
| |
書き込み対象クラスターの冗長読み取り |
この段階では、メッセージ作成用のトラフィックとメッセージ消費用のトラフィックが同時に宛先クラスターに存在します。 メッセージが期待どおりに送受信できるかどうかを確認し、ソースクラスター内のメッセージが消費されるまで待ちます。 | |
ターゲットクラスターの読み取りと書き込み | 送信先クラスターでメッセージが期待どおりに送受信できること、および送信元クラスターで累積メッセージが消費されることを確認した後、トピックをこの状態に切り替えることができます。 この場合、読み取りトラフィックと書き込みトラフィックは移行先クラスターに送信され、移行は完了します。
|
トラフィックの切り替え
メッセージの移行ステップで、メッセージを移行するトピックを選択し、トピックのチェックステータスを確認します。
ステータスが チェックに合格する の場合は、次の手順に進みます。
ステータスが チェックに合格する でない場合は、チェック結果に基づいて例外のトラブルシューティングを行います。 チェックに合格するまで、操作 列の 再チェック をクリックします。 チェックに合格したら、次のステップに進みます。
トラフィック切り替えの各段階でチェックされる項目については、「チェック項目」をご参照ください。
ステータスがチェックに合格するでなく、チェック結果が移行に影響しないことを確認した場合、トピックの 操作 列で チェックを無視する をクリックし、次のステップに進みます。
トラフィックを切り替えるトピックの操作列で、トラフィックの切り替えの確認をクリックします。
表示されるメッセージで、確定 をクリックします。
トラフィックスイッチングは4つのステージからなります。 トラフィックの切り替え操作を4回実行する必要があります。 トラフィック切り替えは、トラフィック切り替えフェーズがターゲットクラスターの読み取りと書き込みに変更されるまで完了します。
トラフィック切り替えの各段階でのトピックの読み書きトラフィックの変更については、「トラフィック切り替えステータス」をご参照ください。
移行タスクで移行するすべてのトピックのトラフィックが切り替えられていることを確認し、ページの下部にある移行が完了しましたをクリックします。
その他の操作
次の項目では、トラフィックを切り替えるときに [メッセージの移行] ページで実行できるその他の操作について説明します。
ロールバック
前の状態にロールバックする: 移行が期待どおりに機能しない場合は、指定したトピックのステータスを、移行が期待どおりに機能する前の状態にロールバックし、問題のトラブルシューティング後に後続の操作を実行できます。
初期状態にロールバック: この方法を使用して、トラフィック切り替えの初期状態にロールバックできます。 トラフィック切り替えの初期ステータスは、ルーティング状態を指し、緊急トラブルシューティングに使用されます。
説明この操作を実行すると、トラフィックの切り替え状況に大きな変化が生じます。 以前の移行プロセス中に生成された未消費のメッセージが遅延するか、処理できない場合があります。
補足作成
メタデータの移行中に移行するトピックが選択されていない場合、トラフィックの切り替え中にApsaraMQ for RocketMQ 5.xインスタンスで移行するトピックと同じ名前のトピックを作成できます。
トラフィックの一括切り替え /一括ロールバック
バッチトラフィックの切り替えとバッチロールバックを実行できます。
説明バッチトラフィック切り替えとバッチロールバックは、同じトラフィック切り替え段階にあるトピックに対してのみ実行できます。
トラフィック切り替え中のアイテムの確認
表 3. チェックアイテム
段階 | チェックアイテム |
書き込みソースクラスター冗長読み取り状態に切り替える |
|
書き込み対象クラスターの冗長読み取り状態に切り替えます。 |
|
ターゲットクラスターの読み取りと書き込み 状態に切り替える |
|