本文主要介绍Redis连接问题的排查与解决。
在ECS实例上通过内网地址访问Redis实例,详情请参见redis-cli连接,确保ECS与Redis之间可以相互连接。如果二者无法互访,可能是下列原因引起的。
说明:
- 如果您需要从本地主机连接云数据库Redis版,请参见外网连接。
- 建议您使用阿里云内网通过ECS连接Redis实例,提高安全性,降低网络耗时对Redis性能的影响。
- 如果因条件限制无法实施以下解决方法,您可以重新创建ECS或Redis实例,使二者在同一VPC中。
问题原因 | 解决方法 |
---|---|
Redis实例和ECS实例不在同一账号下。 | 根据实际情况,选择对应的解决方案:
|
ECS与Redis不在相同地域。 | 在ECS所在地域中创建新的Redis实例,然后将源Redis实例中的数据迁移到新实例中,操作方法请参见使用redis-shake迁移RDB文件内的数据。 |
ECS与Redis的网络类型不同。 |
|
ECS的安全组规则阻塞了对Redis内网地址和端口的访问。 | 添加安全组规则,使其允许访问,操作方法请参见添加安全组规则。 |
Redis的白名单中未加入ECS的内网地址。 | 将ECS的内网IP添加到Redis白名单,操作方法请参见设置IP白名单。
|
DNS解析问题。客户端出现类似如下报错:
|
使用ping或者telnet命令测试Redis连接地址,查看解析情况,如不成功请检查DNS配置是否正确。 |
ECS异常行为触发安全策略,导致服务被禁止。如果多台正常连接到Redis的ECS实例中有某个实例出现突发的连接问题。尤其是ECS能ping通Redis实例,但使用telnet命令测试6379端口失败时,可能是该ECS存在异常行为(例如对外攻击)导致服务被禁止。 | 请检查服务器,在安全组的出方向设置精确的规则,比如限定该ECS只能访问业务需要的地址和端口,此处为Redis实例的6379端口,详情请参见添加安全组规则。若问题还不能解决,请提交工单进行详细排查。 |
若忘记Redis密码,请在控制台修改密码,详情请参见修改密码。
说明:如果使用各语言的客户端或者redis-cli连接Redis失败,请先排查Redis与ECS实例之间的连接问题。
每种规格的Redis实例都有相应的带宽限制,详情请参见规格查询导航。如果您的实例有突发或计划中的流量高峰,您可以根据需求调整实例的带宽。具体操作,请参见手动调整实例带宽。
使用KEYS、HGETALL等命令影响了Redis性能,导致线程阻塞等情况,进而出现连接问题。
SHOW LOG
命令查看,详情请参见查看慢日志。