Redis

关注公众号 jb51net

关闭
首页 > 数据库 > Redis > Redis连接被拒绝

Redis连接被拒绝(Connection refused)问题的完整解决指南

作者:Bruce_xiaowei

这篇文章主要介绍了Redis连接被拒绝问题的诊断和解决流程,涵盖了服务未运行、配置限制、防火墙阻挡、资源不足等常见原因,并提供了相应的解决方案和安全配置建议,需要的朋友可以参考下

问题现象

当尝试连接Redis时出现以下错误:

Could not connect to Redis at 192.168.1.48:6379: Connection refused

问题诊断流程

1. 基础状态检查

# 检查Redis服务状态
systemctl status redis

# 检查Redis是否安装
redis-server --version
redis-cli --version
which redis-server

# 检查Redis进程
ps aux | grep redis
pgrep -lf redis

# 检查端口监听状态
netstat -tlnp | grep 6379
ss -tlnp | grep 6379

2. 连接测试

# 本地连接测试
redis-cli ping

# 远程连接测试
redis-cli -h 目标IP ping

常见原因及解决方案

情况一:Redis服务未安装

症状redis-server --version命令无输出

解决方案

# Ubuntu/Debian
sudo apt update && sudo apt install redis-server

# CentOS/RHEL
sudo yum install redis
# 或
sudo dnf install redis

情况二:Redis服务未启动

症状:服务已安装但进程不存在

解决方案

# 临时启动Redis
redis-server --daemonize yes

# 或使用配置文件启动
redis-server /etc/redis/redis.conf

# 创建系统服务(推荐)
sudo systemctl enable redis
sudo systemctl start redis

情况三:配置限制

症状:本地可连接,远程无法连接

解决方案
编辑Redis配置文件 /etc/redis/redis.conf

# 允许远程连接
bind 0.0.0.0

# 关闭保护模式(测试环境)
protected-mode no

# 设置密码(可选)
requirepass yourpassword

# 后台运行
daemonize yes

重启服务使配置生效:

sudo systemctl restart redis
# 或
pkill redis-server && redis-server /etc/redis/redis.conf

情况四:防火墙阻挡

症状:服务运行正常但无法连接

解决方案

# 检查防火墙状态
sudo ufw status
sudo iptables -L

# 开放Redis端口
sudo ufw allow 6379
# 或
sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT

# 永久保存iptables规则
sudo service iptables save  # CentOS
# 或安装iptables-persistent (Ubuntu/Debian)

情况五:服务配置问题

创建完整的systemd服务文件

sudo cat > /etc/systemd/system/redis.service << EOF
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
ExecStop=/usr/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis
RuntimeDirectory=redis
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
EOF

启用服务:

sudo systemctl daemon-reload
sudo systemctl enable redis
sudo systemctl start redis

高级排查技巧

1. 查看Redis日志

# 查看系统日志
sudo journalctl -u redis

# 或查看Redis日志文件
sudo tail -f /var/log/redis/redis-server.log

2. 检查资源限制

# 检查内存
free -h

# 检查磁盘空间
df -h

# 检查文件描述符限制
ulimit -n

3. 网络诊断

# 测试端口连通性
telnet 目标IP 6379
nc -zv 目标IP 6379

# 检查端口占用
sudo lsof -i :6379

4. 配置验证

# 检查配置文件语法
redis-check-rdb /etc/redis/redis.conf

# 测试配置
redis-server /etc/redis/redis.conf --test

安全配置建议

1. 生产环境安全设置

# 在redis.conf中设置
requirepass 强密码
rename-command FLUSHALL ""
rename-command CONFIG ""
bind 指定IP地址
port 自定义端口

2. 网络隔离

# 使用防火墙限制访问IP
sudo ufw allow from 信任IP to any port 6379

# 或使用iptables
sudo iptables -A INPUT -p tcp -s 信任IP --dport 6379 -j ACCEPT

自动化监控脚本

创建健康检查脚本:

#!/bin/bash
REDIS_HOST="localhost"
REDIS_PORT="6379"

if redis-cli -h $REDIS_HOST -p $REDIS_PORT ping | grep -q "PONG"; then
    echo "Redis is running"
    exit 0
else
    echo "Redis is down"
    # 尝试重启
    sudo systemctl restart redis
    exit 1
fi

总结

Redis连接被拒绝问题通常由以下原因引起:

  1. 服务未运行 - 启动Redis服务
  2. 配置限制 - 修改绑定地址和保护模式
  3. 防火墙阻挡 - 开放相应端口
  4. 资源不足 - 检查系统资源

通过系统化的诊断流程,可以快速定位并解决问题。建议在生产环境中配置适当的监控和告警机制,确保Redis服务的稳定性。

记住:在修改配置后务必重启Redis服务,并在生产环境中谨慎修改安全相关配置。

以上就是Redis连接被拒绝(Connection refused)问题的完整解决指南的详细内容,更多关于Redis连接被拒绝的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文