jboss 430集群配置文档.docx
《jboss 430集群配置文档.docx》由会员分享,可在线阅读,更多相关《jboss 430集群配置文档.docx(14页珍藏版)》请在冰豆网上搜索。
jboss430集群配置文档
jboss4.3.0集群配置文档
集群概念
集群(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有自己的负载均衡器,但效果不佳,官方文档没有介绍,
几乎没有人使用。
一般情况下,我们都是采用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集群配置。
GA实现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集群配置实例概述
下文中,将以实例来叙述Jboss集群配置。
该实例包含3个Jboss节点。
各节点被动接收负载均衡器转发的请求。
各节点间没有横向的联系。
----------------------------------Apache配置-开始-----------------------------
1.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
修改配置。
本例中,使用的监听端口是8001,请根据实际情况修改。
vi/usr/local/apache2/conf/httpd.conf
路径可能是这个:
/etc/httpd/conf/httpd.conf
将Listen80改成Listen8001
将Userdaemon和Groupdaemon改为Userapache和Groupapache
删除ServerName前的#,将该行改为ServerName127.0.0.1:
8001
添加用户和用户组
groupaddapache
useraddapache-gapache
2.apachemod_jk安装与配置
顺便说一句,找mod_jk模块费了很大精力,最后才在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。
3.
生成mod_jk.so文件
[root@]#tarzxvftomcat-connectors-1.2.18-src.tar.gz
#cdtomcat-connectors-1.2.18-src
#cdnative
#./configure--with-apxs=/usr/local/apache2/bin/apxs
#make
#makeinstall
[root@localhostnative]#cdapache-2.0/
[root@localhostapache-2.0]#ls
mod_jk.so
[root@localhostapache-2.0]#cpmod_jk.so/usr/local/apache2/moduels
[root@localhostapache-2.0]#cp../conf/workers.properties/usr/local/apache2/conf
chmod+x/usr/local/apache2/modules/mod_jk.so
4.
在/usr/local/apache2/conf/httpd.conf的末尾增加:
Includeconf/mod_jk.conf
并解注释:
ServerNamehostip:
80
5.
建立空文件/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
Allowfromall
Allowfrom127.0.0.1
6.
vi/usr/local/apache2/conf/workers.properties,增加以下内容:
#Definelistofworkersthatwillbeused
#formappingrequests
worker.list=loadbalancer,node1,node2
#DefineNode1
#modifythehostasyourhostIPorDNSname.
worker.node1.port=8009
worker.node1.host=65.32.0.197
worker.node1.type=ajp13
worker.node1.lbfactor=1
worker.node1.redirect=node2
worker.node1.cachesize=10
#DefineNode2
#modifythehostasyourhostIPorDNSname.
worker.node2.port=8009
worker.node2.host=65.32.0.198
worker.node2.type=ajp13
worker.node2.lbfactor=0
worker.node2.redirect=node1
worker.node2.cachesize=10
#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.balance_workers=node1,node2
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是负载分配权重,值越大分配的负载越多.worker.node3.redirect=node1是node3失效后
由node1接替。
7.在/etc/httpd/conf下新建文件uriworkermap.properties内容为:
/*=loadbalancer
/jmx-console=loadbalancer
/jmx-console/*=loadbalancer
/web-console=loadbalancer
/web-console/*=loadbalancer
/all*=loadbalancer
#jboss模式名称
/node*=loadbalancer
/*.gif=loadbalancer
/*.jpg=loadbalancer
/*.png=loadbalancer
/*.js=loadbalancer
/*.htm=loadbalancer
/*.html=loadbalancer
/*.jsp=loadbalancer
----------------------------------Apache配置-结束-----------------------------
----------------------------------Apache配置-细节讲述-----------------------------
1.启动Jboss集群
步骤
先启动负载均衡器apache,然后启动各jboss节点。
各jboss节点的启动顺序没有要求。
启动负载均衡器apache
在/usr/local/apache2/bin目录下执行./httpd-kstart
也可以servicehttpdstart|restart|stop|status
然后登陆:
localhost:
80查看是否启动。
集群的生命期
apache能够自动发现新启动的Jboss节点。
当第一个Jboss节点启动后,自动创建Jboss集群。
然后依次将其他节点加入到集群中。
现在访问http:
//192.168.8.246:
80,能够看到jboss的状态.说明请求已经被转发到Jboss节点。
集群启动成功。
apache能够监视集群中各节点的状况,自动从集群中去掉无法访问的节点,从而保证每个请求都被响应。
当集群的全部节点都停止工作,集群消亡。
集群的缺陷和粘着session
截止到现在,Jboss集群工作得很完美,除了session。
目前配置的Jboss集群中,各节点是被动的、相互独立的,相当于增加了节点状态检测的DNS轮询,所以session也是相互独立的。
当同一用户的2个请求被转发到不同的Jboss节点上时,会出现session信息假”丢失”的现象。
为此,Jboss提出粘着session(stickysession)概念。
使用粘着session后,来自同一IP的请求将被发送到同一个Jboss节点,
从而保证session使用的连续性。
如果应用中没有使用session,则可以使用非粘着session的jboss集群。
这样,负载分布更为合理。
设置方法是编辑负载均衡器的/usr/local/apache2/conf/workers.properties的worker.loadbalancer.sticky_session。
设置为1使用粘着session,设置为0不使用粘着session。
使用粘着session还存在一种隐患,当某个节点发生故障时,该节点的session将全部丢失。
要彻底解决这个问题,就要用到jbosssession复制。
2.Jboss集群的session复制
原理
jbosssession复制是jbosssession同步的一种实现。
原理是在各Jboss节点间建立横向联系,
每个节点都将本节点的session变化同步到其他所有节点上。
jboss的session复制与HTTP集群是相互配合、相互独立的两个系统。
session复制是节点间的横向联系,
HTTP集群是负载均衡器与节点的纵向联系。
----------------------------------jboss配置-开始-----------------------------
四、配置JBOSS4.3(在10.0.26.163和10.0.26.164)
1.安装配置:
1个jboss,163是all,164是node2,http使用8080端口,AJP使用8009;
#修改server.xml
vi$JBOSS_HOME/server/all/deploy/jboss-web.deployer/server.xml(node2同理)
#修改
#修改2.修改$JBOSSE_HOME/server/all/deploy/jboss-web.deployer/server.xml文件,将Engine修改如下(node2同理):
给它增加一个jvmRoute属性:
3.修改$JBOSS_HOME/server/all/deploy/jboss-web.deployer/META-INF/jboss-service.xml,
找到false
改为true(node2同理)
4.修改$JBOSS_HOME/server/all/deploy/jboss-web.deployer/ROOT.war/WEB-INF/web.xml,
在紧跟着下面添加,可以在应用配置,此处可以不用配置。
5.修改$JBOSS_HOME/server/all/deploy/jboss-web-cluster.sar/META-INF/jboss-service.xml
找到到全部注释掉.
jbosssession复制有UDP和TCP两种方式.UDP采用多播方式,但问题比较多,所以采用TCP方式。
找到到生效.并对该部分进行以下修改:
将全部down_thread和up_thread的false都改为true.
在
在
其他参数还包括:
ClusterName是集群名称,比如partition1.
在同一局域网内,可以存在多个jboss集群,根据集群名称区分它们.所以,集群中各节点配置的集群名称必须一致,
而机器IP则没有特殊要求,只要它们能相互连通.理论上,可以在一台机器上安装多个Jboss实例,分属于不同的集群.
但这会极大地增加复杂度,是不好的配置方式.
IsolationLevel是隔离等级.
可选值包括:
SERIALIZABLE,REPEATABLE_READ,READ_COMMITTED,READ_UNCOMMITTED,和NONE。
这里的隔离级别和数据库的隔离级别有同样的含义,对于大多数WEB应用程序来讲通常设置为REPEATABLE_READ。
CacheMode是缓存模式。
由于session复制是通过缓存实现的,所以实际上是复制模式.可选值包括:
REPL_SYNC和REPL_ASYNC,
确定改变是应该同步还是异步复制。
缺省值是REPL_ASYNC.使用同步复制,确保在请求完成之前传播改变,
session同步没有滞后,但效率低。
下面要做的是基于request的cluster,也就让各个节点之间互相复制session状态。
有两种复制模式,同步与异步。
使用同步的方式,jboss会把session复制的操作和对request的响应放到一个应用事务(applicationtransaction),session复制完