你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

缩放 Azure 托管 Redis(预览版)实例

Azure 托管 Redis(预览版)具有不同的 SKU 和层级产品/服务,使你可以灵活地选择缓存大小和性能。 你可以纵向扩展到更大内存大小,也可以更改为计算性能更高的层级。 本文演示了如何使用 Azure 门户以及 Azure PowerShell 和 Azure CLI 等工具来缩放缓存。

注意

由于 Azure 托管 Redis 的每个层级都具有几乎相同的功能,因此缩缝仅用于更改内存和性能特性。

重要

目前,仅支持纵向扩展到内存大小更大的层级或性能更高的层级。 尚不支持纵向缩减内存大小或性能较低的层级。

缩放类型

Azure 托管 Redis 支持在两个维度上进行缩放:

  • 内存:增加内存会增大 Redis 实例的大小,使你可以存储更多数据。

  • vCPU:Azure 托管 Redis 提供三个层级(内存优化、均衡和计算优化),每个内存级别的 vCPU 数越来越多。 缩放到具有更多个 vCPU 的层级可以提高实例的性能,而无需增加内存。 与只能使用单个 vCPU 的 Redis 社区版不同,Azure 托管 Redis 使用 Redis Enterprise 堆栈,后者能够使用多个 vCPU。 这意味着 Redis 实例使用的 vCPU 数直接与吞吐量和延迟性能相关。

性能层

Azure 托管 Redis 有四个可用层级,每个层级都具有不同的性能特征和价格级别。

有三个层级适用于内存中数据:

  • 内存优化。 非常适合需要高内存与 vCPU 比率 (8:1) 但不需要最高吞吐量性能的内存密集型用例。 对于处理能力或吞吐量要求较低的场景,该层级提供了更低的价格点,是开发和测试环境的理想选择。
  • 均衡(内存 + 计算)。 提供均衡的内存与 vCPU 比率 (4:1),是标准工作负载的理想选择。 该层级能够很好地均衡内存与计算资源。
  • 计算优化。 专为需要最大吞吐量的高性能工作负载设计,具有较低的内存与 vCPU 比率 (2:1)。 该层非常适合需要最高性能的应用程序。

有一个层级将数据同时存储在内存和磁盘中:

  • 闪存优化。 使 Redis 群集能够自动将不常访问的数据从内存 (RAM) 移至 NVMe 存储。 这会降低性能,但可以在大数据集的缓存中进行具有成本效益的扩展。

层级和 SKU 概览

显示 Azure 托管 Redis 每个 SKU 和层级的不同内存和 vCPU 配置的表格。

性能(吞吐量和延迟)

有关性能基准以及如何衡量每个 SKU 和层级的性能的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试

何时缩放

可使用 Azure 托管 Redis 的监视功能来监视缓存的运行状况和性能。 使用该信息确定何时缩放缓存。

可以监视以下指标来确定是否需要进行缩放。

  • CPU
    • 高 CPU 使用率意味着 Redis 服务器无法应对来自所有客户端的请求。 纵向扩展到更多个 vCPU 有助于跨多个 Redis 进程分配请求。 缩放还有助于分发 TLS 加密/解密和连接/断开连接,从而使用 TLS 加快缓存实例的速度。
  • 内存使用率
    • 高内存用量指示数据大小对于当前的缓存大小来说太大。 请考虑缩放到具有更大内存的缓存大小。
  • 客户端连接
    • 每个缓存大小都有其所能支持的客户端连接数的限制。 如果客户端连接即将达到缓存大小限制,请考虑扩展到内存大小更大的层级或性能更高的层级。
    • 有关按缓存大小列出的连接限制的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试
  • 网络带宽
    • 如果 Redis 服务器超出可用带宽,则客户端请求可能会超时,因为服务器无法以足够快的速度将数据推送到客户端。 要了解使用的服务器端带宽量,请检查“缓存读取”和“缓存写入”指标。 如果 Redis 服务器超出了可用的网络带宽,请考虑扩展到性能更高的层级或缓存大小更大的层级。
    • 群集策略的选择会影响可用的网络带宽。 通常,OSS 群集策略的网络带宽高于 Enterprise 群集策略的带宽。 有关详细信息,请参阅群集策略
    • 有关按缓存大小列出的可用带宽的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试

有关确定应使用哪个缓存定价层的详细信息,请参阅选择正确的层级

注意

有关如何优化缩放过程的详细信息,请参阅缩放最佳做法指南

缩放 Azure 缓存 Redis 的先决条件/限制

  • 不能从内存优化层、均衡层或计算优化层缩放到闪存优化层,反之亦然
  • 无法纵向缩减到具有较少 vCPU 的 SKU。 (跨多个层级或在某个层级内。)
  • 即使具有相同或更多个 vCPU,你也无法纵向缩减到更小的内存大小。
  • 在某些情况下,缩放时,Redis 实例的基础 IP 地址可能会更改。 实例的 DNS 记录会更改,且对大多数应用程序透明。 但如果使用 IP 地址配置与缓存的连接、配置 NSG 或允许流量进入缓存的防火墙,则应用程序在 DNS 记录更新后的某个时间可能会遇到连接问题。
  • 缩放异地复制组中的实例有更多限制。 有关详细信息,请参阅异地复制是否存在缩放限制

如何缩放

提示

可以在一个操作中更改内存大小和性能层。

使用 Azure 门户进行缩放

  1. 要缩放缓存,请在 Azure 门户浏览到缓存,并从“资源”菜单中选择“缩放”。

    显示在 Enterprise 缓存的“资源”菜单中选择了“缩放”的屏幕截图。

  2. 要进行纵向扩展,请选择其他缓存类型,然后选择“保存”。

    重要

    如果选择无法缩放到的 SKU,则会禁用“保存”选项。 有关可使用的缩放选项的详细信息,请参阅缩放 Azure 托管 Redis 的先决条件/限制部分。

    显示工作窗格中 Enterprise 层的屏幕截图。

  3. 当缓存缩放到新层级时,会显示“缩放 Redis 缓存”通知。

    显示缩放 Enterprise 缓存的通知的屏幕截图。

  4. 缩放完成后,状态将从正在缩放更改为正在运行

使用 PowerShell 进行缩放

可以使用 Update-AzRedisEnterpriseCache cmdlet 通过 PowerShell 缩放 Azure 托管 Redis 实例。 可以修改 Sku 属性以选择所需的层级和 SKU。 以下示例演示了如何将名为 myCache 的缓存缩放为容量为 4 的计算优化 X20 (24 GB) 的实例。

   Update-AzRedisEnterpriseCache -ResourceGroupName myGroup -Name myCache -Sku ComputeOptimized_X20

使用 Azure CLI 进行缩放

要使用 Azure CLI 缩放 Azure 托管 Redis 实例,请调用 az redisenterprise update 命令。 可以修改 sku 属性以选择所需的层级和 SKU。 以下示例演示了如何将名为 myCache 的缓存缩放为容量为 4 的计算优化 X20 (24 GB) 的实例。

az redisenterprise update --cluster-name "myCache" --resource-group "myGroup" --sku "ComputeOptimized_X20"

关于缩放的常见问题

以下列表包含有关 Azure 托管 Redis 缩放的常见问题的解答。

是否可以在层内或跨层缩放?

始终可以在相同的内存大小下扩展到更高的性能层,或者在相同的性能层中扩展到更大的内存大小。 要缩放到较低的性能层或更小的内存大小,请参阅缩放 Azure 托管 Redis 的先决条件/限制

缩放后,我是否需要更改缓存名称或访问密钥?

不需要,在缩放操作期间缓存名称和密钥不变。

缩放的工作原理?

  • 缩放 Redis 实例时,Redis 群集中节点之一将关闭并重新预配为新大小。 然后数据传输过来,然后另一个节点在重新预配之前执行类似的故障转移。 这类似于修补期间发生的进程或其中一个缓存节点的故障。
  • 当缩放为具有更多个 vCPU 的实例时,将预配新的分片并将其添加到 Redis 服务器群集中。 然后,数据跨所有分片重新进行切分。

有关 Azure 托管 Redis 如何处理分片的详细信息,请参阅分片配置

在缩放过程中是否会丢失缓存中的数据?

  • 如果启用了高可用性模式,则应在缩放操作期间保留所有数据。
  • 当纵向缩减到更小的内存级别时,如果数据大小在纵向缩减缓存时超出了新的较小大小,数据可能会丢失。 如果缩小时数据丢失,则使用 allkeys lru 逐出策略逐出密钥。
  • 如果启用了高可用性模式,则所有数据都将丢失,且缩放操作期间缓存不可用。

在缩放过程中,缓存是否可用?

  • 启用高可用性模式的 Azure 托管 Redis 实例在缩放操作期间仍可用。 但缩放这些缓存时可能会发生连接中断的情况。 这些连接中断通常很短暂,Redis 客户端通常可以立即重新建立连接。
  • 如果禁用高可用性模式,Azure 托管 Redis 实例在缩放操作期间将处于脱机状态。

异地复制是否存在缩放限制?

配置活动异地复制后,无法在异地复制组中混合和匹配缓存大小。 因此,缩放异地复制组中的缓存需要执行几个步骤。 有关说明,请参阅缩放异地复制组中的实例

缩放需要多长时间?

缩放时间取决于几个因素。 下面是一些可能会影响缩放时间的因素。

  • 数据量:量较大的数据需要较长的时间进行复制
  • 高写入请求:写入次数越多,意味着跨节点或分片的数据复制越多
  • CPU 使用率高:较高的 CPU 使用率意味着 Redis 服务器繁忙,可用于完成数据重新分发的 CPU 周期有限

通常,在没有数据的情况下缩放缓存时,大约需要 10 分钟。

如何判断缩放何时完成?

在 Azure 门户中可以看到进行中的缩放操作。 缩放完成后,缓存状态将更改为正在运行

Azure 托管 Redis 是否使用聚类分析?

与 Azure Cache for Redis 不同,Azure 托管 Redis 将跨所有层和 SKU 使用聚类分析。 聚类分析可实现显著的性能优化。 Azure 托管 Redis 的每个 SKU 都配置为可用 vCPU 数的优化分片数。 用户不可配置分片数。

每个 Azure 托管 Redis SKU 使用的分片数是多少?

由于 Azure 托管 Redis 在 Redis Enterprise 软件上运行,因此可以使用比社区版 Redis 更密集的分片配置。 要了解每个 SKU 中使用的特定分片数,请参阅分片配置

密钥在群集中是如何分布的?

按照关于密钥分布模型的 Redis 文档:密钥空间会拆分为 16,384 个槽。 每个密钥都经过哈希处理并分配到其中一个槽,这些槽分布在群集的节点中。 对密钥的哪部分进行哈希处理是可以配置的,这样可确保多个使用哈希标记的密钥位于同一分片。

  • 使用哈希标记的密钥 - 如果将密钥的任意部分括在 {} 中,则只会对密钥的该部分进行哈希处理,以便确定密钥的哈希槽。 例如,以下 3 个密钥将位于同一分片中:{key}1{key}2{key}3,因为只对名称的 key 部分进行了哈希处理。 如需密钥哈希标记规范的完整列表,请参阅 密钥哈希标记
  • 不带哈希标记的密钥 - 将使用整个密钥名称进行哈希处理,从而让缓存在分片之间均匀分布(从统计角度)。

为了优化性能和吞吐量,建议将密钥平均分布。 如果使用带哈希标记的密钥,则应用程序会负责确保密钥平均分布。

有关详细信息,请参阅 Keys distribution mode(密钥分布模型)、Redis Cluster data sharding(Redis 群集数据分片)和 Keys hash tags(密钥哈希标记)。

可以创建的最大缓存大小是多大?

你可以拥有的最大缓存大小是 4.5 TB,称为闪存优化 A4500 实例。 Azure Cache for Redis 的定价

OSS 和 Enterprise 群集价格之间有何差异?

OSS 群集策略与社区版 Redis 中使用的聚类分析方法相同。 通常,OSS 群集策略的性能更高。 Enterprise 群集策略实现了聚类分析,使其对客户端看起来像是一个非聚集 Redis 实例。 这种方法可能性能较低,但可以防止客户端兼容性问题。 目前无法在正在运行的实例上切换群集实例。 有关详细信息,请参阅群集策略

后续步骤