当前位置:首页 > 问答 > 正文

Redis端口突然连不上了,可能是配置或者防火墙的问题,教你怎么排查解决

Redis端口突然连不上了,这个问题挺让人头疼的,不管是自己电脑上装的Redis还是服务器上的,一旦连不上,很多功能就卡壳了,别急着重启服务或者服务器,咱们一步一步来,就像查案子一样,从最简单、最可能的地方开始排查,心态放平,大多数情况都不是什么大问题。

第一步:先检查Redis服务自己还活着没

最直接的想法是:Redis服务器进程还在运行吗?它是不是自己挂掉了,你想想,如果服务都没启动,那肯定连不上啊。

  • 怎么查?

    • 如果是在Linux服务器上,打开终端,输入命令:ps -ef | grep redis,你会看到一行信息,如果能看到一个包含redis-server的进程,那就说明Redis服务是在运行的,如果什么都没看到,那很可能就是服务停了。
    • 如果是在Windows上,可以打开任务管理器,在“进程”或“详细信息”里找找有没有redis-server.exe这个进程。
  • 如果发现服务真的没启动怎么办?

    • 那就去启动它,找到你的Redis安装目录,通常启动命令是redis-server redis.conf(如果你有配置文件的话),或者直接双击redis-server.exe(Windows下),有时候服务挂掉可能是因为写入了错误的数据或者内存不足等,启动时注意看一下命令行窗口有没有报错信息。

第二步:检查基本连接参数:别输错了

服务明明运行着,但还是连不上?这时候要回头检查一下你的连接命令或代码里的连接信息是不是写错了,这就像打电话拨错了号码。

  • 核对要点:
    • IP地址/Host(主机名):你连的是0.0.1(本地)还是服务器的真实IP地址?确保没写错。
    • 端口号:Redis默认端口是6379,但你或者其他人可能因为安全原因修改过它,检查一下你的配置文件或者确认一下是否使用了非默认端口。
    • 密码:如果Redis设置了密码(通过配置文件的requirepass项),连接时必须提供密码,检查一下是不是忘了密码,或者密码输错了。

第三步:重点嫌疑对象:防火墙

根据很多运维工程师的经验(例如博客园、知乎上多位技术人员的分享),Redis连不上,十有八九是防火墙在“作怪”,防火墙就像小区的保安,它规定了哪些端口可以被外部访问,很可能Redis的端口(默认6379)没有被允许通过防火墙。

  • 在Linux上怎么排查和解决防火墙问题?

    • 检查防火墙状态:以CentOS 7及以上(使用firewalld)为例,输入命令:sudo firewall-cmd --list-all,你会看到一个列表,里面有个叫ports的区域,这里显示了当前允许通过的端口,看看里面有没有6379/tcp这一条,如果没有,那基本就是它了。
    • 临时开放端口(测试用):可以执行命令:sudo firewall-cmd --add-port=6379/tcp,这条命令会让端口临时开放,重启防火墙后会失效,执行完后,立刻尝试连接Redis,如果成功了,就证实了是防火墙的问题。
    • 永久开放端口:确认是防火墙问题后,为了以后不再出问题,需要永久开放端口:sudo firewall-cmd --add-port=6379/tcp --permanent,然后重载防火墙配置:sudo firewall-cmd --reload
    • 如果是iptables:查看规则可以用sudo iptables -L -n,添加规则会稍复杂一些,可以搜索“iptables 开放端口”来找到具体命令。
  • 在Windows上怎么排查?

    • 打开“Windows Defender 防火墙”,点击“高级设置”。
    • 在弹出窗口里,查看“入站规则”,找找有没有关于Redis端口(6379)的规则,并且规则是“允许”状态的,如果没有,就需要新建一条入站规则,允许TCP端口6379。

第四步:检查Redis的配置文件

如果防火墙也没问题,那就要深入Redis内部了,看看它的配置文件(通常是redis.conf)是不是有些限制性的设置。

  • 用文本编辑器打开redis.conf文件,重点检查以下两项:
    • bind(绑定)设置:这一项决定了Redis监听哪个网络接口,如果被设置为bind 127.0.0.1,那么只有本机可以连接Redis,其他任何机器都无法连接,如果你想允许其他机器连接,可以注释掉这一行(在行首加),或者改成bind 0.0.0.0(监听所有接口)(注意:这样设置会允许任何IP连接,存在安全风险,最好配合防火墙和密码使用)
    • protected-mode(保护模式):这个是Redis的一个安全特性,如果Redis没有设置密码(requirepass),并且没有使用bind绑定到特定IP,保护模式会生效,阻止外部连接,解决方案要么是设置一个强密码,要么是显式地绑定IP(比如bind 0.0.0.0),或者将protected-mode设置为no(不推荐,安全性低)。

第五步:终极排查工具:telnet

如果以上检查都做了还是不行,可以用一个非常实用的网络工具——telnet来最终判断网络通不通。

  • 怎么用?
    • 在客户端的机器上(就是你要连Redis的那台电脑),打开命令提示符或终端。
    • 输入命令:telnet <Redis服务器的IP地址> 6379
    • 如果连接成功:你会看到一个黑色的窗口,可能只有一个光标在闪动,这说明网络是通的,TCP连接能建立起来,问题可能出在Redis的密码认证或者其他非常规配置上。
    • 如果连接失败:提示“无法打开到主机的连接”或“Connection refused”,那说明TCP层面的连接就没成功,问题100%出在网络层面,比如防火墙、Redis服务没启动、或者IP地址路由不通等,你就需要回到前面的步骤再仔细检查。

总结一下排查顺序:

  1. 看服务:Redis进程在吗?
  2. 核参数:IP、端口、密码输对了吗?
  3. 查防火墙:这是最常见的“凶手”。
  4. 翻配置:检查redis.conf里的bindprotected-mode
  5. 用telnet:最终判断网络通不通。

按照这个顺序来,基本上能解决99%的Redis端口连接不上的问题,整个过程不需要太高深的技术,主要就是细心和有条理,希望你的Redis能尽快恢复连接!

Redis端口突然连不上了,可能是配置或者防火墙的问题,教你怎么排查解决