故障转移账户对象

本主题介绍在不同 区域 用于灾难恢复的多个账户之间对复制的账户对象进行故障转移所需的步骤。

本主题内容:

先决条件要求

  1. 为一组账户中的主要故障转移组启用复制。

  2. 在一个或多个账户中创建至少一个主要故障转移组的辅助故障转移组(即副本),并定期使用故障转移组中对象的最新更新刷新(即同步)该副本。

有关说明,请参阅 跨多个账户复制数据库和账户对象

将目标账户提升为源账户

要将目标账户提升为源账户,必须登录到要提升为新源账户的目标账户,并执行 ALTER FAILOVER GROUP ...PRIMARY 命令来执行完全刷新。

将辅助故障转移组提升为主要故障转移组

备注

本节中的示例必须由具有 FAILOVER 权限的角色执行。

以下示例将当前 myorg 组织中的 myaccount2 提升为源账户。

  1. 登录到目标账户 myaccount2

  2. 列出账户中的故障转移组:

    SHOW FAILOVER GROUPS;
    
    Copy
  3. 对要提升为主故障转移组的每个辅助故障转移组,执行以下语句:

    ALTER FAILOVER GROUP myfg PRIMARY;
    
    Copy

    备注

    在源区域发生部分中断期间,复制服务可能仍可用,并且可能仍刷新目标区域中的辅助故障转移组。

    为确保数据完整性,如果正在进行刷新操作,Snowflake 会阻止故障转移。这意味着,如果复制操作正在刷新辅助故障转移组,则无法将其提升为主故障转移组。在这种情况下,ALTER FAILOVER GROUP ...PRIMARY 命令将返回错误。

解决因刷新操作正在进行而引起的故障转移语句失败的问题

如果正在对尝试提升的辅助故障转移组执行刷新操作,则故障转移语句将生成以下错误:

Replication group "<GROUP_NAME>" cannot currently be set as primary because it is being
refreshed. Either wait for the refresh to finish or cancel the refresh and try again.

要成功进行故障转移,必须完成以下步骤。

  1. 选择并完成以下选项之一:

    1. 暂停以后的故障转移组刷新操作。如果刷新操作正在进行,则必须等待该操作完成,然后才能进行故障转移:

      ALTER FAILOVER GROUP myfg SUSPEND;
      
      Copy
    2. 暂停以后的刷新操作,并且 如果当前正在执行刷新操作,取消正在进行的操作:

      ALTER FAILOVER GROUP myfg SUSPEND IMMEDIATE;
      
      Copy

      备注

      在语句返回的时间与取消刷新操作完成的时间之间可能会有稍许延迟。

  2. 验证故障转移组 myfg 未进行任何刷新操作。以下查询不应返回任何结果:

    SELECT phase_name, start_time, job_uuid
      FROM TABLE(INFORMATION_SCHEMA.REPLICATION_GROUP_REFRESH_HISTORY('myfg'))
      WHERE phase_name <> 'COMPLETED' and phase_name <> 'CANCELED';
    
    Copy

    要查看故障转移组 myfg 的已取消刷新操作,可以执行以下语句:

    SELECT phase_name, start_time, job_uuid
      FROM TABLE(information_schema.replication_group_refresh_history('myfg'))
      WHERE phase_name = 'CANCELED';
    
    Copy
  3. 现在,可以将辅助故障转移组 myfg 提升为主故障转移组:

    ALTER FAILOVER GROUP myfg PRIMARY;
    
    Copy

恢复目标账户中的计划复制

故障转移时,所有辅助故障转移组上的计划刷新都会暂停。ALTER FAILOVER GROUP ...RESUME 必须在具有辅助故障转移组的每个 目标账户 中执行,以恢复自动刷新。

ALTER FAILOVER GROUP myfg RESUME;
Copy

在新提升的源账户中重新打开 Snowpipe Streaming 的活动通道

主数据库中由 Snowpipe Streaming 填充的表会复制 到辅助数据库。故障转移后,为表重新打开活动的 Snowpipe Streaming 通道,并为通道重新插入任何缺失的数据行:

  1. 通过调用 openChannel (https://javadoc.io/doc/net.snowflake/snowflake-ingest-sdk/latest/net/snowflake/ingest/streaming/SnowflakeStreamingIngestClient.html) API 可重新打开表的活动通道。

  2. 提取偏移令牌:

    1. 调用 getLatestCommittedOffsetToken (https://javadoc.io/doc/net.snowflake/snowflake-ingest-sdk/latest/net/snowflake/ingest/streaming/SnowflakeStreamingIngestChannel.html#getLatestCommittedOffsetToken()) API

    2. 执行 SHOW CHANNELS 命令检索表中活动通道的列表。

  3. 从提取的偏移令牌中为通道重新插入数据行。

Snowpipe Streaming 和 Kafka Connector

如果使用 Kafka Connector 和 Snowpipe Streaming,请在故障转移后按照以下步骤操作:

  1. 更新 Kafka Connector 配置,以指向新提升的源账户。

  2. 执行 SHOW CHANNELS 命令,检索活动通道列表和偏移令牌。每个通道都属于 Kafka 主题中的一个分区。

  3. 为每个分区(通道)手动重置 Kafka 主题中的偏移。

  4. 重新启动 Kafka Connector。

有关更多信息,请参阅:

语言: 中文