JBoss7 使用 mod_proxy_balancer 进行负载平衡-会话不起作用

JBoss7 使用 mod_proxy_balancer 进行负载平衡-会话不起作用

我正在尝试设置 mod_proxy_balancer 以将请求路由到 2 个 jboss7 服务器。目前,我正在本地计算机上测试此设置,并在 httpd.conf 中使用以下配置:

ProxyRequests Off
<Proxy \*>
   Order deny,allow
   Deny from all
</Proxy>

ProxyPass / balancer://mycluster/ stickysession=JSESSIONID|jsessionid scolonpathdelim=On
<Proxy balancer://mycluster>
BalancerMember http://localhost:8080 route=node1
BalancerMember http://localhost:8081 route=node2    
Order allow,deny
Allow from all
</Proxy>

并且在每个 jboss 的 standalone.xml 文件中我定义了 jvmRoute 系统属性:

<system-properties>
    <property name="jvmRoute" value="node1"/>  
</system-properties>

在 http:// localhost/myapp 上可以访问应用程序,但 java-session 无法正确建立。因此身份验证无法正常工作。

有趣的是,如果我关闭一个 JBoss 实例,一切都会正常运行。

由于我已经尝试了几种设置,因此我很感谢任何进一步的建议。

答案1

我终于让配置正常工作了。

我必须在 JBoss7 配置(standalone.xml)中添加以下设置:

<system-properties>
<property name="jvmRoute" value="node1"/>
<property name="UseJK" value="true"/>
</system-properties>

和:

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" **instance-id="node1" native="false">

...

答案2

上述设置适用于独立实例,但对于域配置,您需要将“jvmRoute”添加到服务器部分下的 host.xml 中

<server name="server-one" group="server-one-group" auto-start="true">
  <system-properties>
  <property name="jvmRoute" value="server1" boot-time="true"/>
  </system-properties>
</server>

对所有节点重复相同操作

<server name="server-one" group="server-one-group" auto-start="true">
  <system-properties>
  <property name="jvmRoute" value="server2" boot-time="true"/>
  </system-properties>
</server>

如果您使用 mod_jk 在节点之间进行负载平衡,则在 Web 服务器上您需要使用上面配置的 jvmRoute 定义节点,如下所示:worker.properties 文件包含:

worker.list=oblb
worker.oblb.type=lb
worker.oblb.balance_workers=server1,server2
worker.oblb.sticky_session=true
worker.server1.reference=worker.template
worker.server1.host=Appserverhost1.example.com
worker.server1.port=8009

worker.server2.reference=worker.template
worker.server2.host=Appserverhost2.example.com
worker.server2.port=8009

worker.template.type=ajp13

答案3

请尝试这个:它对我有用另一个如何使用 mod_headers 提供具有粘性的负载平衡的示例,即使后端服务器没有设置合适的会话 cookie:

标头添加 Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED BalancerMember "http://192.168.1.50:80“ 路线=1 BalancerMember ”http://192.168.1.51:80“路由=2 ProxySet stickysession=ROUTEID ProxyPass“/测试” “balancer://mycluster” ProxyPassReverse“/测试” “balancer://mycluster”

有关更多详细信息,请参阅以下 httpd 文档:https://httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html

相关内容