Модуль Apache mod_proxy_hcheck
| Описание: | Динамическая проверка состояния участников балансировщика (рабочих процессов) для mod_proxy
|
|---|---|
| Статус: | Расширение |
| Идентификатор модуля: | proxy_hcheck_module |
| Исходный файл: | mod_proxy_hcheck.c |
| Совместимость: | Доступен в Apache 2.4.21 и более поздних версиях |
Краткое описание
Этот модуль обеспечивает динамическую проверку состояния участников балансировщика (рабочих процессов). Её можно включить отдельно для каждого рабочего процесса. Проверка состояния выполняется независимо от фактических запросов обратного прокси-сервера.
Этот модуль требует службы mod_watchdog.
Параметры
Механизм проверки состояния включается с помощью дополнительных параметров BalancerMember, которые настраиваются стандартным способом через ProxyPass:
Этот модуль определяет новое состояние (флаг) C для BalancerMember. Когда рабочий процесс переводится в автономный режим из-за сбоев, выявленных модулем проверки состояния, устанавливается этот флаг. Его можно просмотреть (и изменить) через balancer-manager.
| Параметр | По умолчанию | Описание | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| hcmethod | None | Динамическая проверка состояния не выполняется. Возможные значения:
|
|||||||||||||||||||||||||||||||||
| hcpasses | 1 | Количество успешных проверок состояния, необходимых для повторного включения рабочего процесса | |||||||||||||||||||||||||||||||||
| hcfails | 1 | Количество неудачных проверок состояния, необходимых для отключения рабочего процесса | |||||||||||||||||||||||||||||||||
| hcinterval | 30 | Интервал проверок состояния в секундах (например, проверка выполняется каждые 30 секунд) | |||||||||||||||||||||||||||||||||
| hcuri | Дополнительный URI, добавляемый к URL рабочего процесса для проверки состояния. | ||||||||||||||||||||||||||||||||||
| hctemplate | Имя шаблона, созданного с помощью ProxyHCTemplate, для настройки параметров проверки состояния этого рабочего процесса |
||||||||||||||||||||||||||||||||||
| hcexpr | Имя выражения, созданного с помощью ProxyHCExpr и используемого для проверки заголовков ответа при проверке состояния.Если выражение не используется, успешным результатом считаются коды состояния от 2xx до 3xx |
||||||||||||||||||||||||||||||||||
Совместимость:
OPTIONS11, HEAD11 и GET11 доступны в версии 2.4.55 и более поздних.
Примеры использования
В следующем примере показана настройка проверки состояния для различных серверов внутренней сети:
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
ProxyHCExpr gdown {%{REQUEST_STATUS} =~ /^[5]/}
ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/}
<Proxy balancer://foo>
BalancerMember http://www.example.com/ hcmethod=GET hcexpr=in_maint hcuri=/status.php
BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10
BalancerMember http://www3.example.com/ hcmethod=TCP hcinterval=5 hcpasses=2 hcfails=3
BalancerMember http://www4.example.com/
</Proxy>
ProxyPass "/" "balancer://foo"
ProxyPassReverse "/" "balancer://foo" В этом сценарии состояние http://www.example.com/ проверяется отправкой серверу запроса GET /status.php и проверкой того, что полученная страница не содержит строку Under maintenance. Если строка присутствует, для сервера фиксируется сбой проверки состояния, и он отключается. Эта динамическая проверка выполняется каждые 30 секунд — это интервал по умолчанию.
Состояние http://www2.example.com/ проверяется отправкой простого запроса HEAD каждые 10 секунд и проверкой того, что код состояния ответа равен 2xx, 3xx или 4xx. Состояние http://www3.example.com/ проверяется каждые 5 секунд простым подтверждением доступности сокета для подключения к этому серверу. Если внутренний сервер помечен как «недоступный» и успешно проходит 2 проверки состояния, он снова включается и возвращается в балансировщик нагрузки. Чтобы отключить сервер и вывести его из ротации, требуется 3 последовательных сбоя проверки состояния. Наконец, динамическая проверка состояния http://www4.example.com/ вообще не выполняется.
Директива ProxyHCExpr
| Описание: | Создаёт именованное условное выражение, определяющее состояние внутреннего сервера на основе его ответа |
|---|---|
| Синтаксис: | ProxyHCExpr name {ap_expr expression} |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_proxy_hcheck |
Директива ProxyHCExpr позволяет создать именованное условное выражение, которое проверяет заголовки ответа внутреннего сервера для определения его состояния. Затем это условие можно назначить участникам балансировщика с помощью параметра hcexpr.
ProxyHCExpr: считать успешными ответы 2xx/3xx/4xx
ProxyHCExpr ok234 {%{REQUEST_STATUS} =~ /^[234]/}
ProxyPass "/apps" "balancer://foo"
<Proxy balancer://foo>
BalancerMember http://www2.example.com/ hcmethod=HEAD hcexpr=ok234 hcinterval=10
</Proxy> При использовании метода проверки состояния (например, GET), который возвращает тело ответа, само это тело можно проверить с помощью ap_expr, используя функцию выражения hc(), уникальную для этого модуля.
В следующем примере мы отправляем внутреннему серверу запрос GET и отключаем его, если тело ответа содержит фразу Under maintenance.
ProxyHCExpr: проверка тела ответа
ProxyHCExpr in_maint {hc('body') !~ /Under maintenance/}
ProxyPass "/apps" "balancer://foo"
<Proxy balancer://foo>
BalancerMember http://www.example.com/ hcexpr=in_maint hcmethod=get hcuri=/status.php
</Proxy> ПРИМЕЧАНИЕ: Поскольку тело ответа может быть довольно большим, лучше использовать эту возможность для проверки определённых страниц состояния.
Директива ProxyHCTemplate
| Описание: | Создаёт именованный шаблон для настройки различных параметров проверки состояния |
|---|---|
| Синтаксис: | ProxyHCTemplate name parameter=setting [...] |
| Контекст: | конфигурация сервера, виртуальный хост |
| Статус: | Расширение |
| Модуль: | mod_proxy_hcheck |
Директива ProxyHCTemplate позволяет создать именованный набор (шаблон) параметров проверки состояния, который затем можно назначить участникам балансировщика с помощью параметра hctemplate.
ProxyHCTemplate
ProxyHCTemplate tcp5 hcmethod=tcp hcinterval=5 ProxyPass "/apps" "balancer://foo" <Proxy balancer://foo> BalancerMember http://www2.example.com/ hctemplate=tcp5 </Proxy>
Директива ProxyHCTPsize
| Описание: | Задаёт общий для всего сервера размер пула потоков, используемого рабочими процессами проверки состояния |
|---|---|
| Синтаксис: | ProxyHCTPsize size |
| По умолчанию: | ProxyHCTPsize 16 |
| Контекст: | конфигурация сервера |
| Статус: | Расширение |
| Модуль: | mod_proxy_hcheck |
Если Apache httpd и APR собраны с поддержкой потоков, модуль проверки состояния передаёт выполнение самих проверок пулу потоков, связанному с процессом Watchdog, что позволяет выполнять проверки параллельно. Директива ProxyHCTPsize задаёт размер этого пула потоков. Если задано значение 0, пул потоков не используется, и проверки состояния выполняются последовательно.
ProxyHCTPsize
ProxyHCTPsize 32
© 2018 The Apache Software Foundation
Licensed under the Apache License, Version 2.0.
https://httpd.apache.org/docs/2.4/en/mod/mod_proxy_hcheck.html