【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server

简介: 【Azure Redis】部署在AKS中的应用连接Redis时候出现Unable to connect to Redis server

问题描述

在AKS Pod中连接 Azure Redis服务,大概率出现连接不上的问题。大多数的错误为 RedisConnectionException: Unable to connect to Redis server: xxxxxxxxx.redis.cache.chinacloudapi.cn/52.xxx.xxx.xxx:6380

, 但是有时候的错误信息为: RedisConnectionException: Unable to init enough connections amount! only 6 of 24 were initialized. Redis server: xxxxxxxxx.redis.cache.chinacloudapi.cn/52.xxx.xxx.xxx:6380 。

所以,根据后面的信息判断,Pod并不是完全不能连接Reids服务器,而是只能成功建立部分连接,这是什么问题呢?

 

问题解答

当出现连接Redis服务器Timeout时,第一反应就是要查看客户端和服务端的网络是否连通,是否稳定。

所以进入到Pod所在的节点中,执行 paping 测试,验证了问题在于 连接Redis服务器6380的端口不稳定,经常出现Timeout。

paping -p 6380 xxxxxxxx.redis.cache.chinacloudapi.cn -c 10

结果如下:

证明了是因为AKS所在的网络与Azure Redis之间,存在连通性稳定问题。

 

进一步调查AKS的网络配置,使用的是默认标准版本的Azure Load Balancer。因为Load Balancer存在出口IP端口限制,默认一个节点的出口端口为1024个,如果节点中所建立的连接过多,占用完SNAT端口数,就会导致新的连接连接不成功 Connection timed out.

(Source: https://docs.azure.cn/zh-cn/aks/load-balancer-standard#configure-the-allocated-outbound-ports

 

通过调大默认的SNAT端口限制数后 (1024 ---> 8192), 连接Redis的问题得到解决。

 

## 长Ping结果也变得稳定。

 

参考资料

在 Azure Kubernetes 服务 (AKS) 中使用公共负载均衡器  : https://docs.azure.cn/zh-cn/aks/load-balancer-standard#configure-the-allocated-outbound-ports

使用 PSPING 测试连接 : https://docs.azure.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-connectivity#test-connectivity-using-psping

 

相关文章
|
5月前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
512 5
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
1685 160
|
11月前
|
云安全 NoSQL 安全
【Azure Redis】关于Redis的两个安全漏洞在Azure Redis是否修复问题:CVE-2024-51741 和 CVE-2024-46981
本文探讨了两个 Redis 漏洞(CVE-2024-51741 和 CVE-2024-46981)在 Azure Redis 上是否存在安全风险。CVE-2024-51741 可能因格式错误的 ACL 触发拒绝服务,而 CVE-2024-46981 或因恶意 Lua 脚本导致远程代码执行。目前 Azure Redis 使用版本 6.0,不受上述漏洞影响,且 Azure 云服务会及时修复漏洞以确保安全。文章强调 Azure 遵循严格的安全标准,为用户提供可靠保障。
402 4
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
663 30
|
缓存 监控 NoSQL
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤
282 0
|
NoSQL Redis 数据库
一步一步学习Redis——连接服务的相关命令
一步一步学习Redis——连接服务的相关命令
一步一步学习Redis——连接服务的相关命令
|
NoSQL Java 编译器
一步一步学习Redis——Java连接Redis(Java中使用Redis命令)
一步一步学习Redis——Java连接Redis(Java中使用Redis命令)
1420 0
一步一步学习Redis——Java连接Redis(Java中使用Redis命令)
|
NoSQL Redis
Redis 连接命令
Redis 命令用于在 redis 服务上执行操作。 要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。
1425 0
|
10月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?