redis-server.service:失败,结果为“超时”。- 里面列出了更多错误

The*_*oob 2 redis

更新:这似乎已基本修复。我不是 100% 确定我做了什么,但它正在运行,而且我的网站也可以正确加载它。但是,我仍然遇到关于 PID 不可读的错误 #1。

我希望我能得到一些帮助来弄清楚为什么 Redis-Server 不能为我运行。大约 3 天前,我让它完全运行起来,但当我尝试开始从我的 WordPress 安装中删除其他缓存程序时。我不知何故破坏了Redis。接下来,我列出了这些错误,以及我如何尝试纠正它们。请让我知道您的想法以及我以后如何尝试解决它。

我最初从 redis.io 的源代码安装了 Redis-Server,但是一旦损坏,我最终尝试从源代码重新安装,并且还尝试从apt. 我在两种类型的安装上都遇到相同的错误。

uname -a:Linux serverName.tld 4.4.0-97-generic #120-Ubuntu SMP 九月 19 日星期二 17:28:18 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
乌班图16.04
Redis-服务器4.0.2

我使用以下教程来安装 Redis-Server:Install Redis Object Cache for WordPress PHP 7 on Ubuntu 16.04

错误:

  1. redis-server.service:启动后PID文件/var/run/redis/redis.pid不可读(还?):没有这样的文件或目录

    • 我尝试通过确保 /var/run/redis/ 已创建来纠正此问题。我还确保(在不同的时间) /var/run/redis/ 属于 redis:redis 和 redis:www-data (我的 apache2 组)。我还尝试了 777、755、775、007、770 等许多权限方案。
      在所有这些方案中,我偶尔仍然会收到错误。
    • 我还手动创建了 /var/run/redis/redis.pid 文件,其权限类型与上面提到的相同。
    • 最后,根据网站上的一些建议,我还将 PIDFile 更改为 redis-server.pid ...
    • 这些更改似乎都没有真正持续存在并且对于此错误消息始终有效。
  2. 您请求的 maxclients 为 20000,需要至少 20032 个最大文件描述符。由于操作系统错误,服务器无法将最大打开文件数设置为 20032:不允许操作。当前最大打开文件数为 4096。 maxclients 已减少至 4064 以补偿 ulimit 较低的情况。如果您需要更高的最大客户端数,请增加“ulimit -n”。

    • 这似乎受到 redis.conf 文件的“MaxClients”部分的影响...我尝试通过注释来更改 MaxClients 选项,并将其设置为默认 10000 ...我也将其更改为 20000在 redis.conf 中,数字高达 20032 ...所以它似乎总是需要比我允许的文件多 32 个的文件。
    • 我已更改 /etc/systemd/system/redis-server.service 文件以包含“LimitNOFILE=64000”...这没有产生任何影响。我已经重新启动了服务器 - 没有任何变化。
    • 我已经更改了 /etc/default/redis-server 并取消注释了“ULIMIT=65536”...重新启动,再次没有任何变化。
  3. 警告您的内核中启用了透明大页 (THP) 支持。这将导致 Redis 出现延迟和内存使用问题。要解决此问题,请以 root 身份运行命令“echo never > /sys/kernel/mm/transparent_hugepage/enabled”,并将其添加到 /etc/rc.local 中,以便在重新启动后保留设置。禁用THP后必须重新启动Redis

    • 一旦我发出以下命令,这个问题就得到了纠正:
      echo never > /sys/kernel/mm/transparent_hugepage/enabled
      • 我还将上述命令添加到 /etc/rc.local 以在重新启动后保持不变。再次,这似乎已经解决了。
  4. 警告 overcommit_memory 设置为 0!在内存不足的情况下,后台保存可能会失败。要解决此问题,请将“vm.overcommit_memory = 1”添加到/etc/sysctl.conf,然后重新启动或运行命令“sysctl vm.overcommit_memory=1”以使其生效。

    这个错误每隔一段时间就会发生一次

  5. 警告:无法强制执行 TCP 积压设置 511,因为 /proc/sys/net/core/somaxconn 设置为较低值 o

    • 我通过执行命令添加了以下内容:

      echo "net.core.somaxconn=65536" >> /etc/sysctl.conf    
      echo "net.ipv4.tcp_max_syn_backlog=8192" >> /etc/sysctl.conf    
      
      Run Code Online (Sandbox Code Playgroud)

    要验证它们是否已添加... sysctl -p

下面是我的整个 /etc/systemd/system/redis-server.service 文件。

[单元]  
描述=Redis 数据存储服务器  
之后=网络.目标  

[服务]  
类型=分叉  
PIDFile=/var/run/redis/redis.pid  
用户=redis  
组=www-数据  
限制NOFILE=64000  
权限仅开始=true  

\# 为 PIDFile 目录创建并设置权限  
ExecStartPre=/bin/mkdir -p /var/run/redis  
ExecStartPre=/bin/chown redis:www-data /var/run/redis  
ExecStartPre=/bin/chmod 775 -R /var/run/redis  

\# 创建并设置日志目录的权限  
\# 这被注释掉了,因为我收到不允许该操作的错误。  
\#ExecStartPre=/bin/mkdir -p /var/log/redis  
\#ExecStartPre=/bin/chown redis -R /var/log/redis  
\#ExecStartPre=/bin/chmod 775 -R /var/log/redis  

\# 创建并设置日志文件的权限  
ExecStartPre=/bin/touch /var/log/redis/redis-server.log  
ExecStartPre=/bin/chown redis /var/log/redis/redis-server.log  
ExecStartPre=/bin/chmod 775 /var/log/redis/redis-server.log  

ExecStart=/sbin/start-stop-daemon --start --pidfile /var/run/redis/redis.pid --umask 007 --exec /usr/bin/redis-server -- /etc/redis/redis.会议  
ExecReload=/bin/kill -USR2 $MAINPID  
ExecStop=/usr/bin/redis-cli 关闭  
重新启动=始终  

[安装]  
WantedBy=多用户.target

我已经无计可施了。在经历了无法让 memcached 工作的问题后,我转向了 Redis-Server。memcached 工作的那一次,我在我的 WordPress 网站上尝试过,它非常快。我对这次表演印象非常深刻,也非常满意。但显然,我无法让它工作,这就是我寻求帮助的原因。

小智 5

可能不太可能,因为您没有提到其他更改,无论如何我都会发布。

也许这是 IPv6/IPv4 问题。如果您在任何时候禁用了 IPv6,您都会得到您所描述的结果。

查看/var/log/redis/redis-server.log。这是我在我的中发现的:

17008:C 24 Aug 07:17:45.193 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
17008:C 24 Aug 07:17:45.193 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=17008, just started
17008:C 24 Aug 07:17:45.193 # Configuration loaded
17009:M 24 Aug 07:17:45.195 # Creating Server TCP listening socket ::1:6379: 
bind: Cannot assign requested address
Run Code Online (Sandbox Code Playgroud)

Redis 尝试使用 IPv6 (::1:6379:)。我在该系统上禁用了 IPv6(出于某种原因),但是默认的 redis-cache 配置同时启用了 IPv4 和 v6。如果您在该日志中看到“无法分配”错误,请查看 /etc/redis/redis.conf。“开箱即用”配置启用 IPv6 (::1):

bind 127.0.0.1 ::1
Run Code Online (Sandbox Code Playgroud)

所以我删除了它,将其更改为:

bind 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

之后Redis 就启动了。

希望有帮助!