【Azure Redis 缓存 Azure Cache For Redis】Redis支持的版本及不同版本迁移风险

问题描述

1. Azure Redis缓存支持的版本包括4.0以及6.0(预览)

这种情形下,可以使用PaaS服务提供的 Azure Redis 缓存(4.0版本)。Azure Redis对6.0的支持目前仍处于预览阶段,并且其使用的RESP协议也发生了变化。详情请见:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-overview

 Redis 为新式应用程序带来了关键的低延迟、高吞吐量数据存储解决方案。

该服务由 Microsoft 管理并在 Azure 中托管,可供 Azure 内外的任何应用程序访问。

它可单独部署,也可与其他 Azure 数据库服务(如 Azure SQL 或 Cosmos DB)一起部署。

2. 关于不同Redis版本间的迁移风险,从低版本(3.2)向高版本(4.0)迁移基本上不存风险。

具体说来,迁移的风险通常存在以下两个环节: 

1) 现存客户端是否可以成功连接高版本的Redis?

Redis 3.2以及4.0均使用的是相同的RESP协议。因此,不存在兼容性问题,理论上只需要更新连接字符串指向新创建的Azure Redis资源即可。https://redis.io/topics/protocol

2) 是否会发生数据格式兼容性导致的内存数据丢失?

文档提供了关于从本地环境迁移至Azure Redis的多种选项,无需担心数据丢失(例如所有缓存中的数据都从DB中读入),则可以选择创建新的Redis。

https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-migration-guide

创建新的 Azure Cache for Redis

例如,如果将 Redis 用作数据库记录的后备缓存,则可以轻松地从头开始重新生成缓存。

实现此选项的一般步骤如下:

  1. 创建新的 Azure Cache for Redis 实例。

  2. 更新应用程序以使用新实例。

  3. 删除旧的 Redis 实例。

如果需要确保内存数据不丢失,高版本Redis向下兼容低版本的RDB文件格式。所以可选择文档中提供的其他两种不依赖于RDB格式的方式进行迁移。

https://github.com/sripathikrishnan/redis-rdb-tools/blob/master/docs/RDB_Version_History.textile

将数据导出到 RDB 文件并将该文件导入 Azure Cache for Redis

可以使用 RDB 文件将数据从现有缓存传输到 Azure Cache for Redis。

3. 关于不同Redis之间连接数和性能的介绍

maxclients 对于每个 Azure Redis 缓存定价层都是不同的

  • 基本缓存和标准缓存
    • C0 (250 MB) 缓存 - 最多支持 256 个连接
    • C1 (1 GB) 缓存 - 最多支持 1,000 个连接
    • C2 (2.5 GB) 缓存 - 最多支持 2,000 个连接
    • C3 (6 GB) 缓存 - 最多支持 5,000 个连接
    • C4 (13 GB) 缓存 - 最多支持 10,000 个连接
    • C5 (26 GB) 缓存 - 最多支持 15,000 个连接
    • C6 (53 GB) 缓存 - 最多支持 20,000 个连接
  • 高级缓存
    • P1 (6 GB - 60 GB) - 最多支持 7,500 个连接
    • P2 (13 GB - 130 GB) - 最多支持 15,000 个连接
    • P3 (26 GB - 260 GB) - 最多支持 30,000 个连接
    • P4 (53 GB - 530 GB) - 最多支持 40,000 个连接

如果连接开销的负载  客户端操作的负载超出了系统容量,那么即使未超出当前缓存大小的连接限制,缓存也可能会遇到容量问题。

Azure Redis 缓存性能(参考官方说明:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-planning-faq#azure-cache-for-redis-performance

4. Redis 高可用性

Azure Redis针对标准版以上的redis 都是提供主从的功能,这是azure redis内置的功能:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-high-availability

它提供的可用性百分比率要远高于将 Redis 承载在单个 VM 上的情况。

“标准”和“高级”层级中提供了各种高可用性选项

另外针对高级版Redis,也提供了持久化的功能,能够在出现异常状况(主从同时不工作)的情况下,保证数据不丢失,Azure Redis会在恢复时自动加载持久化数据。持久化参考文档: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence

什么是数据暂留?

这相对于基本级别或标准级别是一项巨大优势,因为基本级别或标准级别将所有数据存储在内存中,在出现故障的情况下,如果缓存节点停机,则可能导致数据丢失。

Azure Redis 缓存使用以下模型提供 Redis 暂留:

  • 缺点。
  • 缺点。

可在缓存创建过程中通过“新建 Azure Redis 缓存”边栏选项卡进行配置,也可以在现有高级缓存的“资源”菜单上配置。

5. Azure Redis突然连不上了,恢复了之后,数据清空了

在无法连接Redis期间,如果Redis有版本更新和重启,则有可能发生数据丢失的情况,这个与在Azure中使用的Redis的版本非常相关。如基础版(Basic),因为它是单个缓存节点,所以在重启后会出现数据清空的情况。因此建议基本版Redis一般是用在开发/测试环境中。而标准版及以上定价层的Redis底层是基于主/从复制的生产级别缓存服务,在出现版本更新或重启的时候不会出现主从节点同时发生。所以能尽可能避免数据丢失。

Redis 实例故障

如果该 VM 关闭,则缓存中存储的所有数据都会丢失。

此时,数据将会丢失,但这种情况非常罕见。

异地复制来改善数据保护,防范此类基础结构故障。

故障转移的说明

故障转移可以是计划性的,也可以是非计划的。

计划性故障转移通常可在 1 秒内完成。

检测时出现的这种延迟意味着非计划性故障转移通常要在 10 到 15 秒内完成。

参考资料

用于 Redis 的 Azure 缓存: https://docs.azure.cn/zh-cn/azure-cache-for-redis/

如何配置 Azure Redis 缓存: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-configure#databases

Azure Cache for Redis 规划常见问题解答: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-planning-faq#azure-cache-for-redis-performance

如何为高级 Azure Redis 缓存配置数据暂留: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence

Redis 实例故障: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-data-loss#redis-instance-failure

什么是故障转移? https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-failover#what-is-a-failover