httpd ProxyPass с липкими сеансами и DNS RR

Я использую apache httpd с ProxyPass и DNS RR и липкие сеансы Java для Tomcat.

Это не работает.

Моя конфигурация apache:

ProxyPass "/" "balancer://mycluster/" stickysession=JSESSIONID|jsessionid scolonpathdelim=On

<Proxy balancer://mycluster>
    BalancerMember http://stest:8080/
</Proxy>

<Location "/balancer-manager">
    SetHandler balancer-manager
    Require host localhost
</Location>

Когда я выполняю nslookup stest на хосте httpd, у меня есть 5 хостов, которые возвращаются:

root@sproxy:/app# nslookup stest
Server:     127.0.0.11
Address:    127.0.0.11#53

Non-authoritative answer:
Name:   stest
Address: 10.0.0.7
Name:   stest
Address: 10.0.0.6
Name:   stest
Address: 10.0.0.8
Name:   stest
Address: 10.0.0.2
Name:   stest
Address: 10.0.0.5

Таким образом, мой httpd-сервер должен маршрутизировать на один из этих IP-адресов. адресов, пока не будет установлен файл cookie JSESSIONID , а затем он должен быть закреплен за этим IP-адресом.

Проблема в том, что это не работает. Когда я это сделаю:

пока верно; сделать curl -b /tmp/cj.txt -c /tmp/cj.txt -w '\ n' localhost / test-session-servlet / json; done

Я получаю вывод своего сервлета, который включает обнаруженный мной узел Tomcat и идентификатор сеанса.

Я ожидал, что это коснется только одного сервера, поскольку файл cookie устанавливается в /tmp/cj.txt и передается в каждый запрос. Я получаю тот же результат с помощью приведенной выше команды, что и с:

while true; сделать curl -w '\ n' localhost / test-session-servlet / json; done

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

По сути, обе команды curl отправляются разным серверов, как если бы липкие сеансы не были включены должным образом, но первые не должны этого делать.

Что я здесь делаю не так?

0
задан 2 February 2018 в 20:28
1 ответ

Tomcat и httpd работают, как задумано. Проблема в том, что созданная вами архитектура никогда не будет работать. Вам необходимо установить и согласовать маршрут в httpd.conf и jvmRoute в server.xml .

Один из возможных вариантов Решение состоит в том, чтобы явно определить каждый из лучших хостов в вашем файле httpd.conf. Примерно так:

<Proxy balancer://mycluster>
  BalancerMember http://10.0.0.2:8080/ route=tc01
  BalancerMember http://10.0.0.5:8080/ route=tc02
  BalancerMember http://10.0.0.6:8080/ route=tc03
  BalancerMember http://10.0.0.7:8080/ route=tc04
  BalancerMember http://10.0.0.8:8080/ route=tc05
</Proxy>

Вам также необходимо установить jvmRoute в элементе в server.xml каждого экземпляра Tomcat и обеспечить что это соответствует маршруту, определенному выше.

1
ответ дан 4 December 2019 в 16:02

Теги

Похожие вопросы