现象描述
现象1:使用云服务器 CVM 通过自动分配给云数据库的内网地址连接云数据库 Redis®,连接失败。具体连接方式,请参见 连接 Redis 实例。 现象2:登录 Redis 控制台,在实例列表,在目标实例的操作列,单击登录,跳转至数据库管理 DMC 平台,连接云数据库 Redis®,连接失败,如下图所示。 可能原因
首次连接数据库失败时,可能原因如下:
端口问题。
网络配置问题或安全组配置错误。
密码问题。
实例运行过程中突发连接失败,可能原因如下:
连接数已满。
内存写满或者分片写满。
发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等。
客户端问题,可能原因如下:
连接池参数设置不合理。
连接泄露。
处理步骤
步骤1:使用 telnet 确认 Redis 端口是否可正常访问
大部分客户遇到的连接失败、无法连接等问题,可以通过命令行工具以及 telnet 缩小问题范围。
[root@VM-4-10-centos ~]# telnet 10.x.x.34 6379
Trying 10.x.x.34...
Connected to 10.x.x.34.
Escape character is '^]'.
如上述所示,提示连接成功代表 Redis 实例端口正常可访问。如果出现异常,请继续 步骤2,排查网络问题。 步骤2:排查是否为网络配置问题
云服务器和数据库,务必在同一账号同一个 VPC 内,或同在基础网络内,才能内网直接互通。如下情况,都可能导致连接失败。
云服务器(CVM)采用私有网络(VPC),Redis 采用基础网络。建议将 Redis 从基础网络切换为 VPC 网络,请参见 配置网络。 CVM 采用基础网络,Redis 采用 VPC。建议将 CVM 从基础网络切换为 VPC 网络,请参见 切换私有网络服务。 CVM 与 Redis 在同一地域内,但属于不同的 VPC 网络。建议将 Redis 迁移到 CVM 所在的 VPC 网络,请参见 配置网络。 CVM 与 Redis 不在同一地域内,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网。 CVM 与 Redis 账号不同,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网。 步骤3:确认是否为安全组问题
若 CVM 和 Redis 的安全组配置有误,则会导致 CVM 无法连接 Redis。
CVM 安全组配置有误
若想使用 CVM 连接 Redis,需在 CVM 安全组中配置出站规则,当出站规则的目标配置不为0.0.0.0/0且协议端口不为 ALL 时,需要把 Redis 的 IP 及端口添加到出站规则中。
1. 登录 安全组控制台,在安全组列表中,找到 CVM 所绑定的安全组,单击安全组名,进入 CVM 绑定的安全组详情页。 2. 选择出站规则页签,单击添加规则。
类型选择自定义。
目标填写您 Redis 的 IP 地址(段)。
协议端口填写 Redis 内网端口
策略选择允许。
Redis 安全组配置有误
若想指定的 CVM 连接 Redis 实例,需要在 Redis 安全组中配置入站规则,当入站规则的源端配置不为0.0.0.0/0且协议端口不为 ALL 时,需要把 CVM 的 IP 及端口添加到入站规则中。
1. 登录 安全组控制台,在安全组列表中,找到 Redis 实例所绑定的安全组,单击安全组名,进入 Redis 绑定的安全组详情页。 2. 选择入站规则页签,单击添加规则。
填写您允许连接的 IP 地址(段)及需要放通的端口信息(Redis 内网端口),选择允许放通。
类型选择自定义。
来源填写您 CVM 的 IP 地址(段)。
协议端口填写 Redis 内网端口。
策略选择允许。
注意:
Redis 内网默认端口为6379,同时支持自定义端口,若修改过默认端口号,安全组中需放通 Redis 新端口信息。
安全组入站规则需要放通 Redis 实例的6379端口。
步骤4:确认是否为密码问题
执行 info 命令进行测试,如果执行提示如下,说明 Redis 密码没有问题。
[root@SNG-Qcloud /data/home/rickyu]# redis-cli -h 10.x.x.34 -p 6379 -a password
10.x.x.2:6379> info cpu
# CPU
used_cpu_sys:1623.176000
used_cpu_user:4649.572000
used_cpu_sys_children:0.000000
used_cpu_user_children:0.000000
如果执行提示NOAUTH Authentication required.
代表密码错误。
10.x.x.31:6379> info memory
NOAUTH Authentication required.
10.x.x.31:6379>
步骤5:确认是否内存写满或分片写满导致连接失败
如果业务提示如下错误信息。
"-READONLY You can't write against a read only slave.\\r\\n"
登录 Redis 控制台,在实例列表找到目标实例,单击实例 ID 进入系统监控页面,指标下拉列表选择内存使用率,查看实例内存写满情况。 内存写满情况下,写入失败,需进行如下操作。
修改数据库驱逐策略。在参数配置中设置参数maxmemory-policy
调整为allkeys-lru
或者volatile-lru
。具体操作,请参见 管理实例参数。 注意:
驱逐策略调整为allkeys-lru
,可能损坏业务数据,请根据实际需求评估。
步骤6:确认是否连接数配额不足
监控指标连接使用率指客户端连接到实例的 TCP 连接数量与实例最大连接数的占比,该指标持续偏高,说明当前数据库连接数配额不足,需调整最大连接数。
问题现象
错误提示信息如下所示:
ERR max number of clients reached
解决方法
1. 登录 Redis 控制台 在,右侧实例列表页面上方,选择地域。在实例列表中,到目标实例。单击蓝色字体的实例 ID,进入实例详情页面,单击系统监控页签,再选择监控指标页签,查看监控数据。在视图下拉列表选择实例监控,指标选择连接使用率,查看其监控视图是否持续偏高。 2. 连接使用率持续偏高,调整最大连接数,修改连接数配置规格。具体操作,请参见 调整连接数数量。 步骤7:确认是否发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等
如果在某个确定的时间点发现连接异常或者有大量的访问报错及慢查询,同时接收到腾讯云可观测平台事件告警,发生了异常事件,请联系 在线客服 获取帮助。 步骤8:如果使用 Jedis 连接池,确认客户端连接池配置是否合理
问题现象
如果连接池可用连接数量耗尽,旧连接未及时释放,新创建连接会失败,客户端提示如下错误信息。
JedisConnectionException: Could not get a resource from the pool
解决方法
1. 在客户端使用如下指令,确认当前访问实例6379端口的连接数量,如果客户端连接数接近连接池配置的 maxTotal 值,将会出现连接失败的问题。
netstat -an | grep 6379 | grep ESTABLISHED | wc -l
2. 参考Java 连接示例,检查是否调用 jedis.close() 进行旧连接的释放,避免连接泄露。 3. 如果旧连接都已释放,业务并发量大的情况下,需增加 maxTotal 参数值。
说明:
每个客户端连接池 maxTotal 值 * 客户端数量 = 云数据库 Redis® 的最大连接数。
更多参考
网络类型 / VPC 判断方法
使用内网地址连接云数据库时,CVM 和 Redis 须是同一账号,且同一个 VPC 内,或同在基础网络。
说明:
如果实例列表的网络处,均显示为基础网络或均显示为 VPC,则表示 CVM 和 Redis 是同一网络类型。
如果实例列表的网络处,均显示为同一个 VPC(保障同一个地域),则表示 CVM 和 Redis 是同一 VPC。
查看 CVM 网络类型
查看 Redis 网络类型
通过开启外网地址实现外网访问
云数据库 Redis® 现已支持在控制台手动开启外网地址,实现外网访问 Redis 实例。具体操作,请参见 配置外网地址。
本页内容是否解决了您的问题?