现象描述
现象1:使用云服务器 CVM 通过自动分配给云数据库的内网地址连接腾讯云分布式缓存数据库,连接失败。具体连接方式,请参见 连接实例。
现象2:登录 腾讯云分布式缓存数据库控制台,在实例列表,在目标实例的操作列,单击登录,跳转至数据库管理 DMC 平台,连接腾讯云分布式缓存数据库,连接失败,如下图所示。

可能原因
首次连接数据库失败时,可能原因如下:
端口问题。
网络配置问题或安全组配置错误。
密码问题。
实例运行过程中突发连接失败,可能原因如下:
连接数已满。
内存写满或者分片写满。
发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等。
客户端问题,可能原因如下:
连接池参数设置不合理。
连接泄露。
处理步骤
步骤1:使用 telnet 确认分布式缓存数据库端口是否可正常访问
大部分客户遇到的连接失败、无法连接等问题,可以通过命令行工具以及 telnet 缩小问题范围。
[root@VM-4-10-centos ~]# telnet 10.x.x.34 6379Trying 10.x.x.34...Connected to 10.x.x.34.Escape character is '^]'.
步骤2:排查是否为网络配置问题
云服务器和数据库,务必在同一账号同一个 VPC 内,或同在基础网络内,才能内网直接互通。如下情况,都可能导致连接失败。
云服务器(CVM)采用私有网络(VPC),分布式缓存数据库采用基础网络。建议将分布式缓存数据库 从基础网络切换为 VPC 网络,请参见 配置网络。
CVM 采用基础网络,分布式缓存数据库采用 VPC。建议将 CVM 从基础网络切换为 VPC 网络,请参见 切换私有网络服务。
CVM 与分布式缓存数据库在同一地域内,但属于不同的 VPC 网络。建议将分布式缓存数据库迁移到 CVM 所在的 VPC 网络,请参见 配置网络。
CVM 与分布式缓存数据库不在同一地域内,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网。
CVM 与 分布式缓存数据库账号不同,属于不同的 VPC 网络。建议在两个 VPC 网络之间建立 云联网。
步骤3:确认是否为安全组问题
若 CVM 和分布式缓存数据库的安全组配置有误,则会导致 CVM 无法连接分布式缓存数据库。
CVM 安全组配置有误
若想使用 CVM 连接分布式缓存数据库,需在 CVM 安全组中配置出站规则,当出站规则的目标配置不为0.0.0.0/0且协议端口不为 ALL 时,需要把分布式缓存数据库的 IP 及端口添加到出站规则中。
1. 登录 安全组控制台,在安全组列表中,找到 CVM 所绑定的安全组,单击安全组名,进入 CVM 绑定的安全组详情页。
2. 选择出站规则页签,单击添加规则。
类型选择自定义。
目标填写分布式缓存数据库的 IP 地址(段)。
协议端口填写分布式缓存数据库内网端口
策略选择允许。
分布式缓存数据库安全组配置有误
若想指定的 CVM 连接分布式缓存数据库实例,需要在分布式缓存数据库安全组中配置入站规则,当入站规则的源端配置不为0.0.0.0/0且协议端口不为 ALL 时,需要把 CVM 的 IP 及端口添加到入站规则中。
1. 登录 安全组控制台,在安全组列表中,找到分布式缓存数据库实例所绑定的安全组,单击安全组名,进入分布式缓存数据库绑定的安全组详情页。
2. 选择入站规则页签,单击添加规则。
3. 填写您允许连接的 IP 地址(段)及需要放通的端口信息(分布式缓存数据库内网端口),选择允许放通。
类型选择自定义。
来源填写您 CVM 的 IP 地址(段)。
协议端口填写分布式缓存数据库内网端口。
策略选择允许。
注意:
分布式缓存数据库内网默认端口为6379,同时支持自定义端口,若修改过默认端口号,安全组中需放通分布式缓存数据库新端口信息。
安全组入站规则需要放通分布式缓存数据库实例的6379端口。
步骤4:确认是否为密码问题
执行 info 命令进行测试,如果执行提示如下,说明分布式缓存数据库密码没有问题。
[root@SNG-Qcloud /data/home/rickyu]# redis-cli -h 10.x.x.34 -p 6379 -a password10.x.x.2:6379> info cpu# CPUused_cpu_sys:1623.176000used_cpu_user:4649.572000used_cpu_sys_children:0.000000used_cpu_user_children:0.000000
如果执行提示
NOAUTH Authentication required.代表密码错误。10.x.x.31:6379> info memoryNOAUTH Authentication required.10.x.x.31:6379>
步骤5:确认是否内存写满或分片写满导致连接失败
如果业务提示如下错误信息。
"-READONLY You can't write against a read only slave.\\r\\n"

内存写满情况下,写入失败,需进行如下操作。
立即进行扩容。具体操作,请参见 变更实例规格。
修改数据库驱逐策略。在参数配置中设置参数
maxmemory-policy调整为allkeys-lru或者volatile-lru。具体操作,请参见 管理实例参数。注意:
驱逐策略调整为
allkeys-lru,可能损坏业务数据,请根据实际需求评估。步骤6:确认是否连接数配额不足
监控指标连接使用率指客户端连接到实例的 TCP 连接数量与实例最大连接数的占比,该指标持续偏高,说明当前数据库连接数配额不足,需调整最大连接数。
问题现象
错误提示信息如下所示:
ERR max number of clients reached解决方法
1. 登录 腾讯云分布式缓存数据库控制台 在,右侧实例列表页面上方,选择地域。在实例列表中,到目标实例。单击蓝色字体的实例 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 -l2. 参考 Java 连接示例,检查是否调用 jedis.close() 进行旧连接的释放,避免连接泄露。
3. 如果旧连接都已释放,业务并发量大的情况下,需增加 maxTotal 参数值。
说明:
每个客户端连接池 maxTotal 值 * 客户端数量 = 腾讯云分布式缓存数据库的最大连接数。
更多参考
网络类型/ VPC 判断方法
使用内网地址连接云数据库时,CVM 和分布式缓存数据库须是同一账号,且同一个 VPC 内,或同在基础网络。
说明:
如果实例列表的网络处,均显示为基础网络或均显示为 VPC,则表示 CVM 和分布式缓存数据库是同一网络类型。
如果实例列表的网络处,均显示为同一个 VPC(保障同一个地域),则表示 CVM 和分布式缓存数据库是同一 VPC。
查看 CVM 网络类型

查看分布式缓存数据库网络类型
