本页介绍了 Memorystore for Redis Cluster 实例在伸缩期间的行为。
您可以通过以下方式扩缩实例的容量:
您可以更改实例的分片数量。这属于 横向伸缩。您可以通过以下方式之一横向扩缩实例:
横向扩容:增加实例的容量,为实例提供更多内存和处理能力,以处理更大的数据量或流量。实例的容量由实例中的分片数量决定。
通过伸缩实例,您的应用可以处理不断增长的需求,而不会降低性能。如需扩容实例,请向实例添加分片。
缩容:减少实例的容量,从而减少处理能力和可用于存储数据的内存量。当应用的数据需求减少,并且您需要降低资源使用量以节省费用时,会发生这种情况。如需缩容实例,请减少实例中的分片数量。
您可以更改实例的节点类型。这属于 纵向伸缩。您可以通过以下方式之一纵向扩缩实例:
- 纵向扩容:增加实例的容量。实例的容量由实例的节点类型决定。如需纵向扩容实例,请将节点类型更改为更大的节点类型。例如,将实例从
redis-standard-small节点类型纵向扩容到redis-highmem-medium节点类型。 纵向缩容:减少实例的容量。如需纵向缩容实例,请将节点类型更改为更小的节点类型。例如,将实例从
redis-highmem-medium节点类型纵向缩容到redis-standard-small节点类型。
- 纵向扩容:增加实例的容量。实例的容量由实例的节点类型决定。如需纵向扩容实例,请将节点类型更改为更大的节点类型。例如,将实例从
伸缩的影响
在伸缩操作期间,实例的可用性不会受到影响。 但是,当您更改实例中的分片数量时,Memorystore for Redis Cluster 会重新平衡实例的键空间。这可能会导致伸缩操作期间的延迟时间增加。
此外,通过更改节点类型来纵向伸缩实例的影响 与 维护 操作的影响类似。
故障场景
如果在伸缩操作期间遇到错误,则可能是由于以下某种情况所致:
您想更新实例的分片数,但实例的
redis-shared-core-nano节点类型没有足够的可用内存。如需解决此问题,您可以纵向扩容实例,也可以从 实例的节点中释放内存。如需释放内存,请执行以下操作:
- 连接到 Memorystore for Redis Cluster 实例。
- 如需获取实例的详细信息(包括 IP 地址和端口
号),请使用
gcloud redis clusters describe命令。 - 记下实例的 IP 地址和端口号。
如需获取实例节点的相关信息,请使用以下命令:
redis-cli -h IP_ADDRESS -p PORT_NUMBER cluster nodes
将 IP_ADDRESS 和 PORT_NUMBER 替换为您在 上一步中记下的值。
记下可用空间不足的节点的 IP 地址和端口号。此节点的 ID 与错误中显示的 ID 匹配。
如需连接到此节点,请使用以下命令:
redis-cli -h IP_ADDRESS -p PORT_NUMBER
将 IP_ADDRESS 和 PORT_NUMBER 替换为您在上一步中记下的值。
在提示符处,输入
info memory命令。在输出中,会显示
used_memory和maxmemory参数的值。used_memory是节点使用的内存量,maxmemory是节点可用的内存量。将
used_memory参数的值除以maxmemory参数的值,并验证商是否大于 98%。如需为节点释放空间,请删除节点的部分键。
再次输入
info memory命令。在输出中,used_memory参数的值较小。将
used_memory参数的值除以maxmemory参数的值,并验证商现在是否小于 98%。 如果不是,请删除更多键。对于任何其他可用空间不足的节点,请重复此过程的第 4-11 步。
您缩容到了较小的分片数,该分片数没有足够的容量来容纳 Memorystore for Redis Cluster 存储在原始实例中的所有键。如需解决此问题,请扩容到可以容纳所有存储键的较大分片数。如需详细了解如何增加实例的 分片数量,请参阅扩缩分片数。
您纵向缩容到了较小的节点类型,该节点类型没有足够的容量来容纳 Memorystore for Redis Cluster 存储在原始节点类型中的所有数据。如果发生这种情况,Memorystore for Redis Cluster 会为您提供建议的节点类型,以便您纵向缩容。
您更新了实例的节点类型,并且您覆盖了原始节点类型的默认 设置,或者这些设置已被覆盖。但是,新的缩容节点类型要么不支持默认设置的值,要么这些设置对该节点类型无效。如果发生这种情况,Memorystore for Redis Cluster 会返回错误。如需解决此问题,请手动修改设置,使其对新节点类型有效。
您在写入压力较高的时段(例如在负载测试期间)扩缩了实例。如需解决此问题,请在实例流量较低的时段进行扩缩。
您有一个包含大键的槽,并且您想将此键迁移到另一个节点。但是,此节点没有足够的内存来支持该键。您无法更新集群。如需解决此问题,请减小键的大小,使其小于 128 MB。然后,重试更新操作。
集群的节点拥有的槽号未知,但仅知道槽范围。Memorystore for Redis Cluster 会返回错误消息。如果发生这种情况,请减小键的大小并重试更新操作。
您通过缩容到较小的分片数来增加集群的容量。但是,Memorystore for Redis Cluster 没有足够的内存来满足此请求。如需解决此问题,请通过缩容到原始的较大分片数来减少集群的容量。
最佳实践
为了帮助您伸缩实例的容量,并提高伸缩实例的速度和可靠性,请尽可能在流量较低的时段进行伸缩。如需了解如何监控实例流量,请参阅监控集群。