无法连接 Redis 实例

最后更新时间:2022-01-14 11:10:29

    现象描述

    • 现象1:从 CVM 连接登录云数据库 Redis,连接失败。
    • 现象2:从数据库管理 DMC 平台连接登录云数据库 Redis,连接失败。

    可能原因

    • 网络问题。
    • 安全组问题。
    • 密码问题。
    • 连接数已满。
    • 内存写满或者分片写满。
    • 需外网访问实例但无法访问。
    • 发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等。

    解决思路

    1. 使用 telnet 确认是 Redis 问题还是业务侧问题
    2. 确认是否为密码问题
    3. 调整最大连接数
    4. 确认是否内存写满或分片写满导致写入失败
    5. 通过开启外网地址实现外网访问
    6. 确认是否发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等

    处理步骤

    使用 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 实例没有问题,下面进行业务侧问题排查:

    1. 确认是否为网络问题

    云服务器和数据库,须在同一账号同一个 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 网络之间建立 云联网

    2. 确认是否为安全组问题

    若 CVM 和 Redis 的安全组配置有误,则会导致 CVM 无法连接 Redis。

    • CVM 安全组配置有误
      若想使用 CVM 连接 Redis,需在 CVM 安全组中配置出站规则,当出站规格的目标配置不为0.0.0.0/0且协议端口不为 ALL 时,需要把 Redis 的 IP 及端口添加到出站规则中。

      1. 登录 安全组控制台,单击安全组名,进入 CVM 绑定的安全组详情页。
      2. 选择【出站规则】页,单击【添加规则】。
        “类型”选择自定义;“目标”填写您 Redis 的 IP 地址(段);“策略”选择允许。
    • Redis 安全组配置有误
      若想指定的 CVM 连接 Redis 实例,需要在 Redis 安全组中配置入站规则,当入站规则的源端配置不为0.0.0.0/0且协议端口不为ALL时,需要把 CVM 的 IP 及端口添加到入站规则中。

      1. 登录 安全组控制台,单击安全组名,进入 Redis 绑定的安全组详情页。
      2. 选择【入站规则】页,单击【添加规则】。
        填写您允许连接的 IP 地址(段)及需要放通的端口信息(Redis 内网端口),选择允许放通。
        “类型”选择自定义;“来源”填写您 CVM 的 IP 地址(段);“策略”选择允许。
        注意:

        • Redis 内网默认端口为6379,同时支持自定义端口,若修改过默认端口号,安全组中需放通 Redis 新端口信息。
        • 安全组入站规则需要放通 Redis 实例的6379端口。

    确认是否为密码问题

    执行 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.0.4.31:6379> info memory
    NOAUTH Authentication required.
    10.0.4.31:6379> 
    

    解决方案

    登录 Redis 控制台,单击实例 ID 进入详情页,进行密码重置即可,详情请参见 管理账号

    调整最大连接数

    1. 登录 Redis 控制台,单击实例 ID,进入实例详情页。
    2. 在详情页的“最大连接数”处,单击【调整】可修改最大连接数。
      说明:

      用户可在控制台修改 Proxy 的最大连接数,如需修改 Redis 的最大连接数,请 提交工单 获取帮助。

    3. 在系统监控页,选择【连接使用率】指标,可查看连接使用率。
      Proxy 监控:

      Redis 监控:

    确认是否内存写满或分片写满导致写入失败

    如果业务报错:

    "-READONLY You can't write against a read only slave.\r\n"
    

    登录 Redis 控制台,单击实例 ID 进入系统监控页面,查看监控发现内存写满情况:

    内存写满情况下,写入失败,需要立即进行 扩容 或者将驱逐策略调整为allkeys-lru或者volatile-lru

    说明:

    驱逐策略调整为allkeys-lru,会对业务数据有损,请根据实际需求评估。

    通过开启外网地址实现外网访问

    云数据库 Redis 现已支持在控制台手动开启外网地址,实现外网访问 Redis 实例,具体操作步骤请参见 配置外网地址

    确认是否发生 HA 切换、服务不可用、只读副本切换、只读副本服务不可用等

    如果在某个确定的时间点发现连接异常或者有大量的访问报错,慢查询,同时接受到云监控事件告警,代表发生了异常事件,请 联系我们 获取帮助。

    云监控 事件告警配置方法

    附录

    网络类型/ VPC 判断方法

    使用内网地址连接云数据库时,CVM 和 Redis 须是同一账号,且同一个 VPC 内(保障同一个地域),或同在基础网络。

    说明:

    • 如果实例列表的“网络”处,均显示为“基础网络”或均显示为“VPC”,则表示 CVM 和 Redis 是同一网络类型。
    • 如果实例列表的“网络”处,均显示为同一个“VPC”(保障同一个地域),则表示 CVM 和 Redis 是同一 VPC。
    • 查看 CVM 网络类型/同一 VPC :登录 CVM 控制台,在实例列表查看“网络”。
    • 查看 Redis 网络类型/同一 VPC:登录 Redis 控制台,在实例列表查看“网络”。