Общие ошибки HAProxy и как их устранить

Для работы над ошибками HAProxy существует три основные команды и стандартный лог. Как правило, при устранении неполадок HAProxy эти команды используются в указанном здесь порядке, после чего просматривается лог файл для получения конкретных диагностических данных.

Итак, в большинстве дистрибутивов Linux команды и лог, которые вы обычно будете использовать для устранения неполадок HAProxy:

  • systemctl — используется для управления сервисами Linux и взаимодействия с ними через менеджер сервисов systemd.
  • journalctl — используется для запроса и просмотра логов, созданных systemd.
  • haproxy — при устранении неполадок эта команда используется для проверки конфигурации HAProxy.
  • /var/log/haproxy.log — этот лог-файл содержит записи HAProxy с подробным описанием TCP- и HTTP-трафика, обрабатываемого сервером.

Эти команды, способы их использования и логи HAProxy, в которых можно найти дополнительную информацию об ошибках, более подробно описаны в следующих разделах данного мануала.

Команда systemctl

При устранении распространенных ошибок HAProxy с помощью менеджера systemd первым шагом является проверка состояния процессов HAProxy в вашей системе. Ниже приведена команда systemctl, которая запрашивает у systemd состояние процессов HAProxy в большинстве дистрибутивов Linux.

sudo systemctl status haproxy.service -l --no-pager

Флаг -l отображает выходные данные без сокращений. Флаг –no-pager направляет вывод непосредственно в ваш терминал, не требуя какого-либо вмешательства с вашей стороны для его просмотра. Если вы опустите флаг –no-pager, вы сможете прокручивать вывод с помощью клавиш со стрелками или клавиш pgup и pgdn. Чтобы выйти из режима просмотра, используйте клавишу q.

Вы должны получить такой вывод:

 haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2020-08-20 19:30:11 UTC; 5s ago
     Docs: man:haproxy(1)
           file:/usr/share/doc/haproxy/configuration.txt.gz
  Process: 487 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
 Main PID: 488 (haproxy)
    Tasks: 2 (limit: 2344)
. . .
Aug 19 21:31:46 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.

Ваш вывод может немного отличаться в зависимости от того, какой дистрибутив Linux вы используете. В любом случае в выводе обратите внимание на строку Active. Если ваш сервер HAProxy не определяется как active (running), как выделено в выходных данных в примере, но вы ожидаете, что он должен быть активен, это может указывать на ошибку. Обычно, если проблема есть, в выводе будет такая строка (обратите внимание на failed):

   Active: failed (Result: exit-code) since Thu 2020-08-20 19:32:26 UTC; 6s ago

Если вы обнаружили проблему с процессом или конфигурацией HAProxy, вы можете устранить ее с помощью команды journalctl.

Команда journalctl

Чтобы проверить логи systemd для HAProxy, вы можете использовать команду journalctl. Журналы systemd для HAProxy обычно сообщают о проблемах с запуском или управлением процессами HAProxy.

Эти логи ведутся отделено от логов запросов и ошибок HAProxy. journalctl отображает логи из systemd, которые описывают сам сервис HAProxy, от его запуска до завершения работы, а также любые ошибки процесса, которые могут возникнуть на этом пути.

sudo journalctl -u haproxy.service --since today --no-pager

Флаг –since today ограничивает вывод команды записями лога, начиная с 00:00:00 текущего дня. Использование этого параметра поможет сократить объем записей, которые необходимо проверять на наличие ошибок. Вы должны получить примерно следующий вывод (он также может содержать несколько дополнительных строк между строками Starting и Started в зависимости от вашего дистрибутива Linux):

Aug 20 19:37:08 d6cdd0c71489 systemd[1]: Starting HAProxy Load Balancer...
. . .
Aug 20 19:37:08 d6cdd0c71489 systemd[1]: Started HAProxy Load Balancer.

Если в работе сервиса будет обнаружена ошибка, в выводе вы увидите примерно такую строку (основное различие между дистрибутивами Linux заключается в выделенной части yourhostname):

Aug 20 19:32:25 yourhostname systemd[1]: Failed to start HAProxy Load Balancer.

Если сервер HAProxy зарегистрировал ошибки в журналах journalctl, как в предыдущем примере, то следующим шагом в устранении возможных проблем будет исследование конфигурации HAProxy с помощью инструмента командной строки haproxy.

Устранение неполадок с помощью команды haproxy

Чтобы устранить проблемы с конфигурацией HAProxy, используйте команду haproxy -c. Инструмент проанализирует файлы и обнаружит любые ошибки или отсутствующие настройки, прежде чем попытаться снова запустить сервер.

Запустите следующую команду (работает в дистрибутивах Ubuntu, Debian, CentOS и Fedora). Обязательно измените путь к конфигурационному файлу, если вы используете другое имя файла или расположение:

sudo haproxy -c -f /etc/haproxy/haproxy.cfg

Если конфигурация HAProxy не содержит ошибок, вы увидите:

Configuration file is valid

Если в вашей конфигурации HAProxy есть ошибка, например, опечатка или неправильная директива, haproxy -c обнаружит ее и попытается уведомить вас о проблеме.

Допустим, в haproxy.cfg директива bind стоит в неправильном месте. Тогда команда сообщит:

[ALERT] 232/194354 (199) : parsing [/etc/haproxy/haproxy.cfg:13] : unknown keyword 'bind' in 'global' section
[ALERT] 232/194354 (199) : Error(s) found in configuration file : /etc/haproxy/haproxy.cfg
[ALERT] 232/194354 (199) : Fatal errors found in configuration.

В этом примере мы видим, что директива bind неуместна внутри раздела конфигурации global, поэтому HAProxy генерирует ошибку unknown keyword. Сообщение об ошибке также включает номер строки (13), так что вы можете отредактировать файл и исправить или удалить неправильную строку без лишнего поиска.

Умея использовать haproxy -c, вы сможете вовремя обнаружить ошибки, например до перезагрузки HAProxy с отредактированной конфигурацией, которая может содержать опечатки.

Лог-файлы HAProxy

Логи HAProxy — очень полезный ресурс для устранения неполадок. Как правило, любая ошибка, которую вы видите в браузере или другом HTTP-клиенте, будет иметь соответствующую запись в логах HAProxy. Иногда HAProxy также выводит связанные с конфигурацией ошибки и другую отладочную информацию в свои логи.

В дистрибутивах Ubuntu и Debian пакет haproxy включает сценарии, которые настраивают вывод лога в /var/log/haproxy.log.

В CentOS, Fedora и других RedHat-подобных дистрибутивах haproxy по умолчанию не выводит данные в лог. Чтобы регистрировать выходные логи HAProxy в /var/log/haproxy.log, следуйте этому краткому руководству.

Устраняя неполадки HAProxy через лог, проверьте /var/log/haproxy.log на наличие ошибок, используя такой инструмент, как tail или less. Например, чтобы просмотреть последние две строки лога с помощью tail, выполните следующую команду:

sudo tail -n 2 /var/log/haproxy.log

Допустим, что в логе есть запись об ошибке. Она будет выглядеть примерно так, независимо от того, какой дистрибутив Linux вы используете для запуска своего сервера HAProxy:

Aug 20 19:36:21 d6cdd0c71489 haproxy[19202]: [ALERT] 258/134605 (19202) : Proxy 'app', server 'app1' [/etc/haproxy/haproxy.cfg:88] verify is enabled by default but no CA file specified. If you're running on a LAN where you're certain to trust the server's certificate, please set an explicit 'verify none' statement on the 'server' line, or use 'ssl-server-verify none' in the global section to disable server-side verifications by default.
Aug 20 19:36:22 d6cdd0c71489 haproxy[4451]: 203.0.113.1:54428 [20/Aug/2020:19:36:22.288] main app/<NOSRV> 0/-1/-1/-1/1 503 212 - - SC-- 1/1/0/0/0 0/0 "GET / HTTP/1.1"

Не забывайте, что это всего лишь пример. Если вы диагностируете ошибки на своем сервере HAProxy, скорее всего, строки в ваших логах будут содержать другую информацию. Кроме того, некоторые строки содержат ответы об успешных операциях и другие некритические диагностические записи.

Независимо от вашего дистрибутива Linux формат строк в логах HAProxy содержит все коды состояния HTTP, которые возвращаются клиентам, а также все запрашиваемые IP-адреса и состояние внутренних серверов.

Как только у вас появится представление о том, что может вызывать проблемы с сервером HAProxy, вы можете продолжить исследование своей среды и устранить проблему. Особенно полезны коды состояния HTTP и текстовое описание, так как они содержат явные и конкретные термины, которые можно использовать для сужения диапазона при поиске возможных причин проблемы.

Заключение

Процесс устранения ошибок HAProxy может включать в себя диагностику ошибок самого сервера, поиск неправильно настроенных параметров, подробное исследование правил управления доступом и многое другое. В этом кратком мануале по диагностике проблем HAProxy вы узнали, как использовать ряд утилит, помогающих сузить круг возможных причин ошибок. Обычно эти утилиты используются в одном и том же порядке, хотя вы всегда можете пропустить некоторые из них или начать непосредственно с изучения логов, если у вас есть общее представление о том, в чем может быть проблема.

Однако в общем при устранении неполадок рекомендуется соблюдать методичность и последовательность и использовать эти инструменты в описанном порядке. Начните устранение неполадок с помощью systemctl, чтобы проверить состояние сервера HAProxy. Если вам нужна дополнительная информация, изучите логи systemd для HAProxy с помощью команды journalctl. Если после проверки journalctl проблему по-прежнему не удалось обнаружить, следующим шагом будет тестирование конфигурации HAProxy с помощью haproxy -c -f /etc/haproxy/haproxy.cfg. Наконец, для углубленного устранения неполадок необходимо изучить логи HAProxy, где обычно можно найти информацию о конкретной ошибке с полезными диагностическими сообщениями и кодами.

В последующих руководствах этой серии мы подробно рассмотрим некоторые распространенные ошибки, с которыми вы можете столкнуться при использовании HAProxy.

Tags: ,

Добавить комментарий