啟用鏡映

本資訊說明如何將兩個 Event Streams Enterprise 叢集設定為鏡射對。 使用案例包括災難回復、備份和地理抄寫。

當您在 Event Streams 中建立涉及鏡像的解決方案時,請考慮您的解決方案將如何處理下列兩種情況:

資料流失
鏡映是非同步的。 也就是說,訊息必須先順利產生至來源叢集,然後才能鏡映至目標叢集。 在鏡映這些訊息之前,如果來源叢集上發生失敗,應用程式將需要處理那些訊息的遺失。
至少一次
在鏡映處理程序中可能會發生訊息重複。 在來源叢集中確定的消費者群組偏移可能不會轉換為目標叢集中的檢查點。 在失效接手時,消費者可能需要重新處理已在來源叢集上耗用並確定的訊息。

搭配使用鏡映與 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 )。

因為鏡映是單向的,所以請決定您要鏡映的方向。 一個叢集是來源,另一個叢集是目標。

決定您想要鏡像來源群集中的哪些主題。 預設情況下,沒有主題會被鏡射,您可以在啟用鏡射後使用使用者控制項來啟用鏡射,如步驟 4 所示。 您必須將選項指定為一或多個型樣。

請考量頻寬需求;來源叢集有足夠的可用頻寬嗎?您的來源叢集需要有一些空餘空間才能執行鏡映。有關群集頻寬限制,請參閱 選擇您的計劃,並使用 Event Streams 度量 來判斷來源群集的忙碌程度,以及是否有餘裕空間進行鏡射。

雖然允許從企業級多區域群集鏡像到企業級單區域群集,反之亦然,但不建議使用此設定,除非您有特定的駐留要求,並瞭解其影響。 企業級多區域群集對企業級單區域群集的服務層級協定 (SLA) 政策可能較低,反之亦然。

啟用服務到服務的綁定

您必須在兩個實例之間配置服務對服務連結,以容許兩個實例進行通訊。 若要進行配置,請完成下列步驟:

當您建立服務對服務的綁定時,IAM 使用「source」和「target」的方式與 Event Streams 相反。 其中 IAM 來源帳戶包含 Event Streams 鏡像目標實體,反之亦然。

  1. 選取包含 Event Streams 鏡映來源服務實例的 IBM Cloud 帳戶。
  2. 導覽至 IAM 中的授權畫面,然後按一下建立
  3. 對於 來源 區段:
    • 如果鏡像到不同帳戶中的目標實例,請在來源標題下選擇「另一個帳戶」,然後選擇包含鏡像目標實例的帳戶。 如果您在相同帳戶中的服務實例之間進行鏡映,則可以保留選取 "this account" 的預設值。
    • 選取鏡映目標 Event Streams 實例作為 IAM 來源服務實例。
  4. 針對 目標 選項,選取鏡映來源 Event Streams 實例作為 IAM 目標服務實例。
  5. 指定讀者角色,然後按一下授權

如果您的需求是故障回溯,您也需要反方向的服務對服務綁定。

下列範例顯示如何使用指令行來配置服務至服務連結。

  1. 登入 IBM Cloud® 帳戶,其中包含您要作為鏡射來源實體的 Event Streams 實體:

    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 帳戶中的兩個 Event Streams 虛擬機器之間設定鏡射,則 --source-service-account 選項可以省略。

如需服務對服務綁定的詳細資訊,請參閱 管理授權面板使用授權在服務間授予存取權

啟用鏡射並選擇要鏡射的主題

要啟用鏡射,您需要使用 CLI 對目標群集執行 service-instance-update 指令,並使用下列必要參數:

啟用鏡像時所需參數
必要參數 說明
來源_crn 要鏡映之來源叢集的 crn
來源別名 用於來源叢集的別名
target_alias 用於目標叢集的別名
  • source_crn 的格式是這樣的:crn:v1:bluemix:public:messagehub:us-south:a/aaa:aaaa::
  • 當您啟用鏡映時,source_aliastarget_alias 是您要為兩個服務實例中的每一個配置的別名。 別名出現在主題名稱中。 選擇簡短的敘述性名稱。 例如,「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: 指定主題和群組名稱的轉換方式

您可以指定轉換規則,讓您可以將資料鏡射到目標群集中不同名稱的主題中。 以下三種情況描述了可能的轉換,並解釋了每種轉換的用例。

啟用鏡射後,您可以隨時指定鏡射哪些主題或消費者群組,但是主題或群組轉換只能在啟用鏡射時進行。 如果已啟用鏡射,則需要先停用鏡射,然後再提出啟用請求,以指定主題或群組轉換。

情況 1:透過移除舊的前綴或後綴並新增前綴或後綴來轉換主題

配置以下四個附加參數。

主題重新命名所需的參數
主題重命名所需參數 描述
remove_prefix 要從來源群集的主題名稱移除的前綴。
remove_suffix 要從來源群集的主題名稱移除的後綴。
add_prefix 要加入目標群集中主題名稱的前綴。
add_suffix 要加入目標群集中主題名稱的後綴。

ibmcloud resource service-instance-update 指令需要透過 -p 指令行參數指定。 指定這些選項時,只有具有符合前綴或後綴的主題才有資格進行鏡射。 例如,如果您的 remove_prefixapp1-,並指定主題選擇為 abc.*,則只有以 app1-abc 開頭的主題才會被鏡射。

如果您指定「重新命名」類型的轉換,但沒有指定 add_prefixadd_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"
      }
    }
  }
}

場景三:主題鏡像,名稱不變

在這種情況下,您也套用 topic_name_transform,類型設定為 none。 使用此設定,來源群集中名為 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

根據預設,Mirror Maker 在鏡射到目標群集時,不會修改消費者群組 ID。 不過,Event Streams 允許您修改群組 ID 的資料,如以下兩種情況所述。 與主題類似,群組 ID 模式會在移除任何來源前綴或後綴之後,並在新增任何前綴或後綴之前套用。 如果您指定「重新命名」類型的轉換,但沒有指定 add_prefixadd_suffix 的參數,則目標群集中的鏡像群組 ID 將移除這些參數。

ibmcloud resource service-instance-update 指令需要透過 -p 指令行參數指定。

情況 1:透過移除舊的前綴或後綴,並加入新的前綴或後綴來轉換群組 ID

配置以下四個附加參數。

群組 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"
    }
  }
}

場景二:消費者群組ID鏡像,名稱不變

在這種情況下,您也套用 topic_name_transform,類型設定為 none。 使用此設定,來源群集中名為 aaa-group-id 的主題將會鏡射到目標群集中名為 aaa-group-id 的主題。

請參閱以下 CLI 命令範例:

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

中的結構描述遷移方法 Event Streams

Event Streams 提供了兩種模式遷移的方法,每種方法都使用不同的策略。

  1. 大量模式匯入/匯出工具:此方法可完全保留來源群集中的模式 ID。 在源群集和目標群集之間沒有轉換的情況下,或在模式相容性必須保持端到端的情況下,使用此方法。 如需詳細資訊,請參閱 從其他模式註冊處匯入資料

  2. 透過 ID 轉換的鏡像進行結構同步。 此方法會在從來源群集遷移到目標群集的過程中轉換模式 ID,概述如下。 在分階段遷移或需要轉換時使用此方法。 此方法可確保模式在註冊集群之間同步,這表示目標集群上的消費者可以立即讀取訊息。 它也允許新模式註冊,而不會有 ID 與稍後可能遷移的模式碰撞的風險。

透過 ID 轉換的鏡像進行模式同步化

透過鏡像進行模式同步的方式,是將模式登錄請求從一個實例轉發到另一個實例。 這可讓使用者透過目標實例讀取來源實例或寫入來源實例,因為目標模式註冊處以特殊的「鏡像模式」運作 - 透明地代理與模式相關的要求至來源註冊處,並在需要時套用 ID 轉換。 此方法可簡化跨實體資料存取,並支援跨環境的無縫模式同步。

注意事項

使用鏡像同步化模式之前,請檢閱下列預防措施:

  1. 在兩個註冊表之間大量匯出/匯入模式時,需要一個維護視窗 - 維護視窗的時間約為幾小時或更短。
  2. 為了讓主題重新命名生效,模式必須使用 Confluent Avro Serdes,因此主題可以從主題名稱衍生出來。 Confluent Avro Serdes,因為與模式相關的主題可以從主題名稱衍生出來(例如,主題和主題/記錄主題命名策略)。
  3. 鏡像 S2S 授權必須不間斷;停用 s2s 授權或鏡像將阻止模式登錄請求的轉發。
  4. 如果需要轉換,則必須在進行任何遷移之前,使用主題重新命名規則配置目標實例模式登錄。
  5. 重命名規則在遷移完成前無法變更。 在遷移過程中進行變更會導致註冊表之間的不一致。

指示

以下指示概述了如何使用模式註冊表鏡像在兩個實例之間移動模式。

CLI 中尚未新增匯出公用程式。

允許的模式值

允許的模式值
價值 描述
代理 請求從目標實體轉發到來源實體。
只讀 允許需要 Reader 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-topic 就可以變成 new-my-topic。 啟用時,來源實例只識別原始名稱,而目標實例只識別新的(轉換後的)主題名稱。 所有傳回的結果都會進行相應的轉換。

如果沒有提供轉換規則,則會使用 use_alias,這與 Event Streams 中現有的鏡像行為一致。 若要轉寄而不變更主題名稱,請使用 topic_name_transform 鍵入 none。 轉換使用 現有的 CLI 轉換欄位 設定。

遷移流量

在兩個 Event Streams 實體之間遷移時,建議使用下列流程。

  1. 啟用兩個實體間的鏡射,指定 schemas: proxied
  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 鏡射顯示鏡射的狀態。