![JBoss7 使用 mod_proxy_balancer 进行负载平衡-会话不起作用](https://linux22.com/image/621910/JBoss7%20%E4%BD%BF%E7%94%A8%20mod_proxy_balancer%20%E8%BF%9B%E8%A1%8C%E8%B4%9F%E8%BD%BD%E5%B9%B3%E8%A1%A1-%E4%BC%9A%E8%AF%9D%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
我正在尝试设置 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