【发布时间】:2022-06-22 18:17:35
【问题描述】:
我尝试将 Eclipse Scout 应用程序放在代理后面,使用 HAProxy 和 Docker 以及两个 Tomcat 容器,但我遇到了一些问题。 如果只有一台服务器处于活动状态,或者两者都处于活动状态,则应用程序工作正常。但是当活动服务器关闭时,我被重定向到登录屏幕。此外,当只有一台服务器处于活动状态并启动第二台服务器时,我也会被重定向到登录并且会话丢失。
我想达到什么目标? 如果第一个 Tomcat 实例过载或活动 Tomcat 实例关闭,则将流量分配到另一个 Tomcat 实例。 部署新版本时,如果可能的话,我想:
- 关闭 Tomcat1,流量重定向到 Tomcat2
- 放置新的 .war 文件并部署它。
- 开启 Tomcat1
- 关闭 Tomcat2,流量重定向到新版本的 Tomcat1
- 放置新的 .war 并部署它
- 打开 Tomcat2。
这是我的 haproxy.cfg:
global
stats socket /var/run/api.sock user haproxy group haproxy mode 660 level admin expose-fd listeners
log stdout format raw local0 info
defaults
mode http
timeout client 10s
timeout connect 5s
timeout server 10s
timeout http-request 10s
log global
frontend stats
bind *:8404
stats enable
stats uri /
stats refresh 10s
frontend myfrontend
bind :80
default_backend webservers
backend webservers
dynamic-cookie-key MYKEY
cookie JSESSIONID prefix nocache
option prefer-last-server
stick-table type string len 36 size 1m expire 8h
stick on cookie(JSESSIONID)
server tomcat1 tomcat1:8080 cookie tomcat1 check
server tomcat2 tomcat2:8080 cookie tomcat2 check
我试过了:
- 没有 dinamic-cookie-key 的 HAProcy 配置
- 将JVMRoute放到每个tomcat实例上,并命名为tomcat1和tomcat2
- 在每个 myapp.server.war config.properties 文件中添加 scout.nodeId 配置属性,将它们命名为 tomcat1 和 tomcat2
- 将每个 tomcat 实例中 server.xml 中的 sessionCookiePath 设置为“/”路径。
每次我得到相同的结果。会话无效,重定向到 /logout。
这是我在开发者工具中查看时的会话,当 tomcat2 处于活动状态时,会话具有 tomcat2 前缀和后缀: JSESSIONID tomcat1~10AD131758FD28D179111B2261ADD9BF.tomcat1
我正在使用:
- 侦察兵 11
- Tomcat 8.5.79
- OpenJDK
- HAProxy 2.4
在切换服务器时,我可以尝试更多什么来获得活动会话?我做错了什么?
谢谢!
【问题讨论】:
标签: tomcat load-balancing tomcat8 haproxy eclipse-scout