redis-server.service: не удалось с результатом "тайм-аут". - Больше ошибок, перечисленных внутри

Обновление: это, кажется, в основном исправлено. Я не уверен на 100%, что я сделал, но он работает, и мои сайты загружаются с ним должным образом. Тем не менее, я все еще имею ошибку #1 о том, что PID не читается.

Я надеюсь, что смогу получить некоторую помощь в выяснении, почему Redis-Server не будет работать для меня. У меня это было полностью запущено около 3 дней назад, но когда я попытался начать удаление других программ кэширования из моей установки WordPress. Я как-то сломал Redis. Затем я перечислил ошибки, а затем попытался их исправить. Пожалуйста, дайте мне знать, что вы думаете, и как я могу попытаться исправить это в будущем.

Я установил Redis-Server изначально из источника с redis.io, но как только он сломался, я попытался переустановить из источника, а также попытался переустановить из 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
Ubuntu 16.04
Redis-Server 4.0.2 

Для установки Redis-Server я использовал следующий учебник: Установите Redis Object Cache для WordPress PHP 7 в 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 max файловых дескрипторов. Сервер не может установить максимальное количество открытых файлов на 20032 из-за ошибки ОС: операция не разрешена. Текущий максимальный размер открытых файлов составляет 4096. Максклиенты были уменьшены до 4064, чтобы компенсировать низкий уровень ulimit. Если вам нужны более высокие maxclients, увеличьте 'ulimit -n'.

    • Похоже, на это повлияла часть "MaxClients" файла redis.conf... Я попытался изменить параметр MaxClients, закомментировав его и установив значение по умолчанию 10000 ... Я также изменил это значение на 20000 в redis.conf и число увеличивается до 20032 ... поэтому всегда кажется, что ему нужно на 32 файла больше, чем мне разрешено, или что-то в этом роде.
    • Я изменил файл /etc/systemd/system/redis-server.service, добавив в него "LimitNOFILE=64000" ... это не имеет значения. Я перезапустил сервер - без изменений.
    • Я изменил /etc/default/redis-server и раскомментировал "ULIMIT=65536" ... перезапустил, опять без изменений.
  3. ВНИМАНИЕ: в вашем ядре включена поддержка прозрачных огромных страниц (THP). Это создаст проблемы с задержкой и использованием памяти в Redis. Чтобы устранить эту проблему, выполните команду 'echo never> / sys / kernel / mm / transparent_hugepage / enabled' от имени пользователя root и добавьте ее в свой файл /etc/rc.local, чтобы сохранить настройку после перезагрузки. Redis должен быть перезапущен после отключения THP

    • Это было исправлено, как только я дал следующую команду:
      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', чтобы это вступило в силу.

    • Я выполнил следующую команду, чтобы попытаться бороться с этой ошибкой... кажется, что она появляется иногда:

      echo "vm.overcommit_memory=1" >> /etc/sysctl.conf;  sysctl -p 
      

    Эта ошибка случается время от времени

  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    
      

    Чтобы убедиться, что они были добавлены... sysctl -p

Ниже приведен весь мой файл /etc/systemd/system/redis-server.service.

 [Единица измерения]  
Описание =Redis Datastore Server  
После того, как =network.target  

[Обслуживание]  
Тип = разветвление  
PIDFile=/ вар / бег / Redis / redis.pid  
Пользователь = Redis  
Группа = WWW-данные  
LimitNOFILE=64000  
PermissionsStartOnly= верно  

\# Создание и настройка разрешений для каталога 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 shutdown  
Restart= всегда  

[Установить]  
WantedBy=multi-user.target 

Я в своем уме. Я переключился на Redis-Server после того, как не смог заставить работать memcached. Единственный раз, когда memcached сработал, я опробовал его на своих сайтах WordPress, и это было СУПЕР быстро. Я был очень впечатлен и очень доволен выступлением. Однако, очевидно, я не могу заставить его работать, поэтому я прошу помощи.

3 ответа

Может быть маловероятно, так как вы не упоминаете другие изменения, я все равно выложу.

Возможно, это проблема 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

Redis пытался использовать IPv6 (::1:6379:). Я отключил IPv6 в этой системе (по причинам), однако конфигурация redis-cache по умолчанию включает как IPv4, так и v6. Если вы видите ошибку "Не удается назначить" в этом журнале, взгляните на /etc/redis/redis.conf. Конфигурация "из коробки" включает IPv6 (::1):

bind 127.0.0.1 ::1

Поэтому я удалил это, изменив его на:

bind 127.0.0.1

Redis начал сразу после этого.

Надеюсь, это поможет!

Дополнение к ответу @Chris, но с другой стороны. Был сервер Ubuntu с включенным IPv6, но redis-server вместо этого пытался связать на IPv4...

11558:C 16 Mar 21:09:24.694 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
11558:C 16 Mar 21:09:24.694 # Redis version=4.0.9, bits=64, commit=00000000, modified=0, pid=11558, just started
11558:C 16 Mar 21:09:24.694 # Configuration loaded
11569:M 16 Mar 21:09:24.709 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use

Решением было изменить redis.conf с:

bind 127.0.0.1

...быть:

bind 127.0.0.1 ::1

После этого все заработало... обязательно перезагрузите сервер после любых изменений, связанных с IP.

Попробуйте это (проверено Ubuntu 18.04):

sudo sh -c 'echo "httpd soft nofile 4096" >> /etc/security/limits.conf'
sudo sh -c 'echo "httpd hard nofile 10240" >> /etc/security/limits.conf'
sudo sh -c 'echo "fs.file-max = 100000" >> /etc/sysctl.conf'
sudo sh -c 'echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf'
sudo sh -c 'echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf'
sudo apt -y install redis-server redis-tools
sudo service redis-server stop
sudo sed -i '/^bind/s/bind.*/bind 0.0.0.0/' /etc/redis/redis.conf
if [ ! -d /var/run/redis ]; then sudo mkdir -p /var/run/redis && sudo chown redis /var/run/redis; fi
sudo service redis-server start

Источник: Ntopng maravento.com

Другие вопросы по тегам