
# Redis连接失败问题排查和解决
#### 概述
本章节主要描述Redis连接过程出现的问题，以及解决方法。
#### 问题分类
当您发现与Redis实例连接出现异常时，可以根据本文的内容，从以下几个方面进行排查。
- [Redis和ECS之间的连接问题]
- [公网连接Redis 3.0]
- [密码问题]
- [实例配置问题]
- [客户端连接问题]
- [带宽超限导致连接问题]
- [性能问题导致连接超时]
 
 #### Redis和ECS之间的连接问题
客户端所在的ECS必须和Redis实例在同一个VPC内，并且需要确保ECS和Redis之间可以正常连接。
- 如果是Redis 3.0或Redis 6.0企业版实例，Redis和ECS的安全组没有配置正确，连接失败。 解决方法：配置ECS和Redis实例所在安全组规则，允许Redis实例被访问。具体配置，可以参考[配置安全组](https://support.huaweicloud.com/dcs_faq/dcs-faq-0713002.html)。
  
- 如果是Redis 4.0及以上基础版实例，开启了白名单功能，连接失败。 如果实例开启了白名单，在使用客户端连接时，需要**确保客户端IP是否在白名单内** ，如果不在白名单，会出现连接失败。具体配置操作，可以参考[配置白名单](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190812001.html)。客户端IP如果有变化，需要将变化后的IP加入白名单。
  
- Redis实例和ECS不在同一个Region。 解决方法：不支持跨Region访问，可以在ECS所在的Region创建Redis实例，创建时注意选择与ECS相同VPC，创建之后，使用[数据迁移](https://support.huaweicloud.com/usermanual-dcs/dcs-migration-090626002.html) 进行迁移，将原有Redis实例数据迁移到新实例中。
  
- Redis实例和ECS不在同一个VPC。 不同的VPC，网络是不相通的，不在同一VPC下的ECS是无法访问Redis实例。可以通过创建VPC对等连接，将两个VPC的网络打通，实现跨VPC访问Redis实例。
  关于创建和使用VPC对等连接，请参考[VPC对等连接说明](https://support.huaweicloud.com/usermanual-vpc/vpc_peering_0000.html)。
  
 
 #### 公网连接Redis 3.0
在进行公网访问时，请先仔细阅读[公网连接](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713003.html)章节，**检查实例是否满足公网访问的要求**。
- 连接时提示：Error: Connection reset by peer或者出现：远程主机强迫关闭一个现有的连接。
  - 原因1：安全组没有配置正确。 解决方法：需要允许Redis实例被访问，具体配置操作和公网连接操作，请按照[公网连接](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713003.html)章节中的操作进行。
    
  
  - 原因2：查看Redis所在vpc子网是否被ACL关联，同时这个ACL出方向被限制了。若是，放开限制。
  
  - 原因3：开启了SSL加密传输，连接时没有安装配置Stunnel，直接使用了界面提示的IP地址进行连接。 解决方法：开启SSL加密时，必须安装配置Stunnel客户端，具体操作，请按照[公网连接Redis实例（开启SSL加密）](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0513002.html)执行。其中，请注意，**在连接Redis实例命令中，IP地址需要配置为Stunnel客户端地址和端口，不要使用控制台展示的Redis实例公网连接地址和端口**。
    
   
- 已经开启了公网访问的Redis实例，公网访问被关闭了，无法使用公网访问。 原因：该Redis实例绑定的弹性公网IP被解绑，导致Redis实例公网被关闭。
  解决方法：在控制台重新开启实例的公网访问，绑定弹性公网IP，并重新连接。
  
 
 #### 密码问题
密码输入错误时，端口可以连接上，但鉴权认证会失败。如果忘记了密码，可以[重置密码](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312039.html)。
 #### 实例配置问题
连接Redis时存在拒绝连接，可登录分布式缓存服务控制台，进入实例详情页面，调整实例参数maxclients的配置，具体操作可参考[修改配置参数](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0312024.html) 。
 #### 客户端连接问题
- 在使用Redis-cli连接Cluster集群时，连接失败。
  解决方法：请检查连接命令是否加上**-c** ，在连接Cluster集群节点时务必使用正确连接命令。
  - Cluster集群连接命令： ./redis-cli -h *{dcs_instance_address}* -p 6379 -a {password} -c
    
  
  - 单机、主备、Proxy集群连接命令： ./redis-cli -h *{dcs_instance_address}* -p 6379 -a {password}
    
   
  具体连接操作，请参考[Redis-cli连接](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-0713004.html)。
  
- 出现Read timed out或Could not get a resource from the pool。 解决方法：
  - 排查是否使用了keys命令，keys命令会消耗大量资源，造成Redis阻塞。建议使用scan命令替代，且避免频繁执行。
  
  - 排查实例是否是Redis 3.0，Redis 3.0底层用的是sata盘，当Redis数据持久化即AOF时，会触发偶现的磁盘性能问题，导致连接异常，可更换Redis实例为4.0及以上版本，其底层是ssd盘，磁盘性能更高，或若不需要持久化可关闭AOF。
   
- 出现unexpected end of stream错误，导致业务异常。 解决方法：
  - Jedis连接池调优，建议参考[Jedis参数配置建议](https://support.huaweicloud.com/dcs_faq/dcs-faq-211230001.html#section1)进行配置连接池参数。
  
  - 排查是否大key较多，建议根据[优化大key](https://support.huaweicloud.com/dcs_faq/dcs-faq-0521005.html)排查优化。
   
- 连接断开。 解决方法：
  - 调整应用超时时间。
  
  - 优化业务，避免出现慢查询。
  
  - 建议使用scan命令替代keys命令。
   
- Jedis连接池问题，请参考[使用Jedis连接池报错如何处理？](https://support.huaweicloud.com/trouble-dcs/dcs-trouble-0715003.html)。
 
 #### 带宽超限导致连接问题
当实例已使用带宽达到实例规格最大带宽，可能会导致部分Redis连接超时现象。
您可以查看监控指标"流控次数"，统计周期内被流控的次数，确认带宽是否已经达到上限。
然后，检查实例是否有大Key和热Key，如果存在大Key或者单个Key负载过大，容易造成对于单个Key的操作占用带宽资源过高。大Key和热Key操作，请参考[分析实例大Key和热Key](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190808001.html)。
Redis 4.0及之后版本的实例，支持通过控制台对Redis实例进行[带宽扩容](https://support.huaweicloud.com/usermanual-dcs/dcs_03_0002.html)，可用于解决带宽超限的问题。
 #### 性能问题导致连接超时
使用了keys等消耗资源的命令，导致CPU使用率超高；或者实例没有设置过期时间、没有清除已过期的Key，导致存储的数据过多，一直在内存中，内存使用率过高等，这些都容易出现访问缓慢、连接不上等情况。
- 建议客户改成scan命令或者禁用keys命令。
- 查看监控指标，并配置对应的告警。监控项和配置告警步骤，可查看[必须配置的监控告警](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190905001.html)。
  例如，可以通过监控指标"内存利用率"和"已用内存"查看实例内存使用情况、"活跃的客户端数量"查看实例连接数是否达到上限等。
  
- 检查实例是否存在大Key和热Key。 DCS控制台提供了大Key和热Key的分析功能，具体使用，请参考[分析Redis实例的大Key和热Key](https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190808001.html)。
  
 
