Назад | Перейти на главную страницу

Балансировка нагрузки Apache, когда идентификатор сеанса находится в URL-адресе

Я действительно понятия не имею...

У меня есть веб-приложение java, которое хранит идентификатор сеанса в URL-адресе, а не использует файлы cookie. Я хочу запустить приложение на 2 серверах tomcat и подключить их к серверу Apache для балансировки нагрузки.


            __ tomcat1
Apache ----/
           \__ tomcat2

Установив jvmRoute к tomcat1в Tomcat server.xml файл, URL станет http://url;jsessionid=id.tomcat1. Таким образом, можно добиться закрепления сеанса, просмотрев URL-адрес и направив его на соответствующий сервер.

я знаю это mod_proxy и mod_jk и выполняют балансировку нагрузки, но их липкий сеанс работает только тогда, когда идентификатор сеанса хранится в файлах cookie. В моем случае идентификатор сеанса закодирован в URL-адресе. Как мне сделать балансировку нагрузки?

Возможно, у вас неправильная конфигурация. В документации не указывается липкая сессия, работают только куки.

stickysession - имя липкой сессии балансировщика. Значение обычно устанавливается на что-то вроде JSESSIONID или PHPSESSIONID, и это зависит от серверного приложения, поддерживающего сеансы. Если сервер внутреннего приложения использует другое имя для файлов cookie и идентификатор в кодировке URL (например, контейнеры сервлетов), используйте | чтобы разделить их. Первая часть предназначена для cookie, вторая - для пути.

Таким образом, вы можете указать идентификатор сеанса, как показано ниже.

ProxyPass / balancer://mycluster/ stickysession=|jsessionid

Надеюсь это поможет.

Для создания стикера нам нужно добавить следующую строку в вашу конфигурацию (mod_proxy)

Header add Set-Cookie "BALANCEID=hej.%{BALANCER_WORKER_ROUTE}e; path=/;" env=BALANCER_ROUTE_CHANGED

Затем укажите название маршрута в конфиге

<Proxy balancer://mycluster>
    BalancerMember http://tomcat sever1.ip:8080  route=AcZxv
    BalancerMember http://tomcat server2.ip:8080 route=AcXxv
    lbmethod=byrequests stickysession=BALANCEID
</Proxy>

И добавьте эти имена маршрутов в tcserver.node в catalina.properties серверов tomcat

tcserver.node=AcZxv (tomcat 1st server)
tcserver.node=AcXxv (tomcat 2nd server)