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
  • 可在 关于测试客户端连接的相关文档 中找到其他详细信息。

延迟故障排除

服务器端

客户端

  • 检查客户端主机上是否有内存/CPU 压力
  • 检查客户端不会频繁打开和关闭连接,而会使用连接池
  • 检查客户端不会错误地打开多个连接,这可能会给客户端或服务器带来压力