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
”并验证没有任务出现
连接故障排除
- 检查 Redis 端点是否可以在客户端计算机上解析“
dig <endpoint>
”。如果解析失败,请继续检查 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
”如果失败,请检查从集群节点之一到数据库的连接如果失败,则问题在于网络。请咨询您的系统管理员。 - 验证客户端使用数据库名称而不是 IP
- 验证数据库是否配置了逐出策略和键过期以避免 OOM
- 验证客户端或 Redis 端的防火墙未阻止对数据库的访问
iptables -L, ufw status, firewall-cmd –list-all
- 可在 关于测试客户端连接的相关文档 中找到其他详细信息。
延迟故障排除
服务器端
- 确保数据库中使用的内存未达到配置的数据库最大内存限制。可在 关于数据库内存限制 的文档中找到更多详细信息。
- 尝试将延迟时间与以下指标的任何激增相关联。
- 连接数
- 已用内存
- 逐出的键、过期的键
- 检查“
slowlog get <要显示的条目数>
”的输出,以查找诸如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 压力
- 检查客户端不会频繁打开和关闭连接,而会使用连接池
- 检查客户端不会错误地打开多个连接,这可能会给客户端或服务器带来压力