

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

# 在线集群大小调整
<a name="best-practices-online-resharding"></a>

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

在启动重新分片前，建议进行以下操作：
+ **测试应用程序** – 尽可能在过渡环境中在重新分片期间测试应用程序行为。
+ **获取扩展问题的提前通知** – 重新分片是一项需使用大量计算资源的操作。因此，我们建议在重新分片期间，多核心实例的情况下 CPU 保持 80% 以下的利用率，单核心实例的情况下 CPU 保持 50% 以下的利用率。在应用程序开始监测扩缩问题前监控 ElastiCache for Redis OSS 指标并启动重新分片。跟踪的有用指标为 `CPUUtilization`、`NetworkBytesIn`、`NetworkBytesOut`、`CurrConnections`、`NewConnections`、`FreeableMemory`、`SwapUsage` 和 `BytesUsedForCacheItems`。
+ **横向缩减前请确保有足够的空余内存可用** – 如果要进行横向缩减，请确保要保留的分片上的可用空余内存至少是您计划删除的分片上已用内存的 1.5 倍。
+ **在非高峰时间启动重新分片** – 此做法有助于减少重新分片操作期间对客户端的延迟和吞吐量的影响。同样有助于更快完成重新分片，因为有更多资源可用于槽重新分配。
+ **审核客户端超时行为** – 部分客户端可能会在联机集群调整大小期间出现更高的延迟。为客户端库配置更高的超时会有所帮助，即便服务器处于更高的负载条件下，系统也有时间进行连接。在某些情况下，您可能会打开与服务器的大量连接。在这些情况下，请考虑增加指数回退以便重新连接逻辑。这样做可防止突增的新连接同时连接服务器。
+ **在每个分片上加载函数** - 横向扩展集群时，ElastiCache 会自动将其中一个现有节点（随机选择）中加载的函数复制到新节点。如果您的集群有 Valkey 7.2 和更高版本或者 Redis OSS 7.0 或更高版本，并且您的应用程序使用 [Functions](https://valkey.io/topics/functions-intro/)，我们建议您在横向扩展之前将所有函数加载到所有分片，这样您的集群就不会在不同的分片上有不同的函数。

重新分片完成后，请注意以下事项：
+ 如果目标分片上的内存不足，缩减可能会部分完成。如果发生此结果，必要时请查看可用内存并重新进行操作。目标分片上的数据不会被删除。
+ 在重新分片操作期间，Lua 脚本中不支持 `FLUSHALL` 和 `FLUSHDB` 命令。在 Redis OSS 6 之前，不支持在要迁移的槽上运行 `BRPOPLPUSH` 命令。