用于 Redis 的 Amazon ElastiCache
ElastiCache for Redis 用户指南 (API 版本 2015-02-02)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

最佳实践:在线集群大小调整

重新分片涉及在集群中增加或删除分片或节点以及重新分配密钥空间。因此,多重因素会对重新分片的操作产生影响,如集群的负载、内存使用率和整体数据大小。对于最佳体验,我们建议您遵循整体集群最佳实践进行统一工作负载模式分配。此外,我们建议执行以下步骤。

在启动重新分片前,建议进行以下操作:

  • 测试应用程序 – 尽可能在过渡环境中重新分片期间测试应用程序行为。

  • 获取扩展问题的提前通知 – 重新分片是一项需使用大量计算资源的操作。因此,我们建议在重新分片期间,多核心实例的情况下 CPU 保持 80% 以下的利用率,单核心实例的情况下 CPU 保持 50% 以下的利用率。在应用程序开始监测扩展问题前监控 ElastiCache for Redis 指标并启动重新分片。跟踪的有用指标为 CPUUtilizationNetworkBytesInNetworkBytesOutCurrConnectionsNewConnectionsFreeableMemorySwapUsageBytesUsedForCache

  • 缩减前请确保有足够的可用内存 – 如果要进行缩减,请确保要缩减的分片上的可用内存至少是您计划删除的分片上使用的内存的 1.5 倍。

  • 在非高峰时间启动重新分片 – 此实践有助于减少重新分片操作期间对客户端的延迟和吞吐量的影响。同样有助于更快完成重新分片,因为有更多资源可用于槽重新分配。

  • 审核客户端超时行为 – 部分客户端可能会在联机集群调整大小期间出现更高的延迟。为客户端库配置更高的超时会有所帮助,即便服务器处于更高的负载条件下,系统也有时间进行连接。在某些情况下,您可能会打开与服务器的大量连接。在这些情况下,请考虑增加指数回退以便重新连接逻辑。这样做可防止突增的新连接同时连接服务器。

在重新分片期间,建议进行以下操作:

  • 避免耗费大量资源的命令 – 避免运行任何计算型和 I/O 密集型操作,例如 KEYSSMEMBERS 命令。我们推荐此方法是因为这些操作可增加集群上的负载并能对集群的性能产生影响。改用 SCANSSCAN 命令。

  • 遵循 Lua 最佳实践 – 避免长时间运行 Lua 脚本并始终预先声明在 Lua 脚本中使用的密钥。我们建议使用此方法确定 Lua 脚本未使用跨槽命令。请确保 Lua 脚本中使用的密钥属于同一槽。

重新分片完成后,请注意以下事项:

  • 如果目标分片上的内存不足,缩减可能会部分完成。如果发生此结果,必要时请查看可用内存并重新进行操作。

  • 带有大型项目的槽不会迁移。特别是带有超过 256 MB 后序列化的槽不会迁移。

  • 如果在迁移的槽上进行操作,则不支持 BRPOPLPUSH。重新分片期间,Lua 脚本内不支持 FLUSHALLFLUSHDB 命令。