Azure 托管 Redis 具有不同的 SKU 和层产品/服务,可灵活地选择缓存大小和性能。 可以将(预览版)缩放到更大的内存大小,或者更改为具有更多计算性能的层。 还可以缩减到更小或更合适的层级。 本文演示了如何使用 Azure 门户以及 Azure PowerShell 和 Azure CLI 等工具来缩放缓存。
注释
由于 Azure 托管 Redis 的每个层几乎具有相同的功能,因此缩放通常用于更改内存和性能特征。 缩放目前为公共预览版。
缩放类型
Azure 托管 Redis 服务支持在两个维度上进行扩展:
内存:增加内存会增大 Redis 实例的大小,使你可以存储更多数据。 减少内存时,需要确保当前内存使用量小于要使用的新内存大小。
vCPU:Azure 托管 Redis 提供三个层级(内存优化、均衡和计算优化),每个内存级别的 vCPU 数越来越多。 缩放到具有更多个 vCPU 的层级可以提高实例的性能,而无需增加内存。 与仅使用单个 vCPU 的 Azure Cache for Redis 的基本、标准和高级层不同,Azure 托管 Redis 使用 Redis 企业堆栈。 Redis Enterprise 堆栈能够使用多个 vCPU,这意味着 Redis 实例使用的 vCPU 数与吞吐量和延迟性能直接相关。
性能层
Azure 托管 Redis 有四个可用层级,每个层级都具有不同的性能特征和价格级别。
有三个层级适用于内存中数据:
- 内存优化 - 非常适合需要高内存与 vCPU 比率(8:1)但不需要最高吞吐量性能的内存密集型用例。 对于处理能力或吞吐量要求较低的场景,该层提供了更低的价格点,是开发和测试环境的理想选择。
- 均衡(内存 + 计算) - 提供均衡的内存到 vCPU(4:1)比率,使其非常适合标准工作负荷。 它提供了内存与计算资源的健康平衡。
- 计算优化 - 专为需要最大吞吐量的性能密集型工作负荷而设计,内存到 vCPU(2:1)比率较低。 该层非常适合需要最高性能的应用程序。
有一个层将数据同时存储在内存和磁盘中:
- Flash Optimized (预览版) - 使 Redis 群集能够自动将不太频繁访问的数据从内存(RAM)移动到 NVMe 存储。 这会降低性能,但可以在大数据集的缓存中进行具有成本效益的扩展。
重要
使用超过 120 GB 存储的所有内存中层都处于公共预览状态,包括内存优化 M150 及更高版本;平衡 B150 及更高版本;和计算优化 X150 及更高版本。 所有这些层及更高版本均以公共预览版提供。
所有闪存优化层均以公共预览版提供。
层级和 SKU 概览
性能(吞吐量和延迟)
有关性能基准以及如何衡量每个 SKU 和层级的性能的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试
何时调整规模
可使用 Azure 托管 Redis 的监视功能来监视缓存的运行状况和性能。 使用该信息确定何时缩放缓存。
您可以监视以下指标来确定是否需要进行扩展。
- 中央处理器
- 高 CPU 使用率意味着 Redis 服务器无法应对来自所有客户端的请求。 扩展到更多 vCPU 有助于跨多个 Redis 进程分配请求。 缩放还有助于分发 TLS 加密/解密和连接/断开连接,从而使用 TLS 加快缓存实例的速度。
- 内存使用率
- 高内存用量指示数据大小对于当前的缓存大小来说太大。 请考虑将缓存大小扩展到更大的内存。 减少内存时,需要确保当前缓存的内存使用率低于要使用的新内存大小。 不能将大型数据集放入较小的缓存大小。
- 客户端连接
- 每个缓存大小都有其所能支持的客户端连接数的限制。 如果客户端连接即将达到缓存大小限制,请考虑扩展到内存大小更大的层级或性能更高的层级。
- 有关按缓存大小列出的连接限制的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试。
- 网络带宽
- 如果 Redis 服务器超出可用带宽,则客户端请求可能会超时,因为服务器无法以足够快的速度将数据推送到客户端。 要了解使用的服务器端带宽量,请检查“缓存读取”和“缓存写入”指标。 如果 Redis 服务器超出了可用的网络带宽,请考虑扩展到性能更高的层级或缓存大小更大的层级。
- 群集策略的选择会影响可用的网络带宽。 通常,OSS 群集策略的网络带宽高于 Enterprise 群集策略的带宽。 有关详细信息,请参阅群集策略
- 有关按缓存大小列出的可用带宽的详细信息,请参阅使用 Azure 托管 Redis 进行性能测试。
有关确定应使用哪个缓存定价层的详细信息,请参阅选择正确的层级。
有关如何优化缩放过程的详细信息,请参阅缩放最佳做法指南
扩展 Azure 托管 Redis 的限制
- 不能从内存优化层、均衡层或计算优化层缩放到闪存优化层,反之亦然。
- 减少 Redis 实例的内存时,Redis 实例的当前内存使用量应小于预期的新内存大小。 有关详细信息,请参阅如果我缩放到更小的内存大小,我的数据会发生什么情况?
- 减少 Redis 实例的内存或 vCPU 时,只能扩展到具有与当前实例上的配置兼容的 vCPU 和分片配置的 SKU。
- 在某些情况下,缩放时,Redis 实例的基础 IP 地址可能会更改。 实例的 DNS 记录会更改,且对大多数应用程序透明。 但是,如果使用 IP 地址来配置与 Redis 实例的连接,或者配置 NSG 或允许流量发到 Redis 实例的防火墙,则应用程序在 DNS 记录更新后有时连接时可能会遇到问题。
- 如果缩放异地复制组中的实例,则另外还有一些限制。 有关详细信息,请参阅异地复制是否存在缩放限制。
- 缩减规模时,只能缩减到某些级别。 有关详细信息,请参阅为什么只能缩减到较小的 SKU 子集?
如何缩放(预览版)
本部分介绍如何缩放 Azure 托管 Redis 缓存。
使用 Azure 门户进行缩放
若要缩放 vCPU,请选择其他 缓存类型 ,然后选择“ 保存”。
重要
如果选择无法缩放到的 SKU,则会禁用 “保存 ”选项。 有关允许哪些缩放选项的详细信息,请查看“Azure 托管 Redis 的限制”部分。
当缓存缩放到新层级时,会显示“缩放 Redis 缓存”通知。
缩放完成后,查看“资源”菜单的“概述”部分时,状态将从“缩放”更改为“正在运行”。
使用 PowerShell 进行缩放
可以使用 Update-AzRedisEnterpriseCache cmdlet 通过 PowerShell 缩放 Azure 托管 Redis 实例。 可以修改 Sku
属性以选择所需的层级和 SKU。 以下示例演示了如何将名为 myCache
的缓存缩放为计算优化型 X20 (24 GB) 的实例。
Update-AzRedisEnterpriseCache -ResourceGroupName <your-group> -Name <your-cache-name> -Sku <sku-name>
使用 Azure CLI 进行缩放
要使用 Azure CLI 缩放 Azure 托管 Redis 实例,请调用 az redisenterprise update 命令。 可以修改 sku
属性以选择所需的层级和 SKU。 以下示例演示了如何将名为 myCache
的缓存缩放为计算优化型 X20 (24 GB) 的实例。
az redisenterprise update --cluster-name <your-cache-name> --resource-group <your-resource-group> --sku <name-of-sku>
关于缩放的常见问题解答
以下列表包含有关 Azure 托管 Redis 缩放的常见问题的解答。
- 是否可以在层内或跨层缩放?
- 如果我缩放到更小的内存大小,数据会发生什么情况?
- 缩放后,我是否需要更改缓存名称或访问密钥?
- 缩放的工作原理?
- 在缩放过程中是否会丢失缓存中的数据?
- 在缩放过程中,缓存是否可用?
- 异地复制是否存在缩放限制?
- 缩放需要多长时间?
- 如何判断缩放何时完成?
- Azure 托管 Redis 是否使用集群?每个 Azure 托管 Redis SKU 使用多少个分片?
- 密钥在群集中是如何分布的?
- 我可以创建的最大缓存大小是多大?
- 为什么只有我才能缩小到较小 SKU 的子集?
我可以在层级内或跨层级进行缩放吗?
始终可以在相同的内存大小下扩展到更高的性能层,或者在相同的性能层中扩展到更大的内存大小。 若要扩展到较低的性能层或较小的内存大小,建议运行“listskusforscaling”REST API 以获取可缩放到的 SKU 列表。
az redisenterprise list-skus-for-scaling --cluster-name <your-redis-instance> --resource-group <your-resource-group>
如果我缩放到更小的内存大小,数据会发生什么情况?
只有当当前内存使用量小于目标的较小内存时,才可以将内存缩小到较小的规模。 如果当前内存使用量高于预期较小的大小,则缩放请求将失败。 可以通过删除不需要的键值对或运行刷新操作来减少当前内存使用量。
az redisenterprise database flush --cluster-name <your-redis-instance> --resource-group <your-resource-group>
缩放后,我是否需要更改缓存名称或访问密钥?
否,缩放作期间不会更改缓存名称和访问密钥。
缩放是如何工作的?
- 缩放 Redis 实例时,Redis 群集中节点之一将关闭并重新预配为新大小。 然后数据进行传输,另一个节点随后进行类似的故障转移,然后重新预配。 这类似于修补期间发生的进程或其中一个缓存节点的故障。
- 缩放到具有更多 vCPU 的实例时,会预配新的分片并将其添加到 Redis 服务器群集。 然后,数据跨所有分片重新进行切分。
有关 Azure 托管 Redis 如何处理分片的详细信息,请参阅分片配置。
在缩放过程中是否会丢失缓存中的数据?
- 如果启用了高可用性模式,则应在缩放操作期间保留所有数据。
- 如果要缩放到较小的内存级别,则需要确保当前内存使用量小于预期的新内存大小。 如果当前内存使用量超过预期的 SKU 内存大小,则可以使用 Flush作刷新数据,或手动选择要删除的键值。
- 如果启用了高可用性模式,则所有数据都将丢失,且缩放操作期间缓存不可用。
在系统缩放时,我的缓存是否可用?
- 启用高可用性模式的 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 model(密钥分布模型)、Redis Cluster data sharding(Redis 群集数据分片)和Keys hash tags(密钥哈希标记)。
可以创建的最大缓存大小是多大?
你可以拥有的最大缓存大小是 4.5 TB,称为闪存优化 A4500 实例。 Azure Cache for Redis 定价.
为什么只能纵向缩减到较小 SKU 的子集?
为了保持与分片数和 vCPU 的兼容性,只能纵向缩减到某些 SKU。 若要了解 Redis 实例可以缩减到哪些 SKU,可以查看 Azure 门户中资源菜单的“缩放”部分填充的 SKU 列表。 还可以运行以下 CLI 命令
az redisenterprise list-skus-for-scaling --cluster-name <your-redis-instance> --resource-group <your-resource-group>