`

【转载】jboss负载均衡两模式配置详解

 
阅读更多

转载:http://network.51cto.com/art/201005/197798_all.htm

前面我们对Jboss的负载均衡的安装和基本知识进行了叙述,想必大家已经把程序安装好了。那么现在来介绍一下配置的具体内容。首先我们来看一下JBOSS实现负载均衡的方案。包括和其他软件的绑定使用,以及自带负载均衡模块的使用这两种方案。那么现在让我们从下文中具体了解一下。

负载均衡

Jboss的负载均衡目前有两种方案,一是使用apache的mod_jk,二是使用jboss自带的负载均衡模块。下面分别讲解这两种配置。

mod_jk的配置

(1)、请确认%apache%\modules下已经有mod_jk-1.2.25-httpd-2.2.4.so文件。

(2)、修改%apache%\conf\httpd.conf在文件末尾添加:Include conf/mod_jk2.conf

(3)、在%apache%\conf下新建文件mod_jk2.conf文件内容如下:

  1. # Load mod_jk module. Specify the filename  
  2. # of the mod_jk lib you've downloaded and  
  3. # installed in the previous section  
  4. LoadModule jk_module modules/mod_jk-1.2.25-httpd-2.2.4.so  
  5. # Where to find workers.properties  
  6. JkWorkersFile conf/workers2.properties  
  7. # Where to put jk logs  
  8. JkLogFile logs/mod_jk.log  
  9. # Set the jk log level [debug/error/info]  
  10. JkLogLevel info  
  11. # Select the log format  
  12. JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "  
  13. # JkOptions indicate to send SSL KEY SIZE,  
  14. JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories  
  15. # JkRequestLogFormat set the request format  
  16. JkRequestLogFormat "%w %V %T"  
  17. JkMount /* loadbalancer 

其中JkMount /* loadbalancer的意思是,把所有的请求都发给loadbalancer处理。可以通过修改url来控制发送某些request。

(4)、在%apache%\conf下新建文件workers2.properties其内容为:
worker.list=loadbalancer,server1,server2

  1. # Define the first node...  
  2. worker.server1.port=8009 
  3. worker.server1.host=192.168.0.1  
  4. worker.server1.type=ajp13 
  5. worker.server1.lbfactor=1  
  6. worker.server1.local_worker=1  
  7. worker.server1.cachesize=10 
  8.  
  9. # Define the first node...  
  10. worker.server2.port=8009 
  11. worker.server2.host=192.168.0.2  
  12. worker.server2.type=ajp13 
  13. worker.server2.lbfactor=1 
  14. worker.server2.local_worker=1 
  15. worker.server2.cachesize=10 
  16.  
  17. # Now we define the load-balancing behaviour  
  18. worker.loadbalancer.type=lb 
  19. worker.loadbalancer.balance_workers=server1,server2  
  20. worker.loadbalancer.sticky_session=1 

其中对于node的命名规则是worker.节点名.xxxx。所以上述文件定义了两个节点:server1和server2。8009端口是jboss默认的ajp端口,另外需要注意的是worker.server2.lbfactor参数,它是节点的负载加权,它的值越大,获得负载的机会就越大。可以根据node的硬件性能进行调整。worker.loadbalancer.sticky_session参数是指定是否使用粘性session。所有需要负载均衡的节点,都必须在worker.loadbalancer.balanced_workers参数中列举出来。请记住所有node的名称和它对应着哪台机器,后面的配置中会使用。尝试启动apache:%apache\bin\apache.exe,正常情况下没有任何提示。如果你使用的jk是2.0的,那么配置文件的写法完全不同,由于mod_jk2已经停止开发,所以apache并没有提供任何讲解,对于配置文件的编写也没有任何指导。

(5)Jboss自带均衡器的配置

将文件夹%jboss%\docs\examples\varia\loadbalancer\loadbalancer.sar拷贝到%jboss%\server\all\deploy下,并且修改loadbalancer.sar\loadbalancer.sar\META-INF\jboss-service.xml,在<host>标签中类出所有节点,在<sticky-session>标签中指定是否使用粘性session。配置完成。该均衡器的缺点是负载能力相对不高,配置参数太少,比如无法指定不同节点的负载加权,所以后面都以mod_jk为例,不再讲解jboss自带的负载均衡器的内容。负载均衡的配置基本完成,启动jboss,其中过程中会列出DefaultPatition中所有的节点:run.bat -c all。任何节点的关闭与启动都会在cluster中广播,比如加如一个新节点后,其他节点会得到以下提示:

(6)、Jboss负载均衡的session sticky配置

apache应该会以粘性session的方式分发请求。部署一个应用测试一下,你会发现粘性session没有起作用。因为我们还没有给jboss配置jvm路由( jvmRoute),apache就无法知道究竟哪些session是属于哪个节点的。我们继续往下:

修改server1机器上的jboss的配置文件:%jboss%\server\default\deploy\jboss-web.deployer\ META-INF\ jboss-service.xml

在110行有:<attribute name="UseJK">false</attribute>,将它改为true。值得注意的是在这行标签上面有一段注释,要求你在server.xml中必须有:
Engine name="jboss.web" jmvRoute="Node1" defaultHost="localhost"

请注意这里有一个气死人不偿命的小bug,jboss的官方文档把 jvmRoute写成了jmvRoute,就是v和m两个字母的颠倒让我郁闷了三天,翻遍了jboss.com和theserverside.com。都是直接拷贝的错,吐血吐到脱水啊。

下面需要修改server1上的%jboss%\server\default\deploy\jboss-web.deployer\ server.xml,在32行左右有:

<Engine name="jboss.web" defaultHost="localhost">

给它增加一个jvmRoute属性:

<Engine name="jboss.web" defaultHost="localhost" jvmRoute="server1">

请注意,jvmRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由。Cluster中的所有节点都应该做相应的配置。Jboss的配置完成了,下面需要在你的web应用中修改配置文件,让它支持集群。在WEB-INF\web.xml中加入属性:<distributable/>Ok,基于用户的cluster完成了,每个用户会绑定都某个节点上进行交互。这种绑定是如何完成的呢?原来apache把客户分发到节点后,该节点会在用户的session id后面加上此节点的路由名称,变成这个样子:

Efdfxxd98daja87daj76da2dka**,server1

有了这个标志,就能分辨该session属于哪个节点。

(7)、session replication配置

下面要做的是基于request的cluster,也就让各个节点之间互相复制session状态。有两种复制模式,同步与异步。使用同步的方式,jboss会把session复制的操作和对request的响应放到一个应用事务(application transaction),session复制完成后才去处理request。异步复制则发送session复制的消息后马上处理request,session复制则会稍有延迟。但是在多框架的web页面中,这样的集群方式会有问题。由于frame在同一时间发出多个request,会造成一些混乱,这也是采用基于用户的集群方式的原因之一。JBoss 4.0.2中采用了Jboss cache来实现session复制,实际上就是一个分布式缓存,由于session id中包含了jvm route,所以能够分辨session属于哪个节点。Session的更新类似于hibernate中的乐观锁,有了更新之后就让session的版本号增加,其他节点通过对比版本号来决定是否同步session状态。

配置session replication首先需要编辑

  1. %jboss% server\all\deploy\jbossweb-tomcat55.sar\META-INF\ jboss-service.xml,88行左右有:  
  2. <attribute name="SnapshotMode">instant</attribute> 

这就是刚才提到的复制模式,instant为立即复制,如果设为interval 那么系统会在延迟一段时间再进行复制,时间长度在<attribute name="SnapshotInterval">2000</attribute>中指定,单位是毫秒。单独配置这一个地方还不够,在%jboss% server\all\deploy\ tc5-cluster-service.xml中有:<attribute name="CacheMode">REPL_ASYNC</attribute>

这里才真正决定复制是同步的还是异步的,可以指定为REPL_ASYNC(异步)或者REPL_SYNC(同步)。

之后Jboss负载均衡的配置在这个文件下面一点,还有一个config标签,里面指定了各个节点在进行session复制的时候如何通信,有udp和tcp两种可选,如果使用udp方式,那么应该将udp的lookback属性指定为true,因为windows上有一个叫做media sense的东西会影响udp multicast。注意如果你不了解multi address的ip规则,请不要随便修改mcast_addr的值。如果采用tcp方式的话,应该指定bind_addr的值为本机ip,并且在TCPPING标签的initial_hosts属性中列出所有节点,格式是"机器名[端口号]",比如在我们的例子中,就应该这样配置tcp(以其中一个节点为例):

  1. <config> 
  2. <TCP bind_addr="172.16.0.116" start_port="7810" loopback="true"/> 
  3. <TCPPING initial_hosts="172.16.0.116[7810],172.16.32.88[7810]" port_range="3" timeout="3500" 
  4. num_initial_members="3" up_thread="true" down_thread="true"/> 
  5. <MERGE2 min_interval="5000" max_interval="10000"/> 
  6. <FD shun="true" timeout="2500" max_tries="5" up_thread="true" down_thread="true" /> 
  7. <VERIFY_SUSPECT timeout="1500" down_thread="false" up_thread="false" /> 
  8. <pbcast.NAKACK down_thread="true" up_thread="true" gc_lag="100" 
  9.  retransmit_timeout="3000"/> 
  10. <pbcast.STABLE desired_avg_gossip="20000" down_thread="false" up_thread="false" /> 
  11. <pbcast.GMS join_timeout="5000" join_retry_timeout="2000" shun="false" 
  12. print_local_addr="true" down_thread="true" up_thread="true"/> 
  13. <pbcast.STATE_TRANSFER up_thread="true" down_thread="true"/> 
  14. </config> 

JBoss的clustering版主建议尽量使用udp。不过在Sobey内部,建议使用tcp方式,经测试可能有不明物体在影响udp通信,导致Timeout异常。在%jboss%\ server\all\deploy\ cluster-service.xml中也有关于udp和tcp的配置信息,在4.0以前版本的jboss中,会以这个文件为主配置,4.0以后都以tc5-cluster-service.xml为主配置。

Jboss的配置完成了,最后需要在web应用中增加配置信息,控制session复制的粒度。在WEB-INF\jboss-web.xml中增加以下内容:

  1. <replication-config> 
  2. <replication-trigger>SET_AND_NON_PRIMITIVE_GET</replication-trigger> 
  3. <replication-granularity>SESSION</replication-granularity> 
  4. </replication-config> 

其中replication-trigger是指定哪些操作引发session的版本更新,它的取值有:

  1. SET_AND_GET    
  2. SET_AND_NON_PRIMITIVE_GET  
  3. SET 

replication-granularity是复制粒度,可以取session或attribute。如果取为attribute有可能导致复制失败,这是目前版本的jboss cache的一个bug,等待修正。

部署项目,测试,如果配置没有问题,可以在%jboss%\0server\all\log\server.log中发现类似于这样的信息:

DEBUG [org.jboss.web.tomcat.tc5.session.JBossCacheManager] check to see if needs to store and replicate session with id Im9-qpuaXppMS+xXwE3M+Q**.server1

DEBUG [org.jboss.web.tomcat.tc5.session.ClusteredSession] processSessionRepl(): session is dirty. Will increment version from: 20 and replicate.

在Jboss负载均衡中Session replication配置的成功率比较低,情况也很复杂,请仔细操作。

分享到:
评论

相关推荐

    JBOSS负载均衡配置

    ### JBOSS负载均衡配置详解 #### 一、概述 负载均衡是提高系统可用性和扩展性的关键手段之一,尤其在企业级应用环境中更是不可或缺。本文将详细介绍如何在JBOSS服务器上实现负载均衡配置,包括所需的文件、具体的...

    Apache与Jboss负载均衡教程

    ### Apache与Jboss负载均衡教程知识点详解 #### JBoss负载均衡概述 - **主题与目标**:本教程旨在深入探讨JBoss负载均衡的核心概念、配置方法及其与Apache的集成技术。主要内容涵盖JBoss的基本介绍、配置技巧、...

    JBoss负载均衡与Mysql主从备份

    本文将深入探讨JBoss应用服务器如何实现负载均衡以及MySQL数据库如何配置主从备份,旨在为读者提供一个全面的技术指南。 #### JBoss负载均衡技术 JBoss AS(Application Server)是Red Hat公司提供的一个开源应用...

    Apache+Jboss负载均衡加域名转发

    通过Apache作为前端的Web服务器,结合JBoss作为后端的应用服务器,可以实现高效且稳定的负载均衡及域名转发功能。本文将深入解析如何配置Apache 2.2与JBoss 4.2.3来实现这一目标。 ### 一、Apache与JBoss集成的基本...

    jboss4.2.3GA集群配置 Apache负载均衡

    JBoss 4.2.3GA 集群配置与Apache负载均衡详解 在IT行业中,高可用性和负载均衡是企业级应用的关键要素。JBoss 4.2.3GA是一个流行的Java应用服务器,通过配置集群可以提高服务的稳定性和性能。而Apache作为Web服务器...

    JBoss 负载均衡

    JBoss 负载均衡是企业级应用服务器JBoss(现称WildFly)在处理高并发请求时,为提升系统性能和可用性所采用的一种重要技术。通过负载均衡,可以将大量的网络请求分发到多个服务器上,避免单一服务器过载,确保服务的...

    httpd(负载均衡)+Jboss集群高可用部署配置文件

    在构建高性能、高可用性的企业级应用系统时,负载均衡、集群部署以及高可用性配置是至关重要的。这里我们将深入探讨如何使用httpd(Apache HTTP Server)作为负载均衡器,结合Jboss应用服务器进行集群部署,同时利用...

    jboss负载均衡

    文档是介绍基于apache和modjk在jboss下实现负载均衡。

    JBOSS 集群 负载均衡

    【JBOS集群负载均衡详解】 在企业级应用中,服务器的高可用性和性能优化是至关重要的。JBOS(Java EE Application Server)作为一个流行的开源应用程序服务器,提供了集群和负载均衡的功能,以实现系统的扩展性和...

    CentOS下apache负载均衡与JBoss集群配置

    在本文中,我们将讨论在CentOS操作系统环境下,如何进行Apache负载均衡与JBoss集群的配置。负载均衡和集群配置是提高网站可用性、扩展性和性能的关键技术。通过这篇文章,我们会了解到详细的配置步骤,以及它们在...

    浪潮天梭负载均衡的配置说明

    3.1 全局设置:设置主调度器的公共IP为192.168.9.240,选择负载均衡模式为“直接路由模式”。保存设置。 3.2 虚拟服务器设置:添加虚拟服务器,填写虚拟服务器名、端口(例如80)、协议(TCP/UDP)、虚拟IP地址...

    jboss配置入门,jboss的初级配置

    在本文中,我们将对jboss的基本配置进行介绍,包括其文件夹结构、配置文件、负载均衡配置等。 jboss文件夹结构 jboss的文件夹结构主要包括以下几个部分: * $JBOSS-HOME:jboss的安装目录 * $JBOSS-HOME/server:...

    apache负载均衡与JBOSS集群配置

    在Linux环境下实现Apache负载均衡和JBoss集群配置是一项涉及多个步骤的技术操作。下面将详细介绍这两个过程。 ### JDK安装与配置 1. **下载JDK**:首先需要下载1.5版本或以上的JDK安装包。根据版本不同,文件名也...

    Nginx 1.2.1 + JBOSS AS 7 负载配置及Session处理

    文章首先介绍了使用 Nginx 1.2.1 和 JBOSS AS 7 做为应用服务器的理由,然后详细介绍了使用 Nginx 1.2.1 + JBOSS AS 7(standalone 模式)实现负载均衡的配置过程。 在负载均衡方面,文章首先介绍了 JBOSS 官方文档...

    JBoss安装配置Myeclipse10图文详解

    JBoss安装配置Myeclipse10图文详解

    inux下apache负载均衡与JBoss集群配

    总结来说,配置Linux下的Apache负载均衡与JBoss集群,主要包括以下几个步骤:安装和配置JDK,安装和配置JBoss,设置Apache服务器,以及配置mod_jk模块和工作者属性。这种配置能够提高系统的稳定性和处理能力,是大型...

    jboss7集群配置方案说明书

    在该模式下,JBoss7被设置为主从服务器结构,Apache则作为负载均衡器。主从服务器的配置关键在于`host.xml`文件的改动。在主服务器上,需要将`host.xml`中的IP地址更改为服务器实际IP,确保服务可以被正确识别。从...

    Apache2.2+JBOSS 5 集群配置

    Apache2.2+JBOSS 5 集群配置主要涉及在Linux环境下构建高可用性和负载均衡的服务器集群,以提升应用服务的稳定性和处理能力。以下是详细的知识点: 1. **JBoss集群架构**: JBoss 集群可以采用两种架构:客户端...

    Linux负载均衡集群

    在这个场景中,Apache作为Web服务器,被配置为负载均衡器,而JBoss则是运行在Linux上的应用服务器,它们可以被组织成集群以实现应用的负载分发。 【Apache负载均衡】Apache通过模块mod_jk实现了对应用服务器的负载...

Global site tag (gtag.js) - Google Analytics