2022-09-14 15:40:45
在CentOS上排查Redis配置故障时,可通过以下步骤系统性定位并解决问题:
一、基础检查项日志文件分析
路径:默认日志文件位于/var/log/redis/redis-server.log,通过cat /var/log/redis/redis-server.log或tail -f /var/log/redis/redis-server.log实时查看错误信息。
关键错误:重点关注FATAL、ERROR级别日志,例如端口绑定失败、权限不足、内存不足等。
端口占用检查
命令:netstat -tuln | grep 6379 或 ss -tuln | grep 6379(更高效的替代工具)。
解决:若端口被占用,修改Redis配置文件redis.conf中的port参数,或终止冲突进程(kill -9 <PID>)。
配置文件验证
路径:默认配置文件为/etc/redis/redis.conf或/usr/local/etc/redis.conf。
关键参数:
bind:确保绑定到正确IP(如0.0.0.0允许所有IP访问,但需加强防火墙规则)。
protected-mode:若启用(yes),需配置密码或绑定内网IP。
requirepass:若设置密码,需确保客户端连接时使用正确密码。
语法检查:使用redis-server /path/to/redis.conf --test-memory 2(测试内存配置)或通过redis-cli config get *验证配置项是否生效。
权限与所有权
目录权限:
Redis数据目录(dir参数指定)需对Redis用户(如redis)可读写:chown -R redis:redis /var/lib/redis。
日志文件路径需可写:chmod 644 /var/log/redis/redis-server.log。
SELinux影响:若启用SELinux,需确保上下文正确(如chcon -R -t var_log_t /var/log/redis)。
网络连通性测试
工具:
ping <Redis服务器IP>:测试基础连通性。
telnet <IP> 6379:测试端口可达性(若未安装telnet,使用nc -zv <IP> 6379)。
mtr <IP>:诊断网络延迟或丢包。
防火墙规则:检查firewalld或iptables是否放行6379端口:firewall-cmd --list-ports | grep 6379 firewall-cmd --add-port=6379/tcp --permanent && firewall-cmd --reload
慢查询监控
命令:redis-cli slowlog get(默认记录执行时间超过10ms的查询)。
优化:通过slowlog-log-slower-than调整阈值,或优化复杂查询(如使用SCAN替代KEYS *)。
系统资源监控
CPU/内存:top或htop查看Redis进程占用,free -h检查内存剩余。
磁盘空间:df -h确保数据目录所在分区未满。
Redis内存配置:
maxmemory:设置最大内存限制(如maxmemory 2gb)。
maxmemory-policy:配置淘汰策略(如allkeys-lru)。
内存不足处理
现象:Redis崩溃或日志出现OOM (Out of Memory)错误。
解决:
增加系统内存或优化Redis数据结构(如使用HASH替代多个STRING)。
启用虚拟内存(不推荐,性能较差)或迁移部分数据到其他实例。
端口冲突
表现:启动Redis时报错Address already in use。
解决:修改redis.conf中的port参数,或终止占用进程。
绑定地址错误
表现:客户端无法连接,日志显示Failed to listen on port 6379: Address not available。
解决:检查bind参数是否为有效IP(如127.0.0.1仅限本地访问)。
密码认证失败
表现:连接时报错NOAUTH Authentication required。
解决:确保客户端使用AUTH <password>命令,且密码与requirepass一致。
配置未生效
表现:修改配置后无变化。
解决:
执行redis-cli config reload动态重载配置(部分参数需重启)。
使用systemctl restart redis(Systemd)或service redis restart(SysVinit)重启服务。
版本不兼容
表现:客户端连接时报错WRONGVERSION incompatible protocol version。
解决:升级客户端或服务器至兼容版本(如Redis 6.x客户端与5.x服务器不兼容)。
redis-cli --stat:实时查看键数量、内存、连接数等。
redis-cli info:获取详细状态信息(如info memory、info clients)。
编辑/etc/logrotate.d/redis,设置日志按大小或时间分割,避免日志文件过大。
总结:CentOS下Redis故障排查需结合日志、端口、配置、权限、网络和资源多维度分析。优先检查日志中的错误关键词,逐步验证配置和权限,最后通过监控工具定位性能瓶颈。若问题复杂,可启用Redis的DEBUG模式或联系社区支持。