排查问题

本页面介绍了各种错误场景,并提供了解决这些错误的指南。

复制方案

本部分介绍了实例可能出现复制问题。

如何监控复制延迟?

Memorystore for Valkey 具有 /instance/replication/maximum_offset_diff 指标。此指标用于监控主实例中节点的复制偏移量差值上限(以字节为单位)。

通过保持较低的复制偏移量差值,副本可以更频繁地执行增量同步操作,并且与完全同步操作相比,费用更低。

建议您为 maximum_offset_diff 指标设置阈值。如果超过阈值,Memorystore for Valkey 可以通过提醒通知您。

根据实例的节点类型,我们建议您按如下方式设置阈值:

  • 如果节点类型为 shared-core-nanocustom-picocustom-microcustom-ministandard-smallhighmem-mediumhighcpu-mediumstandard-large,则将阈值设置为小于 64 MB。

  • 如果节点类型为 highmem-xlargehighmem-2xlarge,则将阈值设置为小于 1 GB。

如果主实例及其副本之间存在复制延迟,您该怎么办?

如果主实例的写入操作过多,而副本无法及时复制这些操作,则可能会出现明显的复制延迟。为解决此问题,我们建议您通过增加实例的分片数量来扩容实例。

CPU 使用情况场景

本部分介绍了实例可能会遇到的 CPU 使用率问题。

如果实例的输出缓冲区空间不足,您会怎么做?

如果 Memorystore for Valkey 实例的输出缓冲区空间不足,请执行以下操作:

当实例的内存已满且有新的写入时,Memorystore for Valkey 会根据实例的 maxmemory 政策逐出键,为写入腾出空间。allkeys-lru 政策会从整个键集中逐出最近最少使用的 (LRU) 键。

建议您监控实例的 maxmemory 和已用内存。这有助于您了解实例是否达到预配的实例容量。此外,通过减小 maxmemory 参数的值,您可以为开销留出更多空间。

为什么您的实例可能缺少外部指标?

如果实例的 CPU 利用率过高或实例的资源耗尽(例如,连接过多),则实例可能会出现异常行为,并且可能缺少外部指标。

如何隔离实例延迟时间的来源?

如需确定您遇到的延迟是源自实例、客户端应用还是网络环境,请使用 valkey-cli 工具运行持续延迟时间测试。

如需隔离实例延迟的来源,请执行以下操作:

  1. 连接到与实例位于同一区域和 VPC 网络中的 Compute Engine 虚拟机。

  2. 如果尚未安装,请在虚拟机上安装 valkey-cli 工具。

    • 对于基于 Debian 或 Ubuntu 的虚拟机,请运行以下命令:

      sudo apt-get install valkey-tools
      
    • 对于基于 RHEL 或 CentOS 的虚拟机,请运行以下命令:

      sudo yum install valkey-tools
      
  3. 如需以毫秒为单位衡量实例的延迟时间,请运行以下命令:

    redis-cli --latency -h ENDPOINT_ADDRESS -p PORT
    

    如果您的实例使用传输加密,请附加 --tls 标志并指定您的证书授权机构 (CA) 以进行连接。

    进行以下替换:

    • ENDPOINT_ADDRESS:实例端点的 IP 地址。
    • PORT:为实例的端点预留的端口号。此端口号通常为 6379。
  4. 让该命令运行几分钟。该工具会持续对服务器执行 ping 操作,并计算最小、最大和平均延迟时间值。

  5. 如需停止该命令并查看结果,请按 Ctrl+C

如果该命令输出的平均延迟时间始终很短(通常为 1 毫秒或更短),则表示实例运行状况良好,响应速度很快。

如果该命令显示延迟时间一直很短,但您的客户端应用仍然遇到延迟,则以下问题可能会导致延迟:

  • 网络:在客户端与实例之间跨不同区域或可用区路由流量可能会导致明显的网络延迟。
  • 客户端:客户端上的 CPU 或内存利用率过高、连接池耗尽或应用逻辑瓶颈可能会增加客户端体验到的总往返时间。

内存管理场景

本部分介绍了实例可能遇到的内存管理问题。

您可以使用哪个指标来确定实例是否处于内存压力状态?

如需监控 Memorystore for Valkey 实例的内存用量,建议您查看 /instance/memory/maximum_utilization 指标。如果实例的内存用量接近 80%,并且您预计数据用量会增加,那么请纵向扩容实例,以提高性能并为新数据腾出空间。

监控方案

本部分介绍了实例可能遇到的监控问题。

如何为 Memorystore for Valkey 设置提醒?

您可以使用 Cloud Monitoring 设置提醒,以便在任何指标超出您为实例设置的阈值时收到通知。如需详细了解如何在 Cloud Monitoring 中设置提醒,请参阅设置内存用量监控提醒

连接管理场景

本部分将介绍实例可能遇到的连接管理问题。

如果您达到连接上限或收到连接超时错误,该怎么办?

当您达到连接数上限时,客户端将无法连接到服务器。这称为“连接拒绝”。

如果出现这种情况,请执行以下操作:

超时场景

本部分介绍了实例可能遇到的超时问题。

如果您收到 I/O 超时,该怎么办?

如果 Memorystore for Valkey 中的读取或写入操作未能在指定时间内完成,则会发生 I/O 超时。此超时可能是由多种原因造成的。例如,实例的一个或多个节点可能过载。

如果您收到 I/O 超时错误,请执行以下操作:

  • 您可以使用 instance/cpu/maximum_utilization 指标来确定实例中节点的 CPU 利用率,范围为 0.0(0%)到 1.0(100%)。建议所有节点的 CPU 利用率百分比都低于 80%。如需了解详情,请参阅 CPU 使用情况最佳实践
  • 当客户端因服务器超时而与服务器断开连接时,使用指数退避抖动进行重试。这有助于避免多个客户端同时使服务器过载。

连接错误场景

本部分介绍了实例可能遇到的连接问题。

由防火墙规则导致的连接错误

防火墙规则可能会阻止 Memorystore for Valkey 使用的端口,从而导致连接错误。您必须为实例的两个 Private Service Connect 端点都添加许可名单,以允许所有端口。如需详细了解端点,请参阅预留的网络地址

组织政策导致的连接错误

您可能有一项组织政策会阻止您的 Private Service Connect 连接到 Memorystore for Valkey 实例。

如果您的组织政策使用 .restrictPrivateServiceConnectProducer 政策,请将 672235397475 文件夹编号列入许可名单,该文件夹专门用于 Memorystore for Valkey。例如:

name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
    rules:
      - values:
          allowedValues:
          - under:folders/672235397475

如果您的组织政策使用 .disablePrivateServiceConnectCreationForConsumers 政策,请将 SERVICE_PRODUCERS 列入许可名单。例如:

name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
    rules:
      - values:
          allowedValues:
          - SERVICE_PRODUCERS

因连接无响应而导致的连接错误

我们强烈建议您配置客户端应用,以检测与 Memorystore for Valkey 的无响应连接。检测到无响应的连接时,客户端必须重置该连接。为了构建弹性应用,我们建议采用以下客户端配置:

  • 配置 TCP keep-alive 参数:设置 TCP keepalive timeTCP keepalive intervalTCP keepalive probes 参数,以便客户端主动检测并断开无响应的连接,即使连接处于空闲状态也是如此。例如,如果您将 TCP keepalive time 参数设置为 30 秒,将 TCP keepalive interval 设置为 10 秒,并将 TCP keepalive probes 设置为 3,则客户端会在一分钟内重置无响应的空闲连接。
  • 配置 TCP 用户超时:在客户端中设置此超时时间,以重置具有未完成请求且停止响应的连接。例如,如果您将超时时间设置为 15 秒,则客户端会在 15 秒后重置未响应且有未完成请求的连接。

处理已停用集群模式的实例的错误

  • 如果应用连接到没有读取副本的实例的读取端点,则连接会关闭,并显示 ERR no replicas found 错误消息。在这种情况下,您可以尝试将应用连接到主端点,或向实例添加只读副本。

  • 如果发生故障切换,应用中的现有连接会关闭,并显示 ERR role change occurred 错误消息。如果应用连接到实例的读取端点,但该实例的所有读取副本都出现故障,您也会看到此错误消息。在这种情况下,应用必须使用指数退避算法重试连接。

持久性场景

本部分介绍了实例可能出现的持久性问题。

您的写入流量超出了 Memorystore for Valkey 通过 AOF 重写来压缩和回收空间的能力

如果出现这种情况,则附加日志文件 (AOF) 的增长速度会快于重写进程的处理速度。这会导致磁盘空间耗尽、写入失败,并阻止需要创建副本和完全同步的操作。

Memorystore for Valkey 实现了安全措施来规范写入吞吐量。 这可确保 AOF 重写能够跟上持续的高写入工作负载。