在线集群大小调整 - 亚马逊 ElastiCache

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在线集群大小调整

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

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

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

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

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

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

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

  • 在每个分片上加载您的函数 — 扩展集群时,ElastiCache 会自动将现有节点之一(随机选择)中加载的函数复制到新节点。如果您的集群有 Valkey 7.2 及更高版本或 Redis OSS 7.0 或更高版本,并且您的应用程序使用 Functions,我们建议您在扩展之前将所有函数加载到所有分片中,这样您的集群就不会在不同的分片上出现不同的功能。

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

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

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

  • 在重新分片操作期间,Lua 脚本中不支持 FLUSHALLFLUSHDB 命令。在 Redis OSS 6 之前,如果该BRPOPLPUSH命令在要迁移的插槽上运行,则不支持该命令。