Ошибка “Превышено время ожидания отклика от сервера MySQL” при установке альтернативной СУБД
Симптомы
Процесс установки альтернативной СУБД не выполняется, в веб-интерфейсе панели появляется сообщение об ошибке "Превышено время ожидания отклика от сервера MySQL".
Причины
- Включен AppArmor
- Недостаток оперативной памяти
- Правила брандмауэра блокируют работу Docker
- Недоступны сервера Docker
- Используется драйвер devicemapper в Docker
Решение
Отключение AppArmor
Отключение AppArmor - одно из условий корректной установки и работы панели ispmanager.
Подключитесь к серверу по SSH с правами администратора и выполните следующие команды для отключения AppArmor:
aa-teardown
systemctl disable apparmor
Недостаток оперативной памяти
Для корректной работы одного docker-контейнера требуется не менее 1.5ГБайт доступной (available) оперативной памяти. Узнать объем доступной для использования оперативной памяти, можно с помощью следующей команды:
free -h | awk '{print $6}'
При недостатке памяти контейнер с альтернативной СУБД не сможет запуститься, а в системном логе будут присутствовать ошибки сообщения о работе "oom-killer", которые можно обнаружить с помощью команды:
grep "Out of" /var/log/syslog
- для Debian и Ubuntugrep "Out of" /var/log/messages
- для RHEL-based систем (например, CentOS и AlmaLinux)
В данном случае необходимо увеличить объем доступной оперативной памяти, увеличив общий объем оперативной памяти и/или оптимизировав потребление оперативной памяти другими приложениями.
После этого, повторите установку альтернативной СУБД.
Настройка правил брандмауэра
При установке Docker в брандмауэре операционной системы создаются специальные цепочки правил, блокировка или удаление которых может привести к нарушению работы Docker.
ОБРАТИТЕ ВНИМАНИЕ!
Рекомендации в данной главе применимы только к стандартным установкам. Если правила брандмауэра менялись вручную, предварительно потребуется анализ текущих правил.
Убедитесь, что для цепочек INPUT, OUTPUT и FORWARD установлена политика ACCEPT
с помощью команды:
iptables -S INPUT | head -1 && iptables -S OUTPUT | head -1 && iptables -S FORWARD | head -1
Далее необходимо проверить наличие правил, которые устанавливает Docker, выполнив следующую команду:
iptables -S | grep DOCKER
Вывод должен содержать следующие цепочки и правила:
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
Если какие-либо строки отсутствуют, перезапустите службу Docker следующей командой:
systemctl restart docker
Недоступность серверов Docker
Проверьте доступность серверов Docker с помощью команды:
curl -ikLv https://download.docker.com
Сервер считается доступным, если в выводе будет присутствовать значение "HTTP/2 200". В ином случае, необходимо проверить сетевые настройки на сервере и вышестоящем оборудовании, например на стороне хостинг- или интернет-провайдера.
Также проверьте, что на вашем сервере разрешается домен download.docker.com
, выполнив команду:
dig A download.docker.com +short
Корректный вывод будет содержать IP-адреса и доменные имена, например:
d2h67oheeuigaw.cloudfront.net.
3.164.240.119
3.164.240.123
Если вывод содержит ошибки, необходимо проверить настройки DNS на сервере и работу используемых DNS-серверов, что указаны в /etc/resolve.conf
.
Использование драйвера devicemapper
Драйвер "devicemaper" - это устаревший драйвер файловой системы для Docker, который более не поддерживается в актуальных версиях Docker. На текущий момент актуальный драйвер - это "overlay2". Проверить драйвер, который используется Docker, можно с помощью команды:
docker info | grep 'Storage Driver'
Быстрое решение этого вопроса отсутствует, поскольку изменения затрагивают ядро операционной системы. Наиболее подходящим решением является миграция на современную ОС.