日志

Azure Redis 缓存 Azure Redis功能性讨论

 来源    2021-01-13    1  

关于使用Azure Redis服务在以下九大方面的功能性的解说:

  1. 高可用
  2. 备份可靠性
  3. 配置自动化
  4. 部署多样性
  5. 快速回档功能
  6. 数据扩容
  7. SLA稳定性
  8. 数据安全性
  9. 监控系统

一:高可用

Azure Cache for Redis 具有内置的高可用性。 其高可用性体系结构的目标是确保托管的 Redis 实例正常运行,即使其基础虚拟机 (VM) 受计划内或计划外中断的影响。 它提供的可用性百分比率要远高于将 Redis 承载在单个 VM 上的情况。使用多个称为“节点”的用于缓存的 VM 来实现高可用性。 它将这些节点配置为以协调的方式进行数据复制和故障转移。 它还会协调维护操作,例如 Redis 升级维护等。

默认情况下,在“标准”或“高级”层级中,Azure Cache for Redis 在一对 Redis 服务器上运行。 这两个服务器托管在专用 VM 上。 开源 Redis 只允许一台服务器处理数据写入请求。 此服务器是主要节点,而另一服务器是副本。 预配服务器节点后,Azure Cache for Redis 可向其分配主要角色和副本角色。 主要节点通常负责为来自 Redis 客户端的写入和读取请求提供服务。 

更多详细说明,请见:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-high-availability

 通常,Redis 客户端会与 Redis 缓存中的主节点通信,以获取所有读取和写入请求。 某些 Redis 客户端可以配置为从副本节点进行读取。

二:备份可靠性

Redis 暂留可让你保留存储在 Redis 中的数据。 还可以获取快照并备份数据,以便在出现硬件故障时进行加载。保存数据时,Azure 存储会自动加密数据。 支持自动备份和手动备份,备份存放在共享存储上,不占用本地磁盘空间;可以参考 https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence

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

  • RDB 暂留 - 配置 RDB(Redis 数据库)暂留以后,Azure Redis 缓存按照可配置的备份频率,将 Azure Redis 缓存的快照以 Redis 二进制格式暂留在磁盘上。 如果发生了灾难性事件,导致主缓存和副缓存都无法使用,则会使用最新快照重新构造缓存。 详细了解 RDB 暂留的优点缺点
  • AOF 暂留 - 配置 AOF(仅追加文件)暂留后,Azure Redis 缓存将每个写入操作保存到日志,此日志每秒至少保存到 Microsoft Azure 存储帐户一次。 如果发生了灾难性事件,导致主缓存和副缓存都无法使用,则会使用存储的写入操作重新构造缓存。 详细了解 AOF 暂留的优点缺点

三:配置自动化

可使用PowerShell脚本一键式创建数据库实例:

#创建名为 myCache 的 Azure Redis 
New-AzRedisCache -ResourceGroupName myGroup -Name mycache -Location "China North"

Set-AzRedisCache命令可用于更新属性,例如 SizeSkuEnableNonSslPort 和 RedisConfiguration 值。

#更新名为 myCache 的 Azure Redis 缓存的 maxmemory-policy
Set-AzRedisCache -ResourceGroupName "myGroup" -Name "myCache" -RedisConfiguration @{"maxmemory-policy" = "allkeys-random"}

可自定义数据库多种配置参数,但需要自己编写相应代码和脚本,参考文档:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-manage-redis-cache-powershell

四:部署多样性

Azure Redis提供不同的级别:

  • 基本:基本缓存是单个缓存节点,适用于开发/测试和非关键型工作负荷。
  • 标准:基于主/从复制的生产级别缓存服务。
  • 高级:适合企业的级别,可用作缓存和暂留数据。专为最大规模和企业集成而设计。

标准版支持主从,高级版支持主从/集群方式部署。参考文档:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-clustering

什么是 Redis 群集?

Azure Redis 缓存提供的 Redis 群集与 在 Redis 中实施的一样。 Redis 群集具有以下优势:

    • 能够在多个节点中自动拆分数据集。
    • 能够在部分节点遇到故障或无法与群集其余部分通信的情况下继续运行。
    • 更大的吞吐量:增加分片数时,吞吐量呈线性增加。
    • 更大的内存大小:增加分片数时,内存大小呈线性增加。

五:快速回档功能

启用Redis数据暂留后,支持自动备份和数据恢复。Redis可以自动获取快照并备份数据,以便在出现硬件故障时进行加载。 

导入/导出是一种 Azure Redis 缓存数据管理操作,可用于通过从高级缓存导入 Azure Redis 缓存数据库 (RDB) 快照以及将 Azure Redis 缓存数据库 (RDB) 快照导出到 Azure 存储帐户中的 blob 来相应地将数据导入到 Azure Redis 缓存以及从 Azure Redis 缓存导出数据。

  • 导出 - 可以将 Azure Redis 缓存 RDB 快照导出到页 Blob。
  • 导入 - 可以从页 Blob 或块 Blob 导入 Azure Redis 缓存 RDB 快照。

通过导入/导出可在不同的 Azure Redis 缓存实例之间进行迁移,或者在使用之前使用数据填充缓存。参考文档:

如何为高级 Azure Redis 缓存配置数据暂留https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-persistence
在 Azure Redis 缓存中导入和导出数据https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-import-export-data

六:数据扩容

Azure Redis 缓存具有不同的缓存产品/服务,使缓存大小和功能的选择更加灵活。 如果创建缓存后,应用程序的要求发生更改,可以更改缓存的大小和定价层。支持按需扩容,包括但不限于数据容量、可读实例和副本数量;支持无缝扩容,可不中断服务,对上层业务透明。

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

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

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

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

详细操作请见:如何缩放 Azure Redis 缓存

七:SLA稳定性

支持主从和集群架构,自动进行容灾切换和故障迁移;可用性保障不低于99.9% --基础版没有SLA保证,其他版本都不低于99.9%

AZURE CACHE FOR REDIS 的高可用性
选项说明可用性标准高级Enterprise
标准复制 单个数据中心或可用性区域 (AZ) 中具有自动故障转移功能的双节点复制配置 99.9%

-

Enterprise 群集 链接了两个区域中的缓存实例,提供自动故障转移 99.9% - -

异地复制 两个区域中的链接缓存实例,具有用户控制的故障转移 99.9%(对于单个区域) -

-

Azure Cache for Redis 的高可用性: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-high-availability

八:数据安全性

Azure底层有相关的安全防护确保数据的存储安全,而在传输方面,默认使用SSL访问(6380)使用TLS1.2加密套件保证在数据传输中的安全。同时也可以隔离Redis,通过专用链接或VNET来实现网络隔离:Azure 专用链接和虚拟网络 (VNET) 部署为 Azure Cache for Redis 提供增强的安全性和流量隔离。 使用 VNET,可以进一步通过网络访问控制策略来限制访问。

Azure 专用链接的 Azure Cache for Redishttps://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-private-link

为高级 Azure Cache for Redis 配置虚拟网络支持https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-premium-vnet

九:监控系统

支持对Redis实例信息的可视化监控(监控内容包括但不限于CPU利用率、连接数、Memory等),可以根据指标配置相应的警报:

 

 如何监视用于 Redis 的 Azure 缓存: https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-how-to-monitor

用于 Redis 的 Azure 缓存使用 Azure Monitor 提供用于监视缓存实例的几个选项。 可以查看度量值、将度量值图表固定到启动板、自定义监视图表的日期和时间范围、在图表中添加和删除度量值,以及设置符合特定条件时发出的警报。 借助这些工具,可以监视 Azure Redis 缓存实例的运行状况,以及管理缓存应用程序。

每分钟使用 Redis INFO 命令收集约两次用于 Redis 的 Azure 缓存实例的指标,然后将其自动存储 30 天(请参阅导出缓存指标以配置不同保留期策略),以便这些指标可以显示在指标图表中并由预警规则进行评估。 有关用于每个缓存度量值的不同 INFO 值的详细信息,请参阅 可用度量值和报告间隔

Azure Redis缓存StackExchange.Redis.RedisConnectionException:没有可用于此操作的连接:EVAL
问答Asp.net mvc 5应用程序web配置文件是 sessionState mode="Custom" customProvider="RedisSessionProv ...
1
Redis缓存以及Redis集群的简单使用
日志Redis简介 Redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止Redis支持的键值数据类型如 下: 字符串 ...
1
Azure Redis缓存与用于输出缓存的角色内缓存之间的性能差异
问答我们正在将asp.net站点移动到Azure Web角色和Azure Sql数据库.该站点正在使用输出缓存和普通的Cache [xxx](即HttpRuntime.Cache).现在,它们以经典方式存 ...
3
c# – 已达到Azure Redis缓存最大连接数
问答我使用Azure Redis缓存来存储一些快速查找数据,这个缓存由​​10个客户端应用程序读取/连接.所有应用程序都是用.NET 4.6编写的,这包括ASP.NET MVC Web应用程序,Web A ...
3
Azure Redis缓存服务丢失了所有数据
问答我在azure中有一个Redis缓存服务.一段时间后(2或3周后),我用手将数据用于测试,我的所有数据都丢失了,所以我一次又一次地将数据放入3-4次.我的redis数据 TTL数为-1 你有什么主意吗 ...
2
Azure Redis缓存是否会在到期时刷新项目
问答我有一个场景,我计划设置Azure Redis缓存条目到期时间,以确保我们不会在特定时间点之后保留已知无值的数据,例如 cache.StringSet(this.cacheId, this.Seria ...
1
azure – Redis缓存 – 何时可以触发大型驱逐?
问答我们在Azure Standard 2.5gb上有一个Redis缓存.我们观察到以下行为: 我们时不时地观察到内存使用率大幅下降.似乎有很多资源被驱逐. 注意事项: >驱逐政策是LRU > ...
1
Azure Redis缓存会话状态提供程序中的会话超时未滑动
问答通过多个实例扩展Web应用程序是azure cloud的最大优势之一.为了实现对我们的Web角色云应用程序的多个VM支持,我们正在实施Azure Redis缓存.我们使用RedisSessionSta ...
1
azure – 从StackExchange.Redis缓存中删除/删除所有/一个项目
问答我正在使用StackExchange.Redis客户端与Azure Redis缓存服务.这是我的课, public class RedisCacheService : ICacheService { ...
1
如何禁用Azure Redis缓存?
问答我一直在尝试Azure Redis缓存预览,到目前为止,这么好.但是,当我不使用它时,我想禁用它,以便它不消耗内存而且无法访问. 我宁愿不删除它,因为我不希望每次想要运行一些测试时都创建一个新实例.但 ...
1
缓存 – Azure Redis缓存 – 多个错误TimeoutException:超时执行GET {key}
问答我们将应用程序部署到Azure.它正在使用Azure Redis缓存,我们正在经历相当多的超时.即: [TimeoutException: Timeout performing GET textobj ...
1
c# – 没有可用于此操作的连接:使用Azure Redis缓存时
问答我有以下代码用于从缓存中获取信息.我不知道我的应用程序是否打开了太多连接,或者只是这个错误是由于azure redis缓存上的瞬态故障造成的. 这是堆栈跟踪 [RedisConnectionExcep ...
3
连接到Azure Redis缓存
问答我正在尝试使用以下代码连接到预览Azure Redis缓存. var options = new ConfigurationOptions(); options.EndPoints.Add(" ...
1
使用ARM配置Azure Redis缓存并指定访问密钥
问答我尝试使用ARM模板配置Azure Redis缓存.这是按预期工作的,但我无法指定访问密钥. 通常我使用生成的密钥,这可能是推荐的方式 – 但在这种情况下,我不想在我的部署中提供密钥(出于某些遗留原因 ...
1
缓存 – Azure Redis缓存 – GET调用超时
问答我们在Azure中通过StackExchange.Redis库连接到我们的Azure Redis缓存中有几个Web和辅助角色,我们正在接收定期超时,这使我们的端到端解决方案停止运行.其中一个例子如下: ...
1
Azure Redis缓存作为数据存储区?
问答我正在开发一个PaaS.该应用程序将托管在Azure网站中.目前我在内存缓存中使用EF / SQL作为数据存储区.如果应用程序增长,我计划使用Azure Reddis缓存,我需要跨多个实例共享此缓存. ...
1
更新项目时Azure Redis缓存中是否存在任何锁定机制?
问答我正在使用Azure搜索开发Azure Redis缓存,但我找不到有关Redis缓存并发性的任何明确说明. 情况就是这样.在覆盖现有缓存项目时,是否可以在同一时间读取项目?如果是,Redis Cach ...
1
azure-redis-cache – 我有哪些迁移到更大的Azure Redis缓存实例的选项
问答我正在研究这个需要高吞吐量Redis缓存的项目.由于运行Redis缓存(这是一个爱好项目)有点贵,我开始使用1GB节点.但是,如果这样做如何更改为大型缓存实例而没有重大中断来创建新实例,更新连接字符串 ...
2
Azure Redis 缓存使用注意事项与排查问题文档整理
日志StackExchange.Redis 使用名为 synctimeout 的配置设置进行同步操作,该设置的默认值为 1000 毫秒. 如果同步调用未在规定时间内完成,StackExchange.Red ...
1
Azure Redis 缓存的 ASP.NET 会话状态提供程序
日志Azure Redis Cache 提供了一个会话状态提供程序,你可以使用其在缓存中(而不是内存中或在 SQL Server 数据库中)存储会话状态.要使用缓存会话状态提供程序,先首先配置缓存,然后使 ...
1