你当前正在访问 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 概览
性能(吞吐量和延迟)
有关性能基准以及如何衡量每个 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 门户进行缩放
要缩放缓存,请在 Azure 门户中浏览到缓存,并从“资源”菜单中选择“缩放”。
要进行纵向扩展,请选择其他缓存类型,然后选择“保存”。
重要
如果选择无法缩放到的 SKU,则会禁用“保存”选项。 有关可使用的缩放选项的详细信息,请参阅缩放 Azure 托管 Redis 的先决条件/限制部分。
当缓存缩放到新层级时,会显示“缩放 Redis 缓存”通知。
缩放完成后,状态将从正在缩放更改为正在运行。
使用 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 是否使用聚类分析?每个 Azure 托管 Redis SKU 使用多少分片数?
- 密钥在群集中是如何分布的?
- 我可以创建的最大缓存大小是多大?
- OSS 和 Enterprise 群集价格之间有何差异?
是否可以在层内或跨层缩放?
始终可以在相同的内存大小下扩展到更高的性能层,或者在相同的性能层中扩展到更大的内存大小。 要缩放到较低的性能层或更小的内存大小,请参阅缩放 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 实例。 这种方法可能性能较低,但可以防止客户端兼容性问题。 目前无法在正在运行的实例上切换群集实例。 有关详细信息,请参阅群集策略。