Я установил балансировщик нагрузки с Apache 2.2 через mod_proxy и mod_proxy_balancer . Балансировка нагрузки работает просто отлично, но есть один случай, для которого я не могу найти какие-либо параметры конфигурации, а именно, при использовании постоянных подключений к внутренним серверам, когда один из них умирает (выключается, падает и т.д.), Существующие подключения к нему все еще пытаюсь получить к нему доступ.

Есть ли способ настроить Apache Load Balancer так, чтобы он выходил или воссоздавал соединения с мертвыми внутренними серверами? В мире LVS у Ldirector есть опция в Proc FS, которая управляет именно этим:

/proc/sys/net/ipv4/vs/expire_quiescent_template

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

Есть ли что-то подобное в мире Apache?

PS Каким образом Apache проверяет состояние внутренних серверов? Он пытается подключиться к какому-либо порту или что-то в этом роде? Было бы здорово, если бы кто-то тоже мог пролить свет на это!

Вот мой файл конфигурации виртуального хоста:

ServerAdmin admin@mysite.com Имя_сервера myapp.mysite.com

DocumentRoot /srv/www/vhosts/myapp.mysite.com

ErrorLog /var/log/apache2/myapp.mysite.com-error_log
CustomLog /var/log/apache2/myapp.mysite.com-access_log combined

HostnameLookups Off
UseCanonicalName Off
ServerSignature On
ScriptAlias /cgi-bin/ "/srv/www/vhosts/myapp.mysite.com/cgi-bin/"

<Location /balancer-manager>
    SetHandler balancer-manager
    Order Deny,Allow
    Deny from all
    Allow from all
</Location>

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from bmf.intern.netz
</Location>

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
<Proxy balancer://myapp>
    BalancerMember http://172.22.1.133:777/ loadfactor=10 route=1 connectiontimeout=200ms
    BalancerMember http://172.22.1.134:777/ loadfactor=10 route=2 connectiontimeout=200ms
    ProxySet stickysession=ROUTEID
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass /balancer-manager !
ProxyPass /server-status !
ProxyPass / balancer://myapp/ lbmethod=byrequests
ProxyPassReverse / balancer://myapp/

<Directory "/srv/www/vhosts/myapp.mysite.com/cgi-bin">
    AllowOverride None
    Options +ExecCGI -Includes
    Order allow,deny
    Allow from all
</Directory>

<IfModule mod_userdir.c>
    UserDir public_html
    Include /etc/apache2/mod_userdir.conf
</IfModule>


#
# This should be changed to whatever you set DocumentRoot to.
#
<Directory "/srv/www/vhosts/myapp.mysite.com">

    Options Indexes FollowSymLinks
    AllowOverride None

    Order allow,deny
    Allow from all

</Directory>

1 ответ1

0

Если вы переключите mod_proxy, чтобы использовать соединение ajp13, которое требует (я думаю) бэкэнда Java, вы можете достичь липкости сессии

Я думаю, что искомая опция expire присутствует в HAProxy

option redispatch no option redispatch Включить или отключить перераспределение сеанса в случае сбоя соединения. Может использоваться в разделах: по умолчанию | внешний интерфейс | слушать | бэкэнд да | нет | да | да Аргументы: нет

В режиме HTTP, если сервер, указанный в куки-файле, не работает, клиенты могут определенно придерживаться его, потому что они не могут очистить куки-файл, поэтому они больше не смогут получить доступ к сервису.

Указание параметра "redispatch" позволит прокси-серверу нарушать их
постоянство и перераспределить их на работающий сервер.

Это также позволяет повторить последнее соединение с другим сервером в случае множественных сбоев соединения. Конечно, для этого нужно, чтобы "повторные попытки" были установлены в ненулевое значение.

Эта форма является предпочтительной формой, которая заменяет ключевые слова "redispatch" и "redisp".

Если эта опция включена в разделе "по умолчанию", ее можно отключить в конкретном экземпляре, добавив перед ней ключевое слово "no".

Смотрите также: "redispatch", "retries", "force-persist"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .