JBoss 7 负载均衡器 session 复制

标签 jboss jboss7.x load-balancing high-availability mod-jk

我有 3 台服务器:

  • 2 个 Jboss 7.1.1 服务器
  • 1 个 Apache 服务器

I am using mod_jk

我的配置遵循以下结构:

enter image description here

在我的网络应用程序中,我有一个 session 计数器。

客户端1向Web Server(我的意思是负载均衡服务器)请求,Web Server选择第一个JBoss AS。

这次是 Counter++(示例:Counter = 5)。

之后,我关闭了第一个 JBoss AS。

然后,客户端继续向Web Server发送请求,第一个JBoss AS出现故障,因此Web Server将选择第二个JBoss AS。

这次计数器再次启动(Counter = 0)

所以。我想在每个 JBoss AS 中保留 session 计数器。

我的意思是,这一次,第一个 JBoss AS 宕机后,Counter 应该为 6。

How can I do?

引用下面的配置。

#/etc/apache2/workers.properties
##### Balancer ######
#worker.jboss.type=lb
#worker.jboss.balance_workers=jboss1,jboss2
#worker.jkstatus.type=status
worker.list=jboss,jk-status

##### JBOSS Machine 1 #####
worker.jboss1.type=ajp13
worker.jboss1.host=192.168.20.131
worker.jboss1.port=8009
worker.jboss1.lbfactor=1


##### JBOSS Machine 2 #####
worker.jboss2.type=ajp13
worker.jboss2.host=192.168.20.130
worker.jboss2.port=8009
worker.jboss2.lbfactor=1


##### LOAD Balancing ######
worker.jboss.type=lb
worker.jboss.balance_workers=jboss1,jboss2
worker.jboss.sticky_session=true ## I used to sticky session
worker.jk-status.type=status

我的 JBoss Web 应用程序:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/</context-root>
    <replication-config>  
        <replication-trigger>SET_AND_GET</replication-trigger>  
        <replication-granularity>SESSION</replication-granularity>  
    </replication-config>
</jboss-web>

我的网络配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>HelloWorld</display-name>
    <distributable/>
</web-app>

我的Standalone.xml

<system-properties>
    <property name="jvmRoute" value="jboss1"/>
    <property name="useJK" value="true"/>
</system-properties>

AJP 连接器

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="jboss1" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <connector name="ajp" protocol="AJP/1.3" scheme="ajp" socket-binding="ajp" />
    <virtual-server name="default-host" enable-welcome-root="false">
       <alias name="localhost"/>
       <alias name="example.com"/>
    </virtual-server>
</subsystem>

最佳答案

要启用 session 复制,您需要在集群中配置 Jboss: https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto

并且很可能切换到 mod_cluster 而不是 mod_jk,以使用集群的全部功能: https://docs.jboss.org/author/display/AS71/AS7+Cluster+Howto#AS7ClusterHowto-ClusterConfiguration

如果您决定尝试,我建议您阅读关于 http://blog.akquinet.de/ 的一系列文章。第一个链接: http://blog.akquinet.de/2012/06/21/clustering-in-jboss-as7eap-6/

关于JBoss 7 负载均衡器 session 复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33115926/

相关文章:

java - 启动 JBOSS 5.0.0 GA java.lang.IllegalArgumentException 时出错

kubernetes - 服务外部 ip 待定 kubernetes

java - Jboss EAP 6.1 上的 HornetQ 持久性

hash - 使用 url_param 值的 HAProxy 平衡器?

ssl - 如何使用 nginx 从 http 负载均衡器迁移到 https 负载均衡器

java - 在 Wildfly 中使用多个数据源

jboss - 如何自动测试 JBoss 部署?

java - 如何将 jdbc-realm 配置为 jBoss jbpm

java - 注入(inject) HttpServletRequest

java - JBoss:在 JBoss EAP 6 中将值绑定(bind)到 JNDI 类似于 JNDIBindingServiceMgr