Redis 在 Debian 上的连接问题排查与修复
一 快速自检
- 确认服务是否运行与版本:
- 查看状态:sudo systemctl status redis-server
- 启动/自启:sudo systemctl start redis-server && sudo systemctl enable redis-server
- 版本检查:redis-server --version、redis-cli --version
- 本地连通性测试:
- 直接连接:redis-cli ping(返回 PONG 表示服务可达)
- 指定主机端口:redis-cli -h 127.0.0.1 -p 6379 ping
- 若服务未安装,先安装:sudo apt update && sudo apt install redis-server
以上步骤能快速判断是“服务未起”“配置限制”还是“网络不通”。
二 定位根因
- 配置文件与监听地址:
- 主配置路径:/etc/redis/redis.conf
- 查看实际加载的配置:ps aux | grep redis(看 ExecStart 后的配置文件)、或 sudo journalctl -u redis-server 启动日志中的 “Configuration loaded from …”
- 关键项:
- bind 127.0.0.1(仅本地;远程需改为 bind 0.0.0.0 或注释该行)
- protected-mode yes/no(远程访问建议保持开启并配合密码)
- requirepass yourpassword(生产环境建议设置强密码)
- port 6379(确认未被占用与一致)
- 端口与进程占用:
- 检查监听:ss -tulnp | grep 6379 或 netstat -tulnp | grep 6379
- 占用处理:结束冲突进程或修改 Redis 端口后重启
- 防火墙与云安全组:
- UFW:sudo ufw status、sudo ufw allow 6379
- 云服务器需同时在安全组放行 6379/TCP
- 日志与系统资源:
- 日志:sudo tail -f /var/log/redis/redis-server.log、sudo journalctl -u redis-server
- 资源:free -h(内存)、df -h(磁盘)、必要时设置 maxmemory 2gb 等
- 内核与连接数:
- 适度放宽:sudo sysctl -w net.core.somaxconn=1024、sudo sysctl -w vm.overcommit_memory=1
以上检查覆盖“配置限制”“端口占用”“防火墙/云安全组”“资源不足”等高发原因。
三 常见场景与修复
- 本地可连、远程被拒绝(Connection refused)
- 配置:bind 0.0.0.0(或注释 bind)、开启 protected-mode 并设置 requirepass
- 防火墙/云安全组:放行 6379/TCP
- 重启:sudo systemctl restart redis-server
- 服务未启动或启动失败
- 查看状态与日志:systemctl status redis-server、journalctl -u redis-server
- 修复配置错误后重启;必要时重装:sudo apt purge redis-server && sudo apt install redis-server
- 端口被占用
- 查占用:ss -tulnp | grep 6379
- 结束冲突进程或调整 port,再重启
- 密码或 ACL 问题
- 无密码时客户端需无鉴权;有密码时使用 redis-cli -a <密码> 或在交互中 AUTH <密码>
- 资源不足导致异常
- 监控内存/磁盘,设置 maxmemory 策略,释放资源后重启
以上场景覆盖了最常见的报错与处置路径。
四 安全加固与验证
- 安全基线(生产建议)
- 仅绑定可信网段:bind <信任IP>(而非 0.0.0.0)
- 启用强密码:requirepass 强密码
- 限制命令:rename-command FLUSHALL “”、rename-command CONFIG “”
- 精细防火墙:sudo ufw allow from <信任IP> to any port 6379
- 验证步骤
- 本机:redis-cli ping → PONG
- 远程:redis-cli -h <服务器IP> -p 6379 ping → PONG
- 带认证:redis-cli -h -p 6379 -a <密码> ping
- 连通性:从客户端执行 nc -zv 6379 或 telnet 6379
- 运行信息核查
- 在 redis-cli 中:INFO(查看 connected_clients、used_memory、maxmemory 等关键指标)
以上措施能在恢复连接的同时降低暴露面与风险。
五 一键排查命令清单
- 服务与版本:systemctl status redis-server、redis-server --version
- 本地连通:redis-cli ping
- 远程连通:redis-cli -h -p 6379 ping
- 监听与占用:ss -tulnp | grep 6379
- 日志:journalctl -u redis-server、tail -f /var/log/redis/redis-server.log
- 防火墙:ufw status、ufw allow 6379
- 配置定位:ps aux | grep redis、查看日志中 “Configuration loaded from …”
- 资源:free -h、df -h
- 内核参数:sysctl -w net.core.somaxconn=1024、sysctl -w vm.overcommit_memory=1
按以上顺序执行,通常可在数分钟内定位并恢复 Redis 连接。