- 浏览: 776045 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
Fanatic357:
同问,请问这个 曲线 是用什么工具 监测得到的?
RocketMQ性能压测分析 -
sunshine_love:
8核 16G, 单master TPS 4w+,2m-2s- ...
RocketMQ性能压测分析 -
assertmyself:
很好,,获益良多!
jstack和线程dump分析 -
zhaoxiaoxiao:
非常赞,帮助理解了问题。今天也是遇到了这样的问题
hessian序列化bug -
wjg_java:
打不开 宕机了
博客停止更新
概述
集群允许一个应用同时运行在多个并发的服务器。负载分布在不同的服务器,即使有个别服务器崩溃,应用程序还可以通过别的服务器节点访问。集群是企业级应用的关键技术,可以通过简单地增加节点来提升性能。
JBoss支持集群,启动一个JBoss集群的最简单的方式是,使用run -c all命令在局域网内启动多个JBoss实例。这些服务器实例,都使用all配置集,自动地构建一个集群。
1.1 定义
一个集群是由一系列节点组成。在一个JBoss集群中,一个节点是一个JBoss服务器实例,要构建一个集群,必须将几个JBoss服务器实例组合在一起。在一个局域网可能有多个集群,为了区分他们,每个集群必须有唯一的名称。
下图构建一个网络,包含三个集群。节点可以在任何时候添加到集群或者从集群中
注意:
一个JBoss服务器实例可以同时在多个集群,但是不推荐这样做,因为会增加管理复杂性。
JBoss服务器实例通过deploy/cluster-service.xml 文件中的ClusterPartition MBean指定属于哪一个集群。所有有同样的ClusterPartition MBean配置的节点属性同一个集群。因此,如果想在同一个局域网构建两个集群,只需要创建两个不同的ClusterPartition配置即可。如果某一个节点启动时,集群还不存在,会创建这个集群,同时当属于一个集群的所有节点移除时,集群也会被移除。
下面的示例是JBoss发布包的缺省定义,通过使用此缺省集群设置启动服务器,将可以构建一个缺省集群名称为DefaultPartition的集群。
- <mbean code="org.jboss.ha.framework.server.ClusterPartition"
- name="jboss:service=DefaultPartition">
- >
- <attribute name="PartitionName">
- ${jboss.partition.name:DefaultPartition}
- attribute>
- >
- <attribute name="NodeAddress">${jboss.bind.address}attribute>
- >
- <attribute name="DeadlockDetection">Falseattribute>
- Increase for large states -->
- <attribute name="StateTransferTimeout">30000attribute>
- >
- <attribute name="PartitionConfig">
- ... ...
- attribute>
- mbean>
这里省略了详细的JGroups协议配置,JGoups处理底层的节点之间的点对点通信,稍后将讨论其具体配置。ClusterPartition MBean可配置的属性包括:
-
PartitionName 缺省值是DefaultPartition,可选属性,用来指定集群的名称。
-
NodeAddress 设置节点的IP地址。
-
DeadlockDetection 缺省值为false,设置JGroups是否基于每个请求都运行消息死锁检测算法。
-
StateTransferTimeout 缺省值是30000,设置集群之间的状态复制的超时值。
-
PartitionConfig 指定JGourp配置选项。
一个集群包含的所有节点,必须有同样的 PartitionName 和 ParitionConfig 元素。改变某些节点的这两个元素将导致集群分离,通过改变ParitionConfig 是更容易一些。
可以通过集群中的任何一个节点的JMX控制台查看当前集群信息(比如:http://hostname:8080/jmx-console),然后点击 jboss:service=DefaultPartition MBean,将可以看到当前集群的所有节点的IP地址列表。
注意
A cluster (partition) contains a set of nodes that work toward a same goal. Some clustering features require to sub-partition the cluster to achieve a better scalability. For example, let's imagine that we have a 10-node cluster and we want to replicate in memory the state of stateful session beans on all 10 different nodes to provide for fault-tolerant behaviour. It would mean that each node has to store a backup of the 9 other nodes. This would not scale at all (each node would need to carry the whole state cluster load). It is probably much better to have some kind of sub-partitions inside a cluster and have beans state exchanged only between nodes that are part of the same sub-partition. The future JBoss clustering implementation will support sub-partitions and it will allow the cluster administrator to determine the optimal size of a sub-partition. The sub-partition topology computation will be done dynamically by the cluster.
对于应用程序开发人员来讲,可能更关心集群的架构,JBoss支持两种类型的集群架构,一种是客户端的拦截器架构,比如代理和存根,还有一种是负载平衡器。
JBoss应用服务器提供的大多数远程服务,包括JNDI,EJB,RMI等都要求客户端获取一个存根对象。存根对象由服务器生成,实现服务接口。客户端在本地调用存根对象,这些调用自动进行网络路由,激活服务器管理的服务对象。在一个集群环境中,服务器生成的存根对象也是一个拦截器实现,知道如何在集群包含的节点中路由请求。存根对象知道如何查找合适的服务器节点,编码调用参数,解码调用结果,并返回结果给客户端。
存根拦截器包含集群的相关信息,比如,所有可用的服务器节点的IP地址,负载平衡算法,以及当某个目标节点不可用时如何处理请求。每个请求中,服务器节点将用集群的最近的改变信息更新存根拦截器。比如,一个节点从集群中移除,当每个存根拦截器连接到任何一个激活的节点时,都将更新最新的配置信息。所有基于存根的操作对于客户来讲都是透明的,客户端拦截器集群架构如下图所示:
1.2.2 负载平衡器
别的JBoss服务,特别是HTTP WEB服务,不要求客户端下载任何东西。客户直接通过某个通信协议发送请求并接受响应,比如HTTP协议。这种情况下,一个负载平衡器用来处理所有的请求并将这些请求派发给集群中的节点。负载平衡器通常是集群的一部分,它知道集群配置和恢复策略,客户端只需要知道负载平衡器。负载平衡器架构如下图所示:
负载平衡器架构的一个潜在的问题是负载平衡器是所有请求的唯一入口,必须保证高的可用性。
1.2.3 负载平衡策略
客户拦截器架构和负载平衡器架构都使用负载平衡策略确定由哪一个服务器节点发送一个新的请求。下面描述JBoss AS的负载平衡策略。
1.2.3.1 JBoss AS 3.0.x
JBoss 3.0.x 中有如下两个负载平衡选项可用:
-
Round-Robin (org.jboss.ha.framework.interfaces.RoundRobin):每次调用被派发给一个新的节点,第一个节点是随机选择的。
-
First Available (org.jboss.ha.framework.interfaces.FirstAvailable)::第一个可用的节点选为主节点,服务于随后每一个调用,主节点的选择是随机的。当集群中的节点发生变化时(因为节点启动或者停止),除非当前主节点依然可用,将重新选择一个可用的节点作为主节点。每个客户端拦截器或负载平衡器独立选择自己的主节点。
1.2.3.2 JBoss AS 3.2+
JBoss 3.2+ 中增加了一个新的负载平衡选项 "First AvailableIdenticalAllProxies" (org.jboss.ha.framework.interfaces.FirstAvailableIdenticalAllProxies),此选项和 "First Available" 策略有类似的策略,唯一的区别是选择的主节点被所有的客户端拦截器共享。
JBoss 3.2 以后的版本中, 定义了"Proxy Family"术语。is defined. A Proxy Family is a set of stub interceptors that all make invocations against the same replicated target. For EJBs for example, all stubs targeting the same EJB in a given cluster belong to the same proxy family. All interceptors of a given family share the same list of target nodes. Each interceptor also has the ability to share arbitrary information with other interceptors of the same family. A use case for the proxy family is give in Section 1.3.1, “Stateless Session Bean in EJB 2.x”.
1.2.4 布署
在一个集群中布署应用程序最容易的方式是使用farming服务,就是将一个应用程序压缩文件(EAR,WAR或SAR)热布署到任一个节点的 all/farm/ 目录,应用程序会自动地复制到集群中的其他节点。如果稍后有新的节点加入,新节点启动时也会自动从集群中复制应用程序并布署到本地。在集群运行的过程中,如果从任一节点的farm目录移除应用程序,这个应用程序将首先从本地卸载,然后再从集群的其他节点中卸载。应该手动从当前没有连接到集群的服务器节点中删除应用程序。
注意
当前存在一个Bug,Farm布署服务只能在热布署压缩文件的方式中才能生效。如果你首先放一个应用程序在farm目录,然后启动服务器,这个应用程序将不会被检测并布署到集群中。
注意
在farm目录中只能使用压缩文件,而不能使用展开的目录。
Farming 服务在JBoss AS发布版的all配置集中是缺省启用的,不需要手动设置。配置文件保存在deploy/deploy.last目录,如果需要在集群配置中启用farming服务,创建farm-service.xml文件如下,并拷贝到JBoss布署目录$JBOSS_HOME/server/your_own_config/deploy,确保在配置中已经启用集群服务。
- xml version="1.0" encoding="UTF-8"?>
- <server>
- <mbean code="org.jboss.ha.framework.server.FarmMemberService"
- name="jboss:service=FarmMember,partition=DefaultPartition">
- ...
- <attribute name="PartitionName">DefaultPartitionattribute>
- <attribute name="ScanPeriod">5000attribute>
- <attribute name="URLs">farm/attribute>
- mbean>
- server>
FarmMemberService MBean 可用的属性如下:
-
PartitionName 指定集群名字,缺省值为 DefaultPartition.
-
URLs 指定布署器监控布署文件的目录,如果不存在,MBean将创建。 "." 表示配置目录(比如 $JBOSS_HOME/server/all/)。
-
ScanPeriod 指定文件夹的扫描周期,缺省值为5000。
Farming 服务是URLDeploymentScanner的扩展,用来扫描deploy目录,因此在FarmMemberService MBean中可以使用URLDeploymentScanner MBean 中定义的所有属性。
1.2.4 分布式状态复制服务
集群环境中,分布式状态管理是集群必须提供的一个关键服务。比如一个有状态的会话Bean应用程序,会话状态必须在所有节点的Bean实例中保持同步,因此不管哪个节点服务请求,客户端应该得到同样的会话状态。实体Bean应用程序中,Bean实例必须在集群中进行缓存以减轻数据库负载。目前JBoss AS中的状态复制和分布式缓存由两种方式提供: HASessionState MBean 和 JBoss Cache 框架。
-
HASessionState MBean 基于EJB2.X有状态会话Bean和JBoss3.x和4.x的HTTP负载平衡器提供会话复制和分布式缓存服务。MBean相关定义在 all/deploy/cluster-service.xml 文件中。
-
JBoss Cache 是一个分布式缓存框架,可以用在任何应用程序服务器环境,也可以独立使用,已经逐渐替换HASessionState 服务。JBoss AS 整合JBoss Cache 为HTTP会话, EJB 3.0 会话和实体Bean,Hibernate持久对象提供缓存服务。这些缓存服务都在独立的MBean中定义。
1.5 HTTP服务
HTTP会话复制用来在你的WEB客户端和集群的节点之间复制状态,那么当某一个节点崩溃时,集群中的其他节点可以恢复。要实现这个目的,必须执行两个步骤:
-
会话状态复制
-
请求负载平衡
如果使用all配置集启动JBoss,缺省会启用会话状态复制功能,只需要布署你的应用程序,会话状态就已经可以在集群中进行复制。
但是负载平衡需要额外的软件支持,作为一个常用的场景,我们将描述如何设置Apache和mod_jk。这个功能也可以通过专门的硬件或者其他软件来实现。
注意
一个负载平衡器跟踪HTTP请求,根据和请求关联的会话,决定派发请求到合适的节点。这被称作使用sticky-sessions的负载平衡器:一旦在某个节点创建了会话,随后的请求将由同一个节点进行处理。使用一个支持sticky-sessions的负载平衡器可以不用复制会话,没有会话状态复制的花销,每个请求将是被同一个节点处理。但是一旦这个节点崩溃,保存在这个节点的所有客户会话都将丢失,客户必须登录进另一个节点,重新启动一个新的会话。在某些情况,不复制HTTP会话是可以接受的,因为比较关键的状态都保存在数据库中,但是也有些情况下,丢失会话状态是无法接受的,这种情况下,会话状态复制的花销是必须承受的。
Apache 是一个可以通过插入模块扩展功能的WEB服务器,mod_jk(最新的mod_jk2)模块的主要功能就是允许从Apache分发请求到一个Servlet容器,还可以支持在多个Servlet容器中负载平衡HTTP调用(遵循sticky-sessions)。
1.5.1. 下载软件
从http://httpd.apache.org/ 下载Apache,安装是非常直白的,不需要特别的配置,推荐使用2.0.x版本,这里假定Apache安装目录为APACHE_HOME。
然后从www.apache.org/dist/jakarta/tomcat-connectors/jk/binaries/. 下载mod_jk模块,建议使用mod_jk 1.2.x版本。重命名下载的文件为mod_jk.so,拷贝到APACHE_HOME/modules/目录下。
1.5.2. 配置Apache使用mod_jk
更改APACHE_HOME/conf/httpd.conf 文件,在文件尾部添加一行:
- # Include mod_jk's specific configuration file
- Include conf/mod-jk.conf
创建文件APACHE_HOME/conf/mod-jk.conf:
java 代码
- # Load mod_jk module
发表评论
-
RocketMQ topic路由
2014-07-25 16:21 23769原创文章,转载请注明出处:http://jame ... -
dubbo服务化实施整理
2014-07-25 15:49 19701原创文章,转载请注明出处:http://jameswxx. ... -
RocketMQ性能压测分析
2014-07-18 17:20 28040原创文章,转载请注明出处:http://jameswxx. ... -
RocketMQ命令整理
2014-07-14 17:42 66082原创文章,转载请注明出处:http://jameswxx. ... -
RocketMQ的一些特性
2014-07-14 17:36 43487原创文章,转载请注明出处:http://jameswxx. ... -
metaq架构原理
2014-03-20 18:32 41065原创文章,转载请注明出处:http://jameswxx. ... -
Redis主从复制
2011-06-17 16:26 3826Redis的主从复制的配置很简洁,而且支持多 ... -
tomcat接收多字节参数为null问题分析
2010-12-26 22:25 4857前段时间,在项目中遇到一个很奇怪的问题,服务器端接收中文参数为 ... -
hadoop分布式计算demo实践
2010-09-07 16:49 4003真正的分布式计算实验需要好多台服务器,因此 ... -
apahce+tomcat集群
2008-10-09 16:00 409, 环境说明 Apache :apache_ ... -
web集群服务的负载均衡方案选择与实现
2008-10-09 15:37 3501web 应用服务器集群系统,是由一群同时运 ... -
jboss性能优化
2008-10-09 14:37 8271为了优化jboss的性能, ... -
jboss4.0.2集群指南
2008-10-09 11:40 1890一、材料准备: 1、JBoss 4.0.2 ...
相关推荐
4.0.5.GA版本是JBoss的一个稳定版本,发布于2006年,适用于那些需要可靠且成熟的Java应用程序部署的企业。 JBoss 4.0.5.GA的核心特性包括: 1. **Java EE 5支持**:JBoss 4.0.x系列是基于Java EE 5标准的,提供了...
**JBoss 4.0.5 EJB3.0与MDB (ActiveMQ)** JBoss 4.0.5是Red Hat公司推出的企业级Java应用服务器版本,它支持EJB3.0规范,这是一种用于构建分布式企业级应用程序的组件模型。EJB(Enterprise JavaBeans)是Java EE...
标题中的“jboss4.0.5-GA在使用RMI时的大坑”指的是在使用JBOSS 4.0.5 GA版本时,如果涉及到远程方法调用(Remote Method Invocation, RMI)可能会遇到的一些常见问题或陷阱。在描述中提到了一个博客链接,虽然没有...
虽然官方文档可能不够详尽,但从jBoss 4.0.5集群配置的实际案例中,我们可以学到很多实践技巧。例如,如何配置JNDI资源以实现数据源的共享,或者如何设置集群通信端口以避免冲突。实践中,经常需要通过不断试错和...
Apache2.2+JBOSS 5 集群配置主要涉及在Linux环境下构建高可用性和负载均衡的服务器集群,以提升应用服务的稳定性和处理能力。以下是详细的知识点: 1. **JBoss集群架构**: JBoss 集群可以采用两种架构:客户端...
《JBoss7集群配置方案详解》 JBoss7作为一款广泛应用的企业级Java应用服务器,其集群配置对于提高系统可用性和可扩展性至关重要。本篇主要介绍两种集群配置方案:JBoss7+Apache集群以及Solr集群,以实现高效、稳定...
### jboss集群完整介绍 #### 一、JBoss集群概览 JBoss集群是指一系列的计算机节点协同工作,为用户提供统一的网络资源服务。理想状态下,集群对外表现为一个整体,用户仅通过单一入口访问,无需知晓集群内部的具体...
apache+jboss集群参考,参考介绍集群实现办法
### Linux JBoss EAP集群搭建详解 #### 一、引言 在生产环境中,为了提高应用程序的可用性和可扩展性,通常会选择将应用部署在JBoss EAP集群中。JBoss EAP支持两种运行模式:standalone(独立运行模式)与domain...
【JBoss集群策略详解】 JBoss是一个开源的J2EE应用服务器,遵循J2EE规范,提供了包括集群在内的多种企业级功能。集群是JBoss的一大亮点,它弥补了J2EE标准未涵盖的企业级特性。本文主要关注JBoss的集群策略,特别是...
这个是转载Bromon原创的重量级:jboss 4.0.2 集群 配置
【JBoss集群技术介绍】 JBoss集群技术是企业级应用服务器解决方案的重要组成部分,它通过将多个Jboss服务器实例组合在一起,提供了高可用性和负载均衡的能力。这篇文章将深入探讨JBoss集群的基本概念、集群的分类、...
JBoss 5.1 是一个基于 Java 的应用服务器,提供了高度可扩展性和高可用性,支持集群部署。集群操作能够使多个 JBoss 实例协同工作,以提高应用程序的性能和容错能力。Apache 2.2.4 是一个常用的开源 Web 服务器,它...
【标题】:Windows环境下JBoss集群配置详解 在IT行业中,服务器集群是一种常见的高可用性和负载均衡解决方案。本文将深入探讨如何在Windows操作系统上配置JBoss应用服务器的集群环境,帮助开发者和系统管理员更好地...
### jboss集群技术介绍 #### 一、引言与概述 在现代企业级应用环境中,为了提高系统的可用性、扩展性和容错能力,通常会采用集群技术。JBoss作为一个广泛使用的开源Java应用服务器,提供了丰富的集群功能来满足...
【JBoss4.2.2集群配置指南(02)】是针对JBoss应用服务器4.2.2版本的一个深入教程,旨在帮助初学者理解和掌握如何配置JBoss以实现高可用性和性能优化的企业级集群环境。这篇指南的核心内容涵盖了以下几个关键知识点: ...
【JBoss422集群配置指南】 JBoss4.2.2是一款历史悠久的企业级Java应用服务器,它在Java EE环境中提供了全面的服务支持,包括Servlet、JSP、EJB等。集群配置是提升JBoss服务器可扩展性和高可用性的重要手段,尤其...