Redis 故障排查袖珍指南
最后更新日期:2024 年 4 月 18 日
症状
延迟问题、其他问题或仅作为健康检查
更改
软件或系统的配置更改、工作负载或数据集大小的更改可能会导致延迟。
识别 Redis 主机上的问题
- 使用 "
df -h
" 检查磁盘空间是否未过度消耗。使用 “du -sh /var/opt/redislabs/log/
” 检查日志目录的容量是否未增加,然后继续检查其他可能的原因 - 检查 RAM 内存或 CPU 是否未过度消耗。建议 RAM 和 CPU 利用率不超过 80%。主机资源必须专供 Redis 软件使用
- 使用 "
free
" 验证交换内存是否未被利用或未配置 - 建议主机时钟与时间服务器同步。使用
timedatectl
或 "ntpq -p
" 或 "chronyc sources
" 进行验证 - 检查 "
env
" 的输出,如果存在 https_proxy/http_proxy 变量,请将其移除:"unset https_proxy
" - 查看系统日志,包括 syslog 或 journal,查找任何错误消息、警告或严重事件
识别安全加固可能导致的问题
- 暂时禁用任何安全/加固措施,检查问题是否缓解。例如:selinux、cylance、McAfee、dynatrace 等。
- Linux 用户 "
redislabs
" 必须对/tmp
文件夹具有读/写访问权限。使用 "su - redislabs -s /bin/bash -c 'touch /tmp/test'" 进行验证 - 不宽松的
umask
可能会导致问题。如果 umask 与默认值 022 不同,可能会阻止正常操作。咨询您的系统管理员并恢复到默认的 umask
识别 Redis 集群问题
- 执行 “
supervisorctl status
" 并验证所有进程都处于 RUNNING 状态。 - 执行 "
rlcheck
" 并验证没有出现错误 - 执行 "
rladmin status issue_only
" 并验证没有出现问题 - 执行 "
rladmin status shards
" 并验证参与同一数据库的分片已使用内存平衡,且每个分片不超过 25GB - 执行 "
rladmin cluster running_actions
" 并验证没有出现任务
故障排查连接问题
- 在客户端计算机上使用 "
dig <endpoint>
" 检查 Redis 端点是否可解析。如果解析失败,继续检查 Redis 端点是否可在其中一个集群节点上解析 "dig @localhost <endpoint>
"。如果解析成功,则问题在于组织 DNS。 - 为了识别客户端应用程序的任何问题,使用
redis-cli
从客户端计算机到数据库检查连接性:"redis-cli -h <endpoint> -p <port> -a <password> info
" 或 "redis-cli -h <endpoint> -p <port> -a <password> --tls --insecure --cert --key ping
"。如果失败,使用redis-cli
从其中一个集群节点到数据库检查连接性。如果失败,则问题在于网络。请咨询您的系统管理员。 - 验证客户端使用数据库名称而不是 IP
- 验证数据库已配置逐出策略和键过期,以避免 OOM
- 验证对数据库的访问未被客户端或 Redis 端的防火墙阻止:
iptables -L, ufw status, firewall-cmd –list-all
- 更多详细信息可在有关测试客户端连接的相关文档中找到。
故障排查延迟问题
服务器端
- 确保数据库中使用的内存未达到配置的数据库最大内存限制。更多详细信息可在有关数据库内存限制的文档中找到。
- 尝试将延迟时间与以下指标的任何激增相关联。
- 连接数
- 已用内存
- 被逐出的键,已过期的键
- 检查 "
slowlog get <number of entries to display>
" 的输出,查找诸如KEYS
或HGETALL
等慢命令。使用替代命令:SCAN
、SSCAN
、HSCAN
、ZSCAN
- 内存占用较大的键可能会导致延迟。为了识别这些键,可以将“
slowlog get
”输出中出现的键名与以下命令报告的大键进行比较:redis-cli -h <endpoint> -p <port> -a <password> --memkeys
redis-cli -h <endpoint> -p <port> -a <password> --bigkeys
- 更多诊断步骤可在以下链接中找到:https://redis.ac.cn/docs/latest/operate/oss_and_stack/management/optimization/latency/ https://redis.ac.cn/docs/latest/operate/rs/clusters/logging/redis-slow-log/
客户端
- 检查客户端主机上没有内存/CPU 压力
- 检查客户端是否未频繁打开和关闭连接,而是使用了连接池
- 检查客户端是否未错误地打开多个连接,这可能会对客户端或服务器造成压力