本页面介绍了各种错误场景,并提供了解决这些错误的指南。
复制方案
本部分介绍了集群可能出现的复制问题。
如何监控复制延迟?
Memorystore for Redis Cluster 具有 /cluster/replication/maximum_offset_diff 指标。此指标用于监控主集群中节点的最大复制偏移差(以字节为单位)。
通过保持较低的复制偏移量差值,副本可以更频繁地执行增量同步操作,并且与完全同步操作相比,费用更低。
建议您为 maximum_offset_diff 指标设置阈值。如果超出阈值,Memorystore for Redis Cluster 可以通过提醒通知您。
根据集群的节点类型,我们建议您按如下方式设置阈值:
如果节点类型为
redis-shared-core-nano、redis-standard-small、redis-highmem-medium、redis-highcpu-medium或redis-standard-large,则将阈值设置为小于 64 MB。如果节点类型为
redis-highmem-xlarge或redis-highmem-2xlarge,则将阈值设置为小于 1 GB。
连接错误场景
本部分介绍了集群可能遇到的连接问题。
由防火墙规则导致的连接错误
防火墙规则可能会阻止 Memorystore for Redis Cluster 使用的端口,从而导致连接错误。对于集群的两个 Private Service Connect 端点,允许 TCP 端口 11000 到 13047。如需详细了解这些端点,请参阅预留的网络地址。
组织政策导致的连接错误
您可能有一项组织政策会阻止 Private Service Connect 连接到您的集群。
如果您的组织政策使用 .restrictPrivateServiceConnectProducer 政策,请允许 961333125034 文件夹,该文件夹专门用于 Memorystore for Redis Cluster。例如:
name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
rules:
- values:
allowedValues:
- under:folders/961333125034
如果您的组织政策使用 .disablePrivateServiceConnectCreationForConsumers 政策,则允许 SERVICE_PRODUCERS。例如:
name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
rules:
- values:
allowedValues:
- SERVICE_PRODUCERS
因连接无响应而导致的连接错误
我们强烈建议您配置客户端应用,以检测与 Memorystore for Redis Cluster 的无响应连接。检测到无响应的连接时,客户端必须重置该连接。为了构建弹性应用,我们建议采用以下客户端配置:
- 配置 TCP keep-alive 参数:设置
TCP keepalive time、TCP keepalive interval和TCP keepalive probes参数,以便客户端主动检测并断开无响应的连接,即使连接处于空闲状态也是如此。例如,如果您将TCP keepalive time参数设置为 30 秒,将TCP keepalive interval设置为 10 秒,并将TCP keepalive probes设置为 3,则客户端会在一分钟内重置无响应的空闲连接。 - 配置 TCP 用户超时:在客户端中设置此超时时间,以重置具有未完成请求且停止响应的连接。例如,如果您将超时时间设置为 15 秒,则客户端会在 15 秒后重置具有未完成请求的无响应连接。
CPU 使用情况场景
本部分介绍了集群可能遇到的 CPU 使用率问题。
集群的输出缓冲区空间不足
如果集群的输出缓冲区空间不足,请执行以下操作:
- 为
maxmemory参数设置较小的值。 - 使用
allkeys-lrumaxmemory政策。
当集群的内存已满且有新的写入时,Memorystore for Redis Cluster 会根据集群的 maxmemory 政策逐出键,为写入腾出空间。allkeys-lru 政策会从整个键集中逐出最近最少使用的 (LRU) 键。
建议您监控集群的 maxmemory 和已用内存。这有助于您了解集群是否已达到预配的集群容量。此外,通过减小 maxmemory 参数的值,您可以为开销留出更多空间。
为什么您的集群可能缺少外部指标?
如果集群的 CPU 利用率过高或集群的资源耗尽(例如,连接过多),则集群可能会出现异常行为,并且可能缺少外部指标。
隔离集群延迟的来源
如需确定您遇到的延迟是源自集群还是源自客户端应用和网络环境,您可以使用 redis-cli 工具运行持续延迟测试。
如需找出集群延迟的根源,请执行以下操作:
连接到与集群位于同一区域和 VPC 网络中的 Compute Engine 虚拟机。
如果尚未安装,请在虚拟机上安装
redis-cli工具。对于基于 Debian 或 Ubuntu 的虚拟机,请运行以下命令:
sudo apt-get install redis-tools对于基于 RHEL 或 CentOS 的虚拟机,请运行以下命令:
sudo yum install redis
如需以毫秒为单位衡量集群的延迟时间,请运行以下命令:
redis-cli --latency -h DISCOVERY_ENDPOINT_ADDRESS -p PORT
如果您的集群使用传输中加密,则必须附加
--tls标志并指定证书授权机构 (CA) 才能连接。进行以下替换:
- DISCOVERY_ENDPOINT_ADDRESS:集群的发现端点的 IP 地址。
- PORT:为集群的发现端点预留的端口号。此端口号通常为 6379。
让该命令运行几分钟。该工具会持续对服务器执行 ping 操作,并计算最小、最大和平均延迟时间值。
如需停止命令运行以便查看结果,请按
Ctrl+C。
如果该命令输出的平均延迟时间始终很短(通常为 1 毫秒或更短),则表示集群运行状况良好且响应速度快。
如果该命令显示服务器性能正常,但您的客户端应用仍然遇到延迟,则可能是以下问题导致了延迟:
- 网络:在客户端与集群之间跨不同区域或可用区路由的流量可能会导致明显的网络延迟。
- 客户端:客户端上的 CPU 或内存利用率过高、连接池耗尽或应用逻辑瓶颈可能会增加客户端体验到的总往返时间。
持久性场景
本部分介绍了集群可能出现的持久性问题。
您的写入流量超出了 Memorystore for Redis Cluster 通过 AOF 重写来压缩和回收空间的能力
如果出现这种情况,则附加日志文件 (AOF) 的增长速度会快于重写进程的处理速度。这会导致磁盘空间耗尽、写入失败,并阻止需要创建副本和完全同步的操作。
Memorystore for Redis Cluster 实现了防护措施来调节写入吞吐量。这可确保 AOF 重写能够跟上持续的高写入工作负载。