Я действительно понятия не имею...
У меня есть веб-приложение 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)