【Azure Redis 缓存】Redis 连接失败

Redis ,Azure,连接 · 浏览次数 : 72

小编点评

## Azure Redis 连接失败原因分析与解决方案 **问题描述:** Azure Redis 出现连接失败,并过一会儿能自动恢复。 **主要原因:** * Azure Redis 服务是平台自动进行的计划内的维护升级行为,一般客户端都有重试机制,是不会影响应用。 * 当缓存关闭其连接时,请求在代码路径中所处的位置可能会导致连接失败。 * 由于节点会提前收到更新通知,因此它们可以协作交换角色,并在更改后快速更新负载均衡器。 **解决方案:** * 可配置更新窗口然更新发生在业务空闲期,避免对业务有影响。 * 可以配置更新窗口然更新发生在业务空闲期,避免对业务有影响。 * 可以配置更新窗口然更新发生在业务空闲期,并设置更新窗口的长度。 **具体配置步骤:** 1. 在 Redis 配置中设置 `update_window` 属性,并根据需要调整窗口长度。 2. 使用 `RetryPolicy` 和 `RetryOptions` 设置重试机制和重试参数。 3. 在更新窗口内设置 `update_window_duration` 属性,并设置更新窗口的时长。 **其他建议:** * 可以使用 `Client Library Specific Guidance` 获得针对不同客户端库的详细配置指南。 * 可以使用 `Monitoring` 监控 Redis 服务,以了解其状态和性能。 **参考资料:** * Azure Redis cache administration: schedule updates * Azure Redis cache administration: scheduled updates and failover * Azure Redis client library specific guidance: retry policy and retry options * Azure Redis monitoring: performance and health

正文

问题描述

Azure Redis 出现连接失败,过一会儿后,又能自动恢复。

 

问题解答

其实,因为Azure Redis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的计划内的维护升级行为,一般客户端都有重试机制,是不会影响应用。

故障转移发生的情况有:

  • 系统更新,例如 Redis 修补或 OS 升级。
  • 管理操作,例如缩放和重新启动。

由于节点会提前收到更新通知,因此它们可以协作交换角色,并在更改后快速更新负载均衡器。 计划性故障转移通常可在 1 秒内完成。对应用侧的影响主要是所有的连接都需要重新建立,在客户端SDK的重试机制触发前,会出现以下几类的异常:

  • 超时异常
  • 连接异常
  • 套接字异常

异常的数目和类型取决于当缓存关闭其连接时,请求在代码路径中所处的位置。 例如,在发生故障转移时发送了请求但未收到响应的操作可能会收到超时异常。 对关闭的连接对象发出的新请求将收到连接异常,直到重新连接成功为止。

大多数客户端库会尝试重新连接到缓存(如果采用此配置)。 但是,不可预测的 bug 偶尔会将库对象置于不可恢复状态。 如果出错的持续时间超过了预先配置的时间,则应重新创建连接对象。

 

但是为了更进一步的减少升级维护对Redis的正常业务的影响,可以配置更新窗口然更新发生在业务空闲期,详细参考:https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-administration#schedule-updates

 

 参考资料

计划更新 :https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-administration#schedule-updates

故障转移 :https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-failover

Redis重试 :https://docs.microsoft.com/zh-cn/azure/architecture/best-practices/retry-service-specific#azure-cache-for-redis   和 https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-best-practices#client-library-specific-guidance

与【Azure Redis 缓存】Redis 连接失败相似的内容:

【Azure Redis 缓存】Redis 连接失败

问题描述 Azure Redis 出现连接失败,过一会儿后,又能自动恢复。 问题解答 其实,因为Azure Redis服务一直都有升级维护的操作(平均每月一次),Redis服务更新是平台自动进行的计划内的维护升级行为,一般客户端都有重试机制,是不会影响应用。 故障转移发生的情况有: 系统更新,例如

【Azure Redis 缓存】Azure Redis服务开启了SSL(6380端口), PHP如何访问缓存呢?

问题描述 使用6379端口连接Azure Redis服务,连接失败。因为默认情况下Azure Redis的设置没有打开6379的端口。需要使用SSL(6380端口)进行连接,但是遇见了无法连接的问题。 使用非SSL(6379端口)的连接代码

【Azure Redis 缓存】Lettuce 连接到Azure Redis服务,出现15分钟Timeout问题

问题描述 在Java应用中,使用 Lettuce 作为客户端SDK与Azure Redis 服务连接,当遇见连接断开后,长达15分钟才会重连。导致应用在长达15分的时间,持续报错Timeout 问题解答 这是 Lettuce 目前的一个未解决的已知问题,可以查看此 github issue来了解这个

【Azure Redis 缓存】应用中出现连接Redis服务错误(production.ERROR: Connection refused)的排查步骤

问题描述 在PHP应用中,连接Redis的方法报错 RedisException(code: 0): Connection refused at /data/Redis/Connectors/PhpRedisConnector.php production.ERROR: Connection ref

【Azure Redis 缓存】Azure Redis 遇见的连接不上问题和数据丢失的情况解答

问题描述 PHP应用再连接Azure Redis服务时,出现Connection Timed out。当通过升级提高Azure Redis的性能时候,发现之前的数据丢失了。 问题解答 当Redis服务出现Timeout的情况时,可以从Redis服务的指标(Metrics)开始查看,如果出现负载(Se

【Azure Redis 缓存】使用StackExchange.Redis,偶发ERROR - Timeout performing HSET (15000ms)

问题描述 使用StackExchange.Redis 作为Redis客户端SDK,连接Azure Redis服务,长期运行后发现,每天都偶发 Timeout Error。 错误消息如下: StackExchange.Redis.RedisTimeoutException: Timeout perfo

【Azure Redis 缓存】示例使用 redisson-spring-boot-starter 连接/使用 Azure Redis 服务

问题描述 在 Spring Boot 项目中,使用 Redisson 连接 Azure Redis 服务,如下是详细的操作步骤(项目源代码文末可下载) 示例步骤 第一步: 在 Spring Boot 的项目中,添加 redisson-spring-boot-starter 依赖 在项目的pom.xm

【Azure Redis 缓存】使用开源工具redis-copy时遇见6379端口无法连接到Redis服务器的问题

问题描述 当使用Azure Redis服务时,需要把一个Redis服务的数据导入到另一个Redis上,因为Redis服务没有使用高级版,所以不支持直接导入/导出RDB文件。 以编程方式来读取数据并写入到新的Redis服务端,使用开源工具 Redis-Copy 却遇见了 6379 端口无法连接的问题。

【Azure Redis 缓存】Redission客户端连接Azure:客户端出现 Unable to send PING command over channel

问题描述 Redission客户端连接Azure:客户端出现 Unable to send PING command over channel ... ... io.netty.channel.StacklessClosedChannelException: null at io.netty.cha

【Azure Redis 缓存】在Azure Redis中,如何限制只允许Azure App Service访问?

问题描述 在Azure Redis服务中,如何实现只允许Azure App Service访问呢? 问题解答 Azure Redis 开启 防火墙的功能,并在防火墙中添加上App Service的出口IP地址即可。两步即可实现此目的! 1)查询 App Service 的出口IP地址 2)添加第1步