如何缩放 Azure Redis 缓存

Azure Redis 缓存具有不同的缓存产品/服务,使缓存大小和功能的选择更加灵活。 创建缓存后,如果应用程序的要求发生更改,可以缩放缓存的大小和定价层。 本文演示如何使用 Azure 门户以及 Azure PowerShell 和 Azure CLI 等工具来缩放缓存。

何时缩放

可以使用 Azure Redis 缓存的监视功能来监视缓存的运行状况和性能,并确定何时缩放缓存。

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

  • Redis 服务器负载
  • 内存用量
  • 网络带宽
  • CPU 使用率

如果确定缓存不再满足应用程序的要求,可以缩放到适合应用程序的更大或更小缓存定价层。 有关确定应使用哪个缓存定价层的详细信息,请参阅我应当使用哪些 Redis 缓存产品/服务和大小

缩放缓存

若要缩放缓存,请在 Azure 门户浏览到缓存,然后从“资源”菜单单击“缩放”。

缩放

从“选择定价层”边栏选项卡选择所需的定价层,并单击“选择”。

定价层

可以扩展到不同定价层,但有以下限制:

  • 不能从较高的定价层缩放到较低的定价层。
    • 不能从高级缓存向下缩放到标准基本缓存。
    • 不能从标准缓存向下缩放到基本缓存。
  • 可从基本缓存缩放到标准缓存,但不能同时更改大小。 如果需要不同大小,则可以执行后续缩放操作以缩放为所需大小。
  • 不能从基本缓存直接缩放到高级缓存。 首先在一个缩放操作中从基本缩放到标准,然后在后续的缩放操作中从标准缩放到高级
  • 不能从较大的大小减小为 C0 (250 MB)

当缓存缩放到新的定价层,会在“Redis 缓存”边栏选项卡中显示缩放状态。

扩展

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

如何自动执行缩放操作

除了在 Azure 门户中缩放缓存实例以外,还可以使用 PowerShell cmdlet、Azure CLI 和 Azure 管理库 (MAML) 进行缩放。

使用 PowerShell 进行缩放

修改 SizeSkuShardCount 属性后,可以在 PowerShell 中使用 Set-AzureRmRedisCache cmdlet 缩放 Azure Redis 缓存实例。 以下示例演示了如何将名为 myCache 的缓存缩放为 2.5 GB 缓存。

Set-AzureRmRedisCache -ResourceGroupName myGroup -Name myCache -Size 2.5GB

有关使用 PowerShell 进行缩放的详细信息,请参阅使用 PowerShell 缩放 Redis 缓存

使用 Azure CLI 进行缩放

若要使用 Azure CLI 缩放 Azure Redis 缓存实例,请调用 azure rediscache set 命令并传入所需的配置更改,包括新大小、sku 或群集大小,具体取决于所需的缩放操作。

有关使用 Azure CLI 进行缩放的详细信息,请参阅更改现有 Redis 缓存的设置

使用 MAML 进行缩放

若要使用 Azure 管理库 (MAML) 缩放 Azure Redis 缓存实例,请调用 IRedisOperations.CreateOrUpdate 方法并传入 RedisProperties.SKU.Capacity 的新大小。

static void Main(string[] args)
{
    // For instructions on getting the access token, see
    // https://docs.azure.cn/redis-cache/cache-configure/#access-keys
    string token = GetAuthorizationHeader();

    TokenCloudCredentials creds = new TokenCloudCredentials(subscriptionId,token);

    RedisManagementClient client = new RedisManagementClient(creds);
    var redisProperties = new RedisProperties();

    // To scale, set a new size for the redisSKUCapacity parameter.
    redisProperties.Sku = new Sku(redisSKUName,redisSKUFamily,redisSKUCapacity);
    redisProperties.RedisVersion = redisVersion;
    var redisParams = new RedisCreateOrUpdateParameters(redisProperties, redisCacheRegion);
    client.Redis.CreateOrUpdate(resourceGroupName,cacheName, redisParams);
}

有关详细信息,请参阅 使用 MAML 管理 Redis 缓存 示例。

关于缩放的常见问题

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

可以向上缩放到高级缓存,或在其中向下缩放吗?

  • 不能从高级缓存向下缩放到基本标准定价层。
  • 可以从一个高级缓存定价层缩放到另一个高级缓存定价层。
  • 不能从基本缓存直接缩放到高级缓存。 首先在一个缩放操作中从基本缩放到标准,然后在后续的缩放操作中从标准缩放到高级
  • 如果在创建高级缓存时启用了群集,则可以更改群集大小。 如果创建缓存时未启用群集功能,可以稍后进行配置。

    有关详细信息,请参阅 如何为高级 Azure Redis 缓存配置群集功能

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

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

缩放的工作原理?

  • 基本缓存缩放为不同大小时,将关闭该缓存,同时使用新的大小预配一个新缓存。 在此期间,缓存不可用,且缓存中的所有数据都将丢失。
  • 基本缓存缩放为标准缓存时,将预配副本缓存并将主缓存中的数据复制到副本缓存。 在缩放过程中,缓存仍然可用。
  • 标准缓存缩放为不同大小或缩放到高级缓存时,将关闭其中一个副本,同时将其重新预配为新的大小,将数据转移,然后,在重新预配另一个副本之前,另一个副本将执行一次故障转移,类似于一个缓存节点发生故障时所发生的过程。

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

  • 基本缓存缩放为新的大小时,所有数据都将丢失,且在缩放操作期间缓存将不可用。
  • 基本缓存缩放为标准缓存时,通常将保留缓存中的数据。
  • 标准缓存扩展为更大大小或更大层,或者将高级缓存扩展为更大大小时,通常将保留所有数据。 将标准高级缓存缩小到更小大小时,数据可能会丢失,具体取决于与缩放后的新大小相关的缓存中的数据量。 如果缩小时数据丢失,则使用 allkeys lru 逐出策略逐出密钥。

在缩放过程中,自定义数据库设置是否会受影响?

如果在缓存创建过程中为 databases 设置配置了自定义值,请记住,某些定价层具有不同的数据库限制。 以下是在这种情况下缩放时的一些注意事项:

  • 缩放到的定价层的 databases 限制低于当前层:
    • 如果使用的是默认 databases数(对于所有定价层来说为 16),则不会丢失数据。
    • 如果使用的是在要缩放到的层的限制内的自定义 databases 数,则将保留此 databases 设置并且不会丢失数据。
    • 如果使用的是超出新层限制的自定义 databases 数,则 databases 设置将降低到新层的限制,并且已删除数据库中的所有数据都将丢失。
  • 所缩放到的定价层的 databases 限制等于或高于当前定价层时,将保留 databases 设置并且不会丢失数据。

虽然标准和高级缓存具有 99.9% 可用性 SLA,但没有数据丢失方面的 SLA。

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

  • 标准高级缓存在缩放操作期间保持可用。 但是,缩放标准和高级缓存时,以及从基本缓存缩放到标准缓存时,可能会发生连接故障。 这些连接故障预期为很小的故障,redis 客户端应能立即重新建立连接。
  • 基本缓存在缩放为不同大小的操作期间处于脱机状态。 基本缓存在从基本缩放到标准时仍然可用,但可能会出现较小的连接故障。 如果发生连接故障,redis 客户端应能立即重新建立连接。

异地复制的缩放限制

向两个缓存之间添加异地复制链接后,便无法在群集中启动缩放操作或更改分片数。 若要发布这些命令,必须取消链接缓存。 有关详细信息,请参阅配置异地复制

不支持的操作

  • 不能从较高的定价层缩放到较低的定价层。
    • 不能从高级缓存向下缩放到标准基本缓存。
    • 不能从标准缓存向下缩放到基本缓存。
  • 可从基本缓存缩放到标准缓存,但不能同时更改大小。 如果需要不同大小,则可以执行后续缩放操作以缩放为所需大小。
  • 不能从基本缓存直接缩放到高级缓存。 首先在一个缩放操作中从基本缩放到标准,然后在后续操作中从标准缩放到高级
  • 不能从较大的大小减小为 C0 (250 MB)

如果缩放操作失败,该服务将尝试还原操作并且缓存将还原为原始大小。

缩放需要多长时间?

缩放大约需要 20 分钟,具体取决于缓存中的数据量。

如何判断缩放何时完成?

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