ミラーリングの有効化

この情報では、2 つの Event Streams Enterprise クラスタをミラーペアとしてセットアップする方法について説明します。 ユース・ケースには、災害復旧、バックアップ、および地理的レプリケーションが含まれます。

Event Streams でミラーリングを含むソリューションを構築する際には、以下の2つのシナリオにどのように対処するかを考慮してください

データ損失
ミラーリングは非同期です。 つまり、メッセージは、ターゲット・クラスターにミラーリングされる前に、ソース・クラスターに正常に生成される必要があります。 これらのメッセージがミラーリングされる前にソース・クラスターで障害が発生した場合、アプリケーションはそれらのメッセージの消失に対処する必要があります。
最低 1 回
ミラーリング・プロセスでメッセージの重複が発生する可能性があります。 ソース・クラスターでコミットされたコンシューマー・グループ・オフセットは、ターゲット・クラスターでチェックポイントに変換されない可能性があります。 フェイルオーバー時に、コンシューマーは、ソース・クラスターで既にコンシュームおよびコミットされているメッセージを再処理する必要がある場合があります。

Event Streams でミラーリングを使用する場合、ミラーリング容量単位時間ごとに追加料金が発生します。 詳しくは、 カタログ にアクセスして、 Event Streams を検索してください。 その後、価格設定プランを表示できます。

現在、 Event Streams サービスインスタンスでミラーリングを有効にするには、 IBM Cloud CLIを使用する必要があります。

CLIをインストールするには、 IBM Cloud CLIをプラグインで拡張するを 参照してください。

IBM Cloud CLIは、 service-instance-update コマンドを使用して、 Event Streams サービス・インスタンス・リソースを更新します。service-instance-update コマンドの実行に使用するアカウントユーザーIDには、リソースの作成時に必要なアクセス・ポリシーと同じものを割り当てる必要がある。 アクセス要件について詳しくは、 リソースを作成するために必要なアクセス権限 を参照してください。

Event Streams サービス・インスタンスのミラーリングを有効にするために必要な時間はさまざまですが、通常の環境では 2 時間を超えません。

セットアップ

2つのEnterpriseプランクラスタをプロビジョニングしていることを確認します。 両方のクラスターのスループットとストレージ容量が同じで、サービス間バインディングがある必要があります (詳しくは、 ステップ 2 を参照してください)。

ミラーリングは一方向なので、ミラーリングの方向を決めてください。 一方のクラスターがソースで、もう一方のクラスターがターゲットです。

ソース・クラスターのどのトピックをミラーリングするかを決定します。 デフォルトでは、トピックはミラーリングされていません。 ステップ4 で示されているように、ミラーリングが有効になった後にユーザーコントロールを使用してミラーリングを有効にすることができます。 選択項目を 1 つ以上のパターンとして指定する必要があります。

帯域幅の要件を検討してください。ソース・クラスターで使用可能な帯域幅が十分にありますか。ソース・クラスターには、ミラーリングを実行するためのヘッドルームが必要です。クラスタ帯域幅の制限については「 プランの選択」を 参照し、 Event Streams メトリクスを 使用して、ソース・クラスタのビジー度とミラーリングのためのヘッドルームがあるかどうかを判断します。

エンタープライズのマルチゾーン・リージョン・クラスターからエンタープライズのシングルゾーン・リージョン・クラスターへのミラーリング、およびその逆方向のミラーリングは許可されていますが、特定の居住要件があり、その影響を理解している場合を除き、この構成は推奨されません。 企業向けマルチゾーン・リージョン・クラスターから企業向けシングルゾーン・リージョン・クラスターへのサービスレベル契約(SLA)ポリシーは、低くなる場合もあれば、その逆の場合もあります。

サービス間のバインディングを有効にする

両方のインスタンス間でサービス間バインディングを構成して、両方のインスタンスが通信できるようにする必要があります。 構成するには、以下のステップを実行します。

サービス間バインディングを作成するとき、IAMは「ソース」と「ターゲット」という用語を、 Event Streams とは逆の方法で使用する。 IAMソース・ アカウント Event Streams ミラーリング・ターゲット・インスタンスが含まれ、その逆も同様である。

  1. Event Streams ミラーリング・ソース・サービス・インスタンスを含む IBM Cloud アカウントを選択します。
  2. IAM の**「許可」パネルにナビゲートし、「作成」**をクリックします。
  3. Source セクションの場合:
    • 異なるアカウントのターゲットインスタンスにミラーリングする場合は、ソースの見出しの下にある「別のアカウント」を選択し、ミラーリングのターゲットインスタンスが含まれるアカウントを選択します。 同じアカウント内のサービス・インスタンス間でミラーリングを行う場合は、デフォルトの「このアカウント」を選択したままにすることができます。
    • ミラーリング・ターゲットの Event Streams インスタンスを IAM ソース・サービス・インスタンスとして選択します。
  4. 「ターゲット」 を選択する場合は、ミラーリング・ソースの Event Streams インスタンスを IAM ターゲット・サービス・インスタンスとして選択します。
  5. リーダーロールを割り当て、 Authorizeをクリックします。

フェイルバックを要求する場合は、逆方向のサービス間バインディングも必要である。

以下の例は、コマンド行を使用してサービス間バインディングを構成する方法を示しています。

  1. ミラーリング・ソース・インスタンスとして動作させたい Event Streams インスタンスを含む IBM Cloud® アカウントにログインします:

    ibmcloud login -c <account containing mirroring source instance>
    
  2. 以下のように、承認ポリシーを設定します

    ibmcloud iam authorization-policy-create messagehub messagehub Reader --source-service-instance-id <instance id of the mirroring target cluster> [--source-service-account <account containing mirroring target instance>] --target-service-instance-id <instance id of the mirroring source cluster>
    

    同じ IBM Cloud アカウント内の2つの Event Streams インスタンス間でミラーリングを設定する場合は、 --source-service-account オプションを省略できることに注意してください。

サービス間バインディングの詳細については、「 Manage authorizations」 パネルとUsing authorizations to grant access between services 」を参照してください。

ミラーリングを有効にし、ミラーリングするトピックを選択します

ミラーリングを有効にするには、 service-instance-update ターゲットクラスタに対して、以下の必須パラメータとともにCLIを使用してコマンドを実行する必要があります

ミラーリングを有効にする際に必要なパラメータ
必須パラメーター 説明
ソース CRN ミラーリングされるソース・クラスターの crn
ソース別名 ソース・クラスターに使用される別名
ターゲット別名 ターゲット・クラスターに使用される別名
  • source_crn はこの形式です: crn:v1:bluemix:public:messagehub:us-south:a/aaa:aaaa::
  • source_alias および target_alias は、ミラーリングを有効にするときに、2 つのサービス・インスタンスのそれぞれに対して構成する別名です。 別名はトピック名で表示されます。 短い記述名を選択します。 例えば、「us-south」や「us-east」などです。

CLI コマンドの例

ibmcloud resource service-instance-update "Event Streams resource instance name" -p '{"mirroring":{"source_crn":"<source_crn>", "source_alias":"<source_alias>", "target_alias":"<target_alias>"}}'

ミラーリングするトピックを選択

サービスインスタンスの更新が完了したら、ソースからターゲットのクラスターにミラーリングするトピックを選択する必要があります。 これは、CLIで「ibmcloud es mirroring-topic-selection-set」コマンドを使用して実行します。 これらの選択されたトピックを消費する消費者グループは、ソースからターゲットのクラスタにミラーリングされます。 トピックの選択は、正規表現パターン、またはそのようなパターンのコンマ区切りリストの形式で行われます。

以下のコマンドは、ミラーリングするすべてのトピックを選択します。

ibmcloud es mirroring-topic-selection-set --select '.*'

以下のように、ミラーリングするトピックをリストすることにより、トピックを選択できます。

ibmcloud es mirroring-topic-selection-set --select topic1,topic2,topic3

選択について詳しくは、 ミラーリング・ユーザー制御 を参照してください。

トピックの選択が完了すると、ターゲットクラスタには、ソースクラスタのエイリアスを接尾語として使用したミラーリングユーザーコントロールを使用して、ミラーリング用に選択されたトピックが表示されます。

ステップ 3.1: トピック名とグループ名の変換方法を指定します

変換ルールを指定することで、ターゲットクラスタ内の異なる名前のトピックにデータをミラーリングすることができます。 以下の3つのシナリオでは、考えられる変革について説明し、それぞれのユースケースを説明します。

ミラーリングが有効化された後は、いつでもどのトピックまたは消費者グループをミラーリングするかを指定できますが、トピックまたはグループの変換はミラーリングが有効化された時点でのみ可能です。 ミラーリングがすでに有効になっている場合は、トピックまたはグループ変換を指定する次の有効化リクエストを行う前に、まず無効にする必要があります。

シナリオ1:古い接頭辞または接尾辞を削除し、新しい接頭辞または接尾辞を追加することでトピックを変換する

以下の4つの追加パラメータを設定する。

| トピックの名前変更に必要なパラメータ|説明|トピックの名前変更に必要なパラメータ | -- | -- | | remove_prefix| 移動元クラスタのトピック名から削除するプレフィックス。| | remove_suffix | ソース・クラスタのトピック名から削除するサフィックス。| | add_prefix | 対象クラスターのトピック名に追加するプレフィックス。| | add_suffix | 対象クラスターでトピック名に追加するサフィックス。|

ibmcloud resource service-instance-update コマンドは、 -p コマンドライン引数で指定する必要があります。 これらのオプションが指定された場合、一致する接頭辞または接尾辞を持つトピックのみがミラーリングの対象となります。 例えば、 remove_prefixapp1- で、 abc.* をトピック選択として指定した場合、 app1-abc で始まるトピックのみがミラーリングされます。

「rename」タイプの変換を指定し、 add_prefix または add_suffix のパラメータを指定しない場合、ターゲットクラスタ内のミラーリングされたトピックからこれらのパラメータが削除されます。 トピックパターンは、ソースの接頭辞または接尾辞が削除された後、接頭辞または接尾辞が追加される前に、トピック名に適用されます。

以下のCLIコマンドの例を参照のこと:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
      "topic_name_transform": {
        "type": "rename",
        "rename": {
          "add_prefix": "newprefix-",
          "remove_prefix": "oldprefix-",
          "add_suffix": "-newsuffix",
          "remove_suffix": "-oldsuffix"
        }
      }
    }
  }
}

シナリオ 2 : ミラー化されたトピックにサフィックスとしてソースエイリアスを追加する

topic_name_transform型を use_alias に設定してトピック名の変換を適用する。 この構成では、ソース・クラスタの app1-topic というトピックは、ターゲット・クラスタの app1-topic.source というトピックにミラーリングされます。これは、構成で指定されたソース・エイリアスが source であるためです。

以下のCLIコマンドの例を参照のこと:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "use_alias"
      }
    }
  }
}

シナリオ3:トピックは名前を変更せずにミラーリングされる

このシナリオでは、タイプを none に設定した topic_name_transform も適用します。 この構成では、ソースクラスターの app1-topic というトピックが、ターゲットクラスターの app1-topic というトピックにミラーリングされます。

以下のCLIコマンドの例を参照のこと:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "none"
      }
    }
  }
}

ステップ 3.2: 対応する消費者グループIDの変換

デフォルトでは、ミラーメーカーはターゲットクラスタにミラーリングする際に、コンシューマーグループIDを変更しません。 ただし、 Event Streams では、以下の2つのシナリオで概説されているように、グループIDのデータを修正することができます。 トピックと同様に、グループIDパターンは、ソースの接頭辞または接尾辞を削除した後、接頭辞または接尾辞を追加する前に適用されます。 「rename」タイプの変換を指定し、 add_prefix または add_suffix のパラメータを指定しない場合、ターゲットクラスタのミラーリングされたグループIDからこれらのパラメータが削除されます。

ibmcloud resource service-instance-update コマンドは、 -p コマンドライン引数で指定する必要があります。

シナリオ1:古い接頭辞または接尾辞を削除し、新しい接頭辞または接尾辞を追加することでグループIDを変換する

以下の4つの追加パラメータを設定する。

| グループIDの名前変更に必要なパラメーター|説明|グループIDの名前変更に必要なパラメーター | -- | -- | | remove_prefix|ソースクラスタのグループIDから削除するプレフィックス。| | remove_suffix|ソース・クラスターのグループIDから削除するサフィックス。| |add_prefix|ターゲット・クラスターのグループIDに追加するプレフィックス。| | add_suffix|ターゲット・クラスターのグループIDに追加するサフィックス。|

これらのオプションが指定された場合、一致する接頭辞または接尾辞を持つグループIDのみがミラーリングの対象となります。 例えば、 remove_prefixaaaadd_prefixbbb の場合、ソースクラスターで aaa-group-id で始まる消費者グループは、ターゲットクラスターの bbb-group-id にミラーリングされます。

以下のCLIコマンドの例を参照のこと:

{
  "group_id_transform": {
    "type": "rename",
    "rename": {
       "add_prefix": "newprefix-",
       "remove_prefix": "oldprefix-",
       "add_suffix": "-newsuffix",
       "remove_suffix": "-oldsuffix"
    }
  }
}

シナリオ2:消費者グループIDは名前を変えずにミラーリングされる

このシナリオでは、タイプを none に設定した topic_name_transform も適用します。 この構成では、ソースクラスターの aaa-group-id というトピックが、ターゲットクラスターの aaa-group-id というトピックにミラーリングされます。

以下のCLIコマンドの例を参照のこと:

"group_id_transform": {
  "type": "none"
}

スキーマ移行のアプローチ Event Streams

Event Streams はスキーマ移行に2つのアプローチを提供し、それぞれ異なる戦略を利用している。

  1. スキーマ一括インポート/エクスポートツール:この方法では、スキーマIDはソースクラスタに存在するのとまったく同じように保持されます。 ソース・クラスタとターゲット・クラスタ間で変換が行われない場合、あるいはスキーマの互換性をエンド・ツー・エンドで維持しなければならないような、リフト&シフト・シナリオに使用する。 詳細については、 他のスキーマ登録からのデータのインポートを 参照してください。

  2. ID変換を伴うミラーリングによるスキーマ同期。 以下に概説する この方法は、ソースクラスタからターゲットクラスタへの移行時にスキーマIDを変換する。 段階的な移行や変換が必要な場合は、この方法を使用する。 この方法は、レジストリのクラスタ間でスキーマが同期していることを保証する。つまり、ターゲット・クラスタのコンシューマーはすぐにメッセージを読むことができる。 また、後から移行するスキーマとIDが衝突するリスクもなく、新しいスキーマを登録できる。

ID変換を用いたミラーリングによるスキーマ同期

ミラーリングによるスキーマ同期は、あるインスタンスから別のインスタンスにスキーマ・レジストリ・リクエストを転送することで機能する。 これは、ターゲットスキーマレジストリが特別な「ミラーリングモード」で動作し、スキーマ関連のリクエストをソースレジストリに透過的にプロキシし、必要に応じてID変換を適用するため、ユーザがターゲットインスタンスを通してソースインスタンスから読み込んだり、ソースインスタンスに書き込んだりすることを可能にする。 このアプローチにより、インスタンス間のデータアクセスが簡素化され、環境間のシームレスなスキーマ同期がサポートされる。

注意事項

ミラーリングを使用してスキーマを同期する前に、以下の注意事項を確認してください:

  1. スキーマが2つのレジストリ間で一括エクスポート/インポートされる間、メンテナンスウィンドウが必要です。
  2. トピックのリネームが機能するためには、スキーマが Confluent Avro Serdes を使用し、トピック名からサブジェクトを導出できるようにする必要があります。 Confluent Avro Serdesは、スキーマに関連付けられたサブジェクトをトピック名から派生させることができるからである(たとえば、トピックおよびトピック/レコードのサブジェクト命名ストラテジーの場合)。
  3. S2S s2s の認可またはミラーリングを無効にすると、スキーマレジストリ要求が転送されなくなる。
  4. 変換が必要な場合は、移行を実行する前に、ターゲット・インスタンスのスキーマ・レジストリをトピック名変更ルールで構成する必要があります。
  5. マイグレーションが完了するまで、名前の変更ルールは変更できない。 移行中に変更を加えると、レジストリ間で不整合が生じる。

説明

以下の手順では、スキーマ・レジストリのミラーリングを使用して2つのインスタンス間でスキーマを移動する方法を説明します。

エクスポート・ユーティリティはまだCLIに追加されていない。

許可されるスキーマ値

| 値 | -- | -- | | プロキシ|リクエストはターゲットインスタンスからソースインスタンスに転送される。| | read-only|リーダーIAMロールを必要とするリクエストが許可される。 それ以外は拒否される(403)。| | リクエスト転送が無効になっている。 これはデフォルトである。|

要求の例

以下のCLIコマンドの例を参照のこと:

ibmcloud resource service-instance-update \
"trgt-instance-name" \
-p '{
"mirroring": {
"source_crn": "<src instance crn>",
"source_alias": "source",
"target_alias": "target",
"schemas": "proxied"
}
}'

トピック名の変換

トピック名は転送中に変換できる。 例えば、適切なルールがあれば、old-my-topicnew-my-topic。 有効にすると、ソース・インスタンスは元の名前のみを認識し、ターゲット・インスタンスは新しい (変換された) トピック名のみを認識します。 返される結果はすべて、それに応じて変換される。

変換ルールが提供されない場合、 Event Streams の既存のミラーリングの動作に沿って、 use_alias が使用される。 トピック名を変更せずに転送するには、 topic_name_transform タイプ none を使用する。 変換は、 既存のCLI変換フィールドを 使用して設定される。

移住の流れ

2つの Event Streams インスタンス間で移行する場合、以下のフローを推奨する。

  1. schemas: proxied を指定して、2つのインスタンス間のミラーリングを有効にする。
  2. ターゲットスキーマ・レジストリを使用するようにアプリケーションを更新する。
  3. schemas: read-only に切り替えることで、ターゲットレジストリへの書き込みをブロックする。 この変更を行う前に、ミラーリングを一時的に無効にしておく必要がある。
  4. ソース・インスタンスからすべてのスキーマをエクスポートします。
  5. ソース・インスタンスからエクスポートされたすべてのスキーマをターゲットにインポートします。 これは、 IBM Cloud® CLIを使用して行うことができます: ibmcloud [...]
  6. ミラーリングを無効にする。

スキーマのエクスポート

より詳細な情報については、 Confluent のドキュメントを 参照してください。

Event Streams CLIでは、スキーマのインポートに v1 exportVersion

  1. 最新の v2.x.x のソースコードをダウンロードする。例えば、 https://github.com/Apicurio/apicurio-registry/archive/refs/tags/2.6.13.Final.zip。

  2. エクスポート・クライアントの構築: mvn -pl utils/exportConfluent -am -DskipTests -Pprod package.

  3. エクスポーターを実行する(出力を confluent-schema-registry-export.zip に保存する):

    java -jar utils/exportConfluent/target/apicurio-registry-utils-exportConfluent-2.6.13.Final.jar \
    "https://token:<password>@<my-event-streams-instance.com>/confluent" \
    --client-props basic.auth.credentials.source=URL
    

スキーマのインポート

スキーマは Event Streams CLI を使ってインポートできる。

  1. event-streams[es] プラグインがインストールされていることを確認してください: ibmcloud plugin list.

  2. IBM Cloud® にログイン : ibmcloud login [...].

  3. インポートしたい Event Streams インスタンスを初期化する: ibmcloud es init.

  4. スキーマをインポートする:

    ibmcloud es schema-import \
    -f confluent-schema-registry-export.zip
    

検証

以下のコマンドを実行すれば、現在のサービス・インスタンス情報を取得できる:

ibmcloud resource service-instance "Event Streams resource instance name" --output=json

アウトプットの最後の操作セクションを見直す。更新が進むにつれ、情報は継続的に更新される。ミラーリングの有効化プロセスが完了すると、最後の操作情報により、更新が成功したか、同期が成功したかが示されます。

"last_operation": {
  "type": "update",
  "state": "in progress",
  "description": "Update in progress.",
  "updated_at": null,
  "cancelable": false
}

次のように成功が表示されるまで、もう一度コマンドを実行する:

"last_operation": {
  "type": "update",
  "state": "succeeded",
  "description": "Update succeeded.",
  "updated_at": null,
  "cancelable": false
}

IBM Cloud Monitoring ダッシュボード Event Streams ミラーリングはミラーリングの状態を表示します。