手动故障切换简介

本页面简要介绍了 Memorystore for Redis 的手动故障切换。要了解如何执行故障切换,请参阅启动手动故障切换

什么是手动故障切换?

标准层级 Memorystore for Redis 实例使用副本节点来备份主节点。当主节点健康状况不佳时会发生正常故障切换,从而使副本被指定为新的主实例。手动故障切换与正常故障切换的不同之处在于由用户自行启动手动故障切换。如需详细了解 Memorystore for Redis 复制功能的工作原理,请参阅高可用性

为什么启动手动故障切换?

启动手动故障切换使您能够测试应用如何响应故障切换。如果将来发生意外故障切换,这些信息可确保故障切换过程更顺畅。

可选的数据保护模式

以下是两种可用的数据保护模式:

  • limited-data-loss 模式(默认)。
  • force-data-loss 模式。

如需设置数据保护模式,请使用以下某个命令:

gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss

gcloud redis instances failover INSTANCE_NAME --data-protection-mode=force-data-loss

数据保护模式的工作原理

limited-data-loss 模式在启动故障切换之前验证主实例和副本之间的数据差异是否低于 30 MB,从而最大限度地减少数据丢失。对于必须同步到其副本的数据的每个字节,主实例上的偏移量都会递增。在 limited-data-loss 模式下,如果主实例与每个副本之间的最大偏移量超过 30MB,则故障切换操作将中止。如果您可以接受更多数据丢失并且希望主动执行故障切换,请尝试将数据保护模式设置为 force-data-loss

force-data-loss 模式采用一系列故障切换策略积极执行故障切换。在启动故障切换之前,它不会检查主实例和副本之间的偏移量;您可能会丢失超过 30MB 的数据更改。

待复制的字节数指标

待复制的字节数指标指示在完全备份主节点之前副本需要复制的剩余字节数。在故障切换期间,当主实例复制到副本时,您可能会发现待处理字节数增加。如果硬件错误触发了故障切换,您可能会看到待复制的字节数为空,因为只有在根据主机错误修复新副本后,才可以获取偏移值。

您可以在 Google Cloud 控制台中的实例详情页面上访问此指标。要查看实例详情页面,请点击项目的实例列表页面中的实例 ID。

或者,您也可以访问项目的 Metrics Explorer,并搜索 redis.googlapis.com/replication/offset_diff 指标。

何时运行手动故障切换

只有待复制字节数指标低于 30MB 时,使用默认 limited-data-loss 保护模式的手动故障切换才会成功。如果您想要在待复制字节数高于 30MB 时运行手动故障切换,请使用 force-data-loss 保护模式。

如果您要尝试保留尽可能多的数据,请暂时停止应用写入 Redis 实例,并等到待复制字节数指标低至您认为可以接受后再运行手动故障切换。

阻止手动故障切换的潜在问题

  • 在基本层级实例上运行手动故障切换不起作用,因为基本层级实例没有主实例可以进行故障切换的副本。

  • 如果您的 Redis 实例健康状况不佳,则数据损失有限的手动故障切换操作将失败,因为它被阻止以最大限度减少数据丢失。

  • 如果您运行的是无限期执行的 Lua 脚本,则必须使用 force-data-loss 启动故障切换。在这种情况下,只有数据丢失的故障切换操作无法成功完成。

  • 如果您的实例具有待处理的未完成操作(例如扩缩或更新),则手动故障切换操作会被阻止。您必须等到实例处于 READY 状态才能运行手动故障切换。

客户端应用连接

当主节点故障切换到副本时,到 Memorystore for Redis 的现有连接会断开。但是,一旦重新连接,您的应用便可自动重定向到使用原先的连接字符串或 IP 地址的新主节点。

验证手动故障切换

您可以使用 Google Cloud 控制台或 gcloud 验证手动故障切换操作是否成功。

Google Cloud 控制台验证

在启动手动故障切换之前,请转到 Memorystore for Redis 实例列表页面,然后点击您的实例的名称。

然后,在配置标签页中的主要位置旁边,查看您的主节点所在的可用区。记下可用区。请在完成手动故障切换时再次查看此页面,以确认主节点切换了可用区。

Cloud Monitoring 验证

如需使用 Metrics Explorer 查看受监控资源的指标,请执行以下操作:

  1. 在 Google Cloud 控制台的导航面板中,选择 Monitoring,然后选择  Metrics Explorer

    进入 Metrics Explorer

  2. 指标元素中,展开选择指标菜单,在过滤栏中输入 Node role,然后使用子菜单选择一个特定资源类型和指标:
    1. 活跃资源菜单中,选择 Cloud Memorystore Redis
    2. 活跃指标类别菜单中,选择复制
    3. 活跃指标菜单中,选择节点角色
    4. 点击应用
  3. 如需从显示结果中移除时序,请使用过滤条件元素

  4. 如需组合时序,请使用聚合元素上的菜单。例如,如需根据虚拟机所在的可用区显示虚拟机的 CPU 利用率,请将第一个菜单设置为平均值,并将第二个菜单设置为可用区

    聚合元素的第一个菜单设置为未聚合时,系统会显示所有时序。聚合元素的默认设置由您选择的指标类型决定。

  5. 对于配额和每天报告一个样本的其他指标,请执行以下操作:
    1. 显示窗格中,将微件类型设置为堆叠条形图
    2. 将时间段设置为至少一周。

Cloud Monitoring 图表以两行表示主节点和副本节点。如果某节点的行在图表上的值为 0,则该节点是副本节点。如果某节点的行在图表上的值为 1,则该节点是主节点。该图表通过分别展示行如何从 1 切换到 0,以及如何从 0 切换到 1 来表示故障切换。

gcloud 验证

在启动手动故障切换之前,请使用以下命令检查主节点所在的区域:

gcloud redis instances describe [INSTANCE_ID] --region=[REGION]

主节点位于标记为 currentLocationId 的区域中。请记下该区域。

完成手动故障切换后,您可以通过再次运行 gcloud redis instances describe 命令并检查 currentLocationId 是否已更改区域来确认主节点已切换到新区域。

此外,locationId 标签指示最初预配主节点的区域。alternativeLocationId 标签指示系统最初预配副本节点的区域。每次发生故障切换时,主实例和副本都会在这两个区域之间切换。但是,与 locationIdalternativeLocationId 关联的区域不会更改。