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>" 的输出,查找诸如 KEYSHGETALL 等慢命令。使用替代命令:SCANSSCANHSCANZSCAN
  • 内存占用较大的键可能会导致延迟。为了识别这些键,可以将“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 压力
  • 检查客户端是否未频繁打开和关闭连接,而是使用了连接池
  • 检查客户端是否未错误地打开多个连接,这可能会对客户端或服务器造成压力