JBOSS集群.docx

上传人:b****7 文档编号:9736994 上传时间:2023-02-06 格式:DOCX 页数:12 大小:58.72KB
下载 相关 举报
JBOSS集群.docx_第1页
第1页 / 共12页
JBOSS集群.docx_第2页
第2页 / 共12页
JBOSS集群.docx_第3页
第3页 / 共12页
JBOSS集群.docx_第4页
第4页 / 共12页
JBOSS集群.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

JBOSS集群.docx

《JBOSS集群.docx》由会员分享,可在线阅读,更多相关《JBOSS集群.docx(12页珍藏版)》请在冰豆网上搜索。

JBOSS集群.docx

JBOSS集群

JBOSS集群

1.前言

2006年,Jboss公司被Redhat公司收购了。

这直接导致Jboss产品结构调整,并将以前收费的JbossAS文档改为免费。

jijian91本次集群试验的最初依据就是由此得到的Jboss4.0.5集群配置文档。

但这份官方文档并不可靠,在一些关键配置上含混不清,而且夹杂了很多适用于过去版本、现已作废的Jboss集群配置内容。

这导致本次jboss集群配置试验很大程度上是依靠猜测和反复尝试完成的。

究其原因,是因为Jboss的集群特性尚处于发展之中,Jboss开发者还在不停地修改、完善、增加特性,版本间的变化很大,文档的更新速度和质量难以保证。

所以,jijian91提醒各位对官方文档要认准版本,只可参考,切忌尽信.切切.

2.集群知识

集群概念

集群(Cluster)是一组计算机节点的集合,它们作为一个整体向用户提供一组网络资源。

一个理想的集群对用户是透明的。

用户由单一入口访问集群的资源,从来不会意识到集群中的节点。

在他们看来,集群是一个系统,而非多个计算机系统。

集群还应该支持随意增加和减少集群系统的节点,而这同样不会影响到用户的访问。

集群分类

习惯上,把集群分为高可用(HighAvailability,简称HA)集群和高性能计算(HighPerfermanceComputing,简称HPC)集群两类。

HA集群的目标是提高系统的可使用性(availability),即可靠性(reliability)和可维护性(maintainability)。

请不要将集群中的可使用性(availability)与UE和交互设计中的可用性(Usability)混淆。

HA集群的核心是防止单点失效,这一般是通过失败转移来实现的,即在一个节点失效后由另一个节点接替服务。

不丢失用户状态。

HA集群的其他主要特性还包括负载均衡、session同步等。

我们使用的SQLServer数据库的双机热备和Oracle的RAC都属于HA集群。

HPC集群采用并行计算技术提供超大规模计算和存储能力,多数超级计算机都是HPC集群。

这不是我们关注的集群。

Jboss集群架构

Jboss集群是HA集群。

Jboss集群有2种架构。

一是客户端拦截器(Client-sideinterceptor)架构,一是负载均衡器(Loadbalancer)架构。

客户端拦截器架构适于用C/S结构,负载均衡器架构适用于B/S结构。

本文只叙述负载均衡器架构的Jboss集群。

 

负载均衡器架构由负载均衡器和n个集群节点组成。

每个节点是一个Jboss服务器实例。

负载均衡器是全局唯一的前置机,全部用户请求都发到负载均衡器,由其转发到各节点。

当负载均衡器发现一个节点失效后,会将请求转发到另一个节点上,从而保证服务得以延续。

负载均衡器同时负责加权静态负载均衡调度。

总之,负载均衡器的健康程度决定了集群的全局健康度,负载均衡器失败将导致集群全部失效。

这是前置机架构集群的主要潜在问题。

Jboss的负载均衡器架构集群实际是由Tomcat的HTTP集群实现的。

Jboss有自己的负载均衡器,但效果不佳,官方文档没有介绍,几乎没有人使用。

一般情况下,都是与jijian91一样采用apache+mod_jk作为负载均衡器。

下文叙述的都是基于这种架构。

mod_jk是apache的一个插件,负责apache与tomcat之间的通讯,是jboss集群(tomcat集群)的关键。

Jboss版本的选择

目前,Jboss主要有3、4、5三个版本系列。

Jboss5目前只有2个beta版,实用尚需时日。

Jboss3的最后版本是2006年3月更新的3.2.8.SP1。

随着Jboss4日益成熟和Jboss5的开发,已经停止更新1年多的Jboss3逐渐淡出历史舞台。

Jboss4最新版本依次是4.2.1.GA、4.2.0.GA和4.0.5.GA。

但官方网站提供的Jboss集群文档只更新到4.0.5GA,所以选择Jboss4.0.5GA实现Jboss集群。

Jboss各版本的安装和配置并不相同.不但Jboss3和Jboss4的配置文件完全不同,各小版本间也有细微的差别.在集群中,Jboss、apache、mod_jk之间也存在着特定版本才能配合的情况。

所以,为避免困扰,请严格按照以下版本安装软件:

JDK1.5.0.12

Jboss4.0.5GA

apache2.2.4

apachemod_jk1.2.23

注意,mod_jk有1.x和2.x两个版本系列。

mod_jk2.x已经停止开发,不能使用。

很多人凭直觉认为mod_jk2.x肯定比mod_jk1.x好,结果走了弯路。

3.Jboss集群配置实例概述

下文中,jijian91将以实例来叙述Jboss集群配置。

该实例包含3个Jboss节点。

各节点被动接收负载均衡器转发的请求。

各节点间没有横向的联系。

 

4.Jboss集群负载均衡器配置

步骤

先安装apache,然后配置mod_jk模块。

安装apache

下载apache代码包,上传到服务器。

解开代码包

tarxfvzhttpd-2.2.4.tar.gz

编译

./configure–prefix=/usr/local/apache2–enable-module=so–enable-module=setenvif–enable-module=rewrite–enable-rewrite=shared–enable-proxy=shared–with-mpm=prefork–enable-so–enable-auth-anon–enable-file-cache=shared–enable-cache=shared–enable-disk-cache=shared–enable-mem-cache=shared

makeclean

make

makeinstall

修改配置。

本例中,jijian91使用的监听端口是8080,请根据实际情况修改。

vi/usr/local/apache2/conf/httpd.conf

将Listen80改成Listen8080

将Userdaemon和Groupdaemon改为Userapache和Groupapache

删除ServerName前的#,将该行改为ServerName127.0.0.1:

8888

添加用户和用户组

groupaddapache

useraddapache–gapache

apachemod_jk配置

下载mod_jk,将其改名为mod_jk.so,拷贝到/usr/local/apache2/modules下。

顺便说一句,找mod_jk模块费了jijian91很大精力,最后才在http:

//www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/目录下找到。

我用的是mod_jk1.2.23,看到本文的时候,mod_jk应该有新版了。

但mod_jk的向下兼容做得不太好,最好先用mod_jk1.2.23调试,成功后再尝试换用新版mod_jk。

chmod+x/usr/local/apache2/modules/mod_jk.so

在/usr/local/apache2/conf/httpd.conf的末尾增加:

Includeconf/mod_jk.conf

建立空文件/usr/local/apache2/conf/uriworkermap.properties

vi/usr/local/apache2/conf/mod_jk.conf,输入以下内容:

#Loadmod_jkmodule

#Specifythefilenameofthemod_jklib

LoadModulejk_modulemodules/mod_jk.so

#Wheretofindworkers.properties

JkWorkersFileconf/workers.properties

#Wheretoputjklogs

JkLogFilelogs/mod_jk.log

#Setthejkloglevel[debug/error/info]

JkLogLevelinfo

#Selectthelogformat

JkLogStampFormat“[%a%b%d%H:

%M:

%S%Y]”

#JkOptionsindicatestosendSSKKEYSIZE

JkOptions+ForwardKeySize+ForwardURICompat-ForwardDirectories

#JkRequestLogFormat

JkRequestLogFormat“%w%V%T”

#Mountyourapplications

JkMount/application/*loadbalancer

#Youcanuseexternalfileformountpoints.

#Itwillbecheckedforupdateseach60seconds.

#Theformatofthefileis:

/url=worker

#/examples/*=loadbalancer

JkMountFileconf/uriworkermap.properties

#Addsharedmemory.

#Thisdirectiveispresentwith1.2.10and

#laterversionsofmod_jk,andisneededfor

#forloadbalancingtoworkproperly

JkShmFilelogs/jk.shm

#Addjkstatusformanagingruntimedata

JkMountstatus

Orderdeny,allow

Denyfromall

Allowfrom127.0.0.1

vi/usr/local/apache2/conf/workers.properties,增加以下内容:

#Definelistofworkersthatwillbeused

#formappingrequests

worker.list=loadbalancer,status

#DefineNode1

#modifythehostasyourhostIPorDNSname.

worker.node1.port=8009

worker.node1.host=192.168.130.95

worker.node1.type=ajp13

worker.node1.lbfactor=1

#DefineNode2

#modifythehostasyourhostIPorDNSname.

worker.node2.port=8009

worker.node2.host=192.168.130.99

worker.node2.type=ajp13

worker.node2.lbfactor=0

#DefineNode3

#modifythehostasyourhostIPorDNSname.

worker.node3.port=8009

worker.node3.host=192.168.130.112

worker.node3.type=ajp13

worker.node3.lbfactor=1

#Load-balancingbehaviour

worker.loadbalancer.type=lb

worker.loadbalancer.balance_workers=node1,node2,node3

worker.loadbalancer.sticky_session=1

#worker.list=loadbalancer

#Statusworkerformanagingloadbalancer

worker.status.type=status

说明:

worker.node1.host、worker.node2.host和worker.node3.host要改成jboss集群各机器的实际IP.

如果有更多的节点,顺序定义更多的node段,并在worker.loadbalancer.balance_workers后全部列出.

lbfactor是负载分配权重,值越大分配的负载越多.

更多配置参数详见tomcat配置说明

配置apache自动启动

ln–s/usr/local/apache2/apachectl/etc/init.d/apache

chmod777/etc/init.d/apache

ln–s/etc/init.d/apache/etc/rc3.d/S80apache

ln–s/etc/init.d/apache/etc/rc3.d/K20apache

ln–s/etc/init.d/apache/etc/rc4.d/S80apache

ln–s/etc/init.d/apache/etc/rc4.d/K20apache

ln–s/etc/init.d/apache/etc/rc5.d/S80apache

ln–s/etc/init.d/apache/etc/rc5.d/K20apache

5.Jboss集群节点配置

步骤

在集群的各节点上,先安装JDK,然后安装配置Jboss。

不用着急,跟着jijian91一步步来。

安装JDK

在下载JDK安装包,上传到服务器。

chmod+xjdk-1_5_0_12-linux-i586-rpm.bin

./jdk-1_5_0_12-linux-i586-rpm.bin

根据提示安装。

设置Java路径。

vi/etc/profile,在结尾增加:

JAVA_HOME=/usr/java/jdk1.5.0_12

CLASSPATH=.:

$JAVA_HOME/lib/dt.jar:

$JAVA_HOME/lib/tools.jar

PATH=.:

$JAVA_HOME/bin:

$PATH

exportJAVA_HOMECLASSPATHPATH

用JDK代替RedhatLinuxAS4预装的gcj:

cd/usr/bin

ln-s-f/usr/java/jdk1.5.0_12/bin/java

ln-s-f/usr/java/jdk1.5.0_12/bin/javac

执行java–version,显示以下信息表示jdk正确安装:

javaversion“1.5.0_12″

Java(TM)2RuntimeEnvironment,StandardEdition(build1.5.0_12-b04)

JavaHotSpot(TM)ClientVM(build1.5.0_12-b04,mixedmode,sharing)

安装Jboss

下载jboss-4.0.5.GA和jems-installer,并上传到服务器。

完整安装Jboss4.0.3sp1到4.0.5.GA各版本,必须使用jems-installer和JDK1.5。

Jboss可以采用图形方式和命令行方式安装。

图形方式安装方便,但要求服务器安装Xwindows,且在服务器上操作或使用支持xwindows的远程终端(jijian91推荐用xmanager).

图形方式

在xwindows的终端窗口下,执行java–jarjems-installer-1.2.0.GA.jar,出现Jboss安装图形界面。

选择“中文”。

下一步。

同意协议。

安装路径设置为/usr/local/jboss,下一步。

选择”all”,下一步。

选择”advance”,把Name由default改为all.其余直接按下一步。

输入Admin密码,下一步。

等待安装结束,完成。

命令行方式

java-jarjems-installer-1.2.0.GA.jar-installGroupallinstallpath=/usr/local/jboss

mv/usr/local/jboss/server/default/usr/local/jboss/server/all

配置Jboss

修改配置。

本例中,提供服务的监听端口是8888,请根据实际情况修改。

vi/usr/local/jboss/server/all/deploy/jbossweb-tomcat55.sar/server.xml

找到找到

vi/usr/local/jboss/server/all/deploy/jbossweb-tomcat55.sar/META-INF/jboss-service.xml

找到UseJK,改为true.

配置jboss自动启动

cp/usr/local/jboss/jboss_init_redhat.sh/etc/init.d/jboss

chmod777/etc/init.d/jboss

ln–s/etc/init.d/jboss/etc/rc3.d/S80jboss

ln–s/etc/init.d/jboss/etc/rc3.d/K20jboss

ln–s/etc/init.d/jboss/etc/rc4.d/S80jboss

ln–s/etc/init.d/jboss/etc/rc4.d/K20jboss

ln–s/etc/init.d/jboss/etc/rc5.d/S80jboss

ln–s/etc/init.d/jboss/etc/rc5.d/K20jboss

vi/etc/init.d/jboss

将JBOSS_HOME一行改为JBOSS_HOME=${JBOSS_HOME:

-”/usr/local/jboss”}

将JBOSS_USER一行改为JBOSS_USER=${JBOSS_USER:

-”root”}

将JAVAPTH一行改为JAVAPTH=${JAVAPTH:

-”/usr/java/jdk1.5.0_12″}

将JBOSS_CONF一行改为JBOSS_CONF=${JBOSS_CONF:

-”all”}

将JBOSSSH一行改为JBOSSSH=${JBOSSSH:

-”$JBOSS_HOME/bin/run.sh-c$JBOSS_CONF”}

将eval$JBOSS_CMD_START>${JBOSS_CONSOLE}2>&1&改为eval$JBOSS_CMD_START>${JBOSS_CONSOLE}&

将$SUBIT“$JBOSS_CMD_START>${JBOSS_CONSOLE}2>&1&”改为$SUBIT“$JBOSS_CMD_START>${JBOSS_CONSOLE}&”

6.启动Jboss集群

步骤

先启动负载均衡器apache,然后启动各jboss节点。

各jboss节点的启动顺序没有要求。

启动负载均衡器apache

在/usr/local/apache2/bin目录下执行./httpd–kstart

在/usr/local/apache2/logs/mod_jk.log中,看到apache初始化mod_jk的日志:

[WedAug0110:

36:

112007][6636:

63168][info]init_jk:

:

mod_jk.c(2743):

mod_jk/1.2.23initialized

[WedAug0110:

36:

112007][6637:

63168][info]init_jk:

:

mod_jk.c(2743):

mod_jk/1.2.23initialized

后面如有错误信息,是因为集群中的节点尚未启动,暂时忽略。

用netstat检查8080监听端口存在,apache启动成功.

启动Jboss节点

在集群各机器的/usr/local/jboss/bin,分别执行/run.sh–call1>12>2&

用netstat检查8888端口监听存在.

用浏览器访问各节点的8888端口,能够看到jboss的状态.

Jboss启动成功.

集群的生命期

apache能够自动发现新启动的Jboss节点。

当第一个Jboss节点启动后,自动创建Jboss集群。

然后依次将其他节点加入到集群中。

现在访问http:

//192.168.8.246:

8888,能够看到jboss的状态.说明请求已经被转发到Jboss节点。

集群启动成功。

apache能够监视集群中各节点的状况,自动从集群中去掉无法访问的节点,从而保证每个请求都被响应。

当集群的全部节点都停止工作,集群消亡。

集群的缺陷和粘着session

截止到现在,Jboss集群工作得很完美,除了session。

目前配置的Jboss集群中,各节点是被动的、相互独立的,相当于增加了节点状态检测的DNS轮询,所以session也是相互独立的。

当同一用户的2个请求被转发到不同的Jboss节点上时,会出现session信息假”丢失”的现象。

为此,Jboss提出粘着session(stickysession)概念。

使用粘着session后,来自同一IP的请求将被发送到同一个Jboss节点,从而保证session使用的连续性。

如果应用中没有使用session,则可以使用非粘着session的jboss集群。

这样,负载分布更为合理。

(jijian91的话:

也更简单。

设置方法是编辑负载均衡器的/usr/local/apache2/conf/workers.properties的worker.loadbalancer.sticky_session。

设置为1使用粘着session,设置为0不使用粘着session。

使用粘着session还存在一种隐患,当某个节点发生故障时,该节点的session将全部丢失。

要彻底解决这个问题,就要用到jbosssession复制。

7.Jboss集群的session复制

原理

jbosssession复制是jbosssession同步的一种实现。

原理是在各Jboss节点间建立横向联系,每个节点都将本节点的session变化同步到其他所有节点上。

jboss的session复制与HTTP集群是相互配合、相互独立的两个系统。

session复制是节点间的横向联系,HTTP集群是负载均衡器与节点的纵向联系。

配置Jboss节点

vi/usr/local/jboss/server/all/deploy/tc5-cluster

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1