IBM Cloud Docs
启用镜像

启用镜像

本信息描述了如何将两个 Event Streams 企业集群设置为镜像对。 用例包括灾难恢复、备份和地理复制。

Event Streams 当您构建一个涉及镜像的解决方案时,请考虑您的解决方案将如何处理以下两种情况:

数据丢失
镜像是异步的。 即,必须先将消息成功生成到源集群,然后再将其镜像到目标集群。 如果在对这些消息进行镜像之前在源集群上发生故障,那么应用程序将需要处理这些消息的丢失。
至少一次
在镜像过程中可能会发生消息重复。 在源集群中落实的使用者组偏移量可能不会转换为目标集群中的检查点。 在故障转移时,使用者可能需要重新处理已在源集群上使用和落实的消息。

将镜像与 Event Streams 配合使用会产生每个镜像容量单位小时的额外费用。 有关更多信息,请转至 目录 并搜索 Event Streams。 然后,您可以查看定价计划。

目前,启用 Event Streams 服务实例的镜像功能需要使用 IBM Cloud CLI。

要安装 CLI,请参阅 使用插件扩展 IBM Cloud CLI

IBM Cloud CLI 使用 service-instance-update 命令来更新您的 Event Streams 服务实例资源。用于运行服务实例更新命令的帐户中的用户ID必须分配与您创建资源时所需的访问策略相同的访问策略。 有关访问权需求的信息,请参阅 创建资源所需的访问权

为 Event Streams 服务实例启用镜像所需的时间有所不同,但在正常情况下不超过 2 小时。

设置

请确保您配置了两个企业计划集群。 两个集群必须具有相同的吞吐量和存储容量,并且具有服务到服务绑定 (请参阅 步骤 2 以获取更多信息)。

因为镜像是单向的,所以请决定您想要的镜像方向。 一个集群是源,另一个集群是目标。

决定要镜像源集群中的哪些主题。 默认情况下,没有主题被镜像,您可以在镜像启用后使用用户控件启用镜像,如 步骤4 所示。 必须将选择指定为一个或多个模式。

考虑带宽需求;源集群中是否有足够的带宽可供使用?源集群需要有一些空余空间来运行镜像。有关集群带宽限制,请参阅选择套餐。要确定源集群的繁忙程度以及源集群是否有空余空间可用于镜像,请使用 Event Streams 度量值

虽然允许从企业多区域集群镜像到企业单区域集群,反之亦然,但除非您有特定的居住要求并了解其影响,否则不建议使用此配置。 企业多区域集群与企业单区域集群的服务水平协议(SLA)政策可能更低,反之亦然。

启用服务对服务绑定

必须在两个实例之间配置服务到服务绑定,以允许两个实例进行通信。 要进行配置,请完成以下步骤:

当您创建服务到服务的绑定时,IAM使用术语“源”和“目标”的方式与 Event Streams 相反。 IAM源账户包含 Event Streams 镜像目标实例,反之亦然。

  1. 选择包含 Event Streams 镜像源服务实例的 IBM Cloud 帐户。
  2. 导航至 IAM 中的授权面板,然后单击创建
  3. 对于 部分:
    • 如果您正在镜像另一个账户中的目标实例,请在源标题下选择“另一个账户”,然后选择包含镜像目标实例的账户。 如果在同一帐户中的服务实例之间进行镜像,那么可以选择缺省值“此帐户”。
    • 选择镜像目标 Event Streams 实例作为 IAM 源服务实例。
  4. 对于 目标 选择,选择镜像源 Event Streams 实例作为 IAM 目标服务实例。
  5. 分配 “阅读者”角色并点击“授权”。

如果您的要求是回退,那么您还需要反向的服务绑定。

以下示例显示如何使用命令行来配置服务到服务绑定。

  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 账户下的两个 Event Streams 实例之间设置镜像,则可以省略 --source-service-account 选项。

如需了解服务绑定方面的更多信息,请访问 管理授权 面板使用授权来授予服务之间的访问权限

启用镜像并选择要镜像的主题

要启用镜像,您需要 service-instance-update 命令,使用CLI并输入以下所需参数:

启用镜像时所需的参数
必需参数 描述
source_crn 要镜像的源集群的 crn
source_alias 用于源集群的别名
目标别名 用于目标集群的别名
  • source_crn 的格式如下:crn:v1:bluemix:public:messagehub:us-south:a/aaa:aaaa::
  • source_aliastarget_alias 是在启用镜像时要为两个服务实例中的每个实例配置的别名。 别名出现在话题名称中。 选择简短名称和描述性名称。 例如“美国南部”和“美国东部”。

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

情景 3:主题被镜像,名称保持不变

在这种情况下,您还需要将 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"
    }
  }
}

方案 2:消费者组 ID 被镜像,名称不变

在这种情况下,您还需要将 topic_name_transform 的类型设置为 none。 使用此配置,源集群中名为 aaa-group-id 的主题将镜像到目标集群中名为 aaa-group-id 的主题。

请参阅以下 CLI 命令示例:

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

验证

您可以通过运行以下命令获取当前服务实例的信息:

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 镜像显示镜像状态。