Spec-Zone.ru › Apache HTTP Server

Модуль 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 Динамическая проверка состояния не выполняется. Возможные значения:
Метод Описание Примечание
None Динамическая проверка состояния не выполняется
TCP Проверяет, можно ли создать сокет для подключения к серверу внутренней сети: например, «сервер доступен?»
OPTIONS Отправляет запрос HTTP OPTIONS серверу внутренней сети через HTTP/1.0 *
HEAD Отправляет запрос HTTP HEAD серверу внутренней сети через HTTP/1.0 *
GET Отправляет запрос HTTP GET серверу внутренней сети через HTTP/1.0 *
OPTIONS11 Отправляет запрос HTTP OPTIONS серверу внутренней сети через HTTP/1.1 *
HEAD11 Отправляет запрос HTTP HEAD серверу внутренней сети через HTTP/1.1 *
GET11 Отправляет запрос HTTP GET серверу внутренней сети через HTTP/1.1 *
*: Если не используется hcexpr, HTTP-статус 2xx или 3xx считается успешным результатом проверки состояния
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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API