本页面介绍了各种错误场景,并提供了解决这些错误的指南。
复制场景
本部分介绍了集群可能出现的复制问题。
如何监控复制延迟?
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 重写能够跟上持续的高写入工作负载。