实例容量伸缩简介

本页面介绍了 Memorystore for Valkey 实例在伸缩期间的行为。

您可以通过以下方式扩缩实例的容量:

  • 您可以更改实例的分片数量。这就是横向伸缩。您可以通过以下任一方式横向扩缩实例:

    • 横向扩容:增加实例的容量,从而为实例提供更多内存和处理能力,以处理更大量的数据或流量。实例的容量由实例中的分片数量决定。

      通过伸缩实例,您的应用可以处理增加的需求,而不会降低性能。如需横向扩容实例,请向实例添加分片。

    • 缩容:减少实例的容量,这会降低处理能力和可用于存储数据的内存量。当应用的数据需求减少,并且您需要降低资源用量以节省费用时,就会发生这种情况。如需缩减实例,请减少实例中的分片数量。

  • 您可以更改实例的节点类型。这就是纵向伸缩。 您可以通过以下任一方式纵向扩缩实例:

    • 纵向扩容:增加实例的容量。实例的容量由实例的节点类型决定。如需纵向扩容实例,请将节点类型更改为更大的节点类型。例如,将实例从 standard-small 节点类型纵向扩容到 highmem-medium 节点类型。
    • 缩容:减少实例的容量。如需缩减实例,请将节点类型更改为较小的节点类型。例如,将实例从 highmem-medium 节点类型缩减为 standard-small 节点类型。

伸缩的影响

在伸缩操作期间,实例的可用性不会受到影响。不过,当您更改实例中的分片数量时,Memorystore for Valkey 会重新平衡实例的键空间。这可能会导致伸缩操作期间延迟时间增加。

此外,通过更改节点类型来纵向伸缩实例的影响与维护操作的影响类似。

故障场景

如果您在伸缩操作期间遇到错误,则可能是由于以下某种情况:

  • 您想更新实例的分片数量,但实例的 shared-core-nano 节点类型没有足够的可用内存。

    如需解决此问题,您可以纵向扩容实例或释放实例节点中的内存。如需释放内存,请执行以下操作:

    1. 连接到 Memorystore for Valkey 实例。
    2. 如需获取实例的详细信息(包括 IP 地址和端口号),请使用 gcloud memorystore instances describe 命令。
    3. 记下实例的 IP 地址和端口号。
    4. 如需获取有关实例节点的信息,请使用以下命令:

      valkey-cli -h IP_ADDRESS -p PORT_NUMBER cluster nodes
      

      将 IP_ADDRESS 和 PORT_NUMBER 替换为您在上一步中记下的值。

    5. 记下没有足够可用空间的节点的 IP 地址和端口号。此节点的 ID 与错误中显示的 ID 匹配。

    6. 如需连接到此节点,请使用以下命令:

      valkey-cli -h IP_ADDRESS -p PORT_NUMBER
      

      将 IP_ADDRESS 和 PORT_NUMBER 替换为您在上一步中记下的值。

    7. 在提示符处,输入 info memory 命令。

      在输出中,系统会显示 used_memory 和 maxmemory 参数的值。used_memory 是节点使用的内存量,maxmemory 是节点可用的内存量。

    8. 将 used_memory 参数的值除以 maxmemory 参数的值,并验证商是否大于 98%。

    9. 如需为节点释放空间,请删除节点的部分密钥。

    10. 再次输入 info memory 命令。在输出中,used_memory 参数的值较小。

    11. 将 used_memory 参数的值除以 maxmemory 参数的值,并验证商现在是否小于 98%。如果不是,请删除更多密钥。

    12. 对于没有足够可用空间的任何其他节点,请重复此过程的第 4 步到第 11 步。

  • 您缩减到了较小的分片数量,该数量无法容纳 Memorystore for Valkey 在原始实例中存储的所有键。如需解决此问题,请扩容到可容纳所有存储密钥的更大分片数。如需详细了解如何增加实例的分片数量,请参阅扩缩分片数量。

  • 您缩减到了容量更小的节点类型,该节点类型无法容纳 Memorystore for Valkey 在原始节点类型中存储的所有数据。如果发生这种情况,Memorystore for Valkey 会为您提供建议的节点类型,以便您进行纵向缩容。

  • 您更新了实例的节点类型,并且您覆盖了原始节点类型的默认设置,或者这些设置已被覆盖。不过,新的扩缩节点类型不支持默认设置的值,或者这些设置对该节点类型无效。如果发生这种情况,Memorystore for Valkey 会返回错误。如需解决此问题,请手动修改设置,使其对新节点类型有效。

  • 您在写入压力较高的时段(例如负载测试期间)扩缩了实例。如需解决此问题,请在实例流量较低的时段进行扩缩。

  • 您有一个包含大键的槽,并且您希望将此键迁移到另一个节点。不过,此节点的内存不足,无法支持该键。您无法更新实例。如需解决此问题,请减小密钥的大小,使其小于 128 MB。然后,重试更新操作。

  • 实例节点拥有的槽编号未知,只有槽范围已知。Memorystore for Valkey 会返回一条出错提示。如果发生这种情况,请减小密钥的大小,然后重试更新操作。

  • 您通过横向扩容到较小的分片数量,增加了实例的容量。不过,Memorystore for Valkey 没有足够的内存来满足此请求。如需解决此问题,请通过缩容到原始的较大分片数量来减少实例的容量。

最佳做法

为了帮助您扩缩实例的容量,我们建议您遵循以下最佳实践:

  • 选择伸缩时间:为了提高实例伸缩的速度和可靠性,请在流量较低的时段进行伸缩。如需了解如何监控实例流量,请参阅监控实例。
  • 无法扩缩时重试:资源可用性经常发生变化。如果您因临时资源限制而无法扩缩实例,请稍后尝试扩缩实例。