jboss集群.docx
- 文档编号:6847086
- 上传时间:2023-01-11
- 格式:DOCX
- 页数:14
- 大小:80.40KB
jboss集群.docx
《jboss集群.docx》由会员分享,可在线阅读,更多相关《jboss集群.docx(14页珍藏版)》请在冰豆网上搜索。
jboss集群
1集群概念
集群(Cluster)是一组计算机节点的集合,它们作为一个整体向用户提供一组网络资源。
一个理想的集群对用户是透明的。
用户由单一入口访问集群的资源,从来不会意识到集群中的节点。
在他们看来,集群是一个系统,而非多个计算机系统。
集群还应该支持随意增加和减少集群系统的节点,而这同样不会影响到用户的访问。
1.1集群分类
习惯上,把集群分为高可用(HighAvailability,简称HA)集群和高性能计算(HighPerfermanceComputing,简称HPC)集群两类。
1)HA集群的目标是提高系统的可使用性(availability),即可靠性(reliability)和可维护性(maintainability)。
请不要将集群中的可使用性(availability)与UE和交互设计中的可用性(Usability)混淆。
HA集群的核心是防止单点失效,这一般是通过失败转移来实现的,即在一个节点失效后由另一个节点接替服务。
不丢失用户状态。
HA集群的其他主要特性还包括负载均衡、session同步等。
我们使用的SQLServer数据库的双机热备和Oracle的RAC都属于HA集群。
2)HPC集群采用并行计算技术提供超大规模计算和存储能力,多数超级计算机都是HPC集群。
这不是我们关注的集群。
1.2Jboss集群架构
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集群)的关键。
1.2.1Jboss版本的选择
目前,Jboss主要有3、4、5三个版本系列。
1)Jboss5目前只有2个beta版,实用尚需时日。
2)Jboss3的最后版本是2006年3月更新的3.2.8.SP1。
随着Jboss4日益成熟和Jboss5的开发,已经停止更新1年多的Jboss3逐渐淡出历史舞台。
3)Jboss4最新版本依次是4.2.1.GA、4.2.0.GA和4.0.5.GA。
但官方网站提供的Jboss集群文档只更新到4.0.5GA
4)Jboss各版本的安装和配置并不相同.不但Jboss3和Jboss4的配置文件完全不同,各小版本间也有细微的差别.在集群中,Jboss、apache、mod_jk之间也存在着特定版本才能配合的情况。
1.2.2mod_jk版本的选择
注意,mod_jk有1.x和2.x两个版本系列。
mod_jk2.x已经停止开发,不能使用。
很多人凭直觉认为mod_jk2.x肯定比mod_jk1.x好,结果走了弯路。
1.3负载均衡的粒度
Jboss支持如下类型的cluster:
EJB、web、JNDI、JMS,我们主要了解webcluster。
Webcluster实际上可以划分为两个话题:
负载均衡(loadbalance)和状态同步。
它们是互相独立的,单独配置。
负载均衡的概念比较简单,重要的是负载均衡的粒度。
可以选择针对每个request的均衡,或者是针对每个用户的均衡。
选择不同的粒度,需要不同的状态同步方式。
1.3.1基于request的负载均衡
该种方式下,负载均衡器(loadbalancer)会根据各个node的状况,把每个httprequest进行分发。
使用这样的均衡策略,就必须在多个node之间复制用户的session,实时保持整个cluster的用户状态同步,这种操作被称为session复制(sessionreplication)。
Jboss的实现原理是使用拦截器(interceptor),根据用户的同步策略拦截request,做同步处理后再交给server产生响应。
该方法的优点是客户不会被绑定都具体的node,只要还有一个node存活,用户状态都不会丢失,cluster都能够继续工作。
缺点是node之间通信频繁,响应速度有影响,多并发、高频操作的情况下性能下降比较厉害。
1.3.2基于用户的负载均衡
该种方式下,当用户发出第一个request后,负载均衡器动态的把该用户分配到某个节点,并记录该节点的jvm路由,以后该用户的所有request都会被绑定这个jvm路由,用户只会与该server发生交互,这种策略被称为粘性session(sessionsticky)。
该方法的优点是响应速度快,多个节点之间无须通信。
缺点也很明显,某个node死掉以后,它负责的所有用户都会丢失session。
粘性的session依赖JVM来实现,只要session开始工作,那么负载均衡将永远把相同的session存放于同一个机器上,举个例子来说,有一个ID为aaaXXX的session永远放在A机器的JVM-A上,而bbbXXX的session用于放在B机器的JVM-B上。
使用这种技术的是比较可靠的,如果A机器宕机,则可以从B机器上取得我们需要的session,而使用者并无从查觉,另外使用粘性session是高效率的,只有session发生变更时才需要重写到服务器。
每个用户会绑定都某个节点上进行交互。
这种绑定是如何完成的呢?
原来apache把客户分发到节点后,该节点会在用户的session id后面加上此节点的路由名称,变成这个样子:
Efdfxxd98daja87daj76da2dka**,server1有了这个标志,就能分辨该session属于哪个节点。
2软件下载
2.1下载、安装Apache2.2.17
地址:
http:
//httpd.apache.org/download.cgi
下载的文件:
httpd-2.2.17-win32-x86-no_ssl.msi
下载之后直接安装,步骤很简单,下一步即可。
验证Apache安装成功,可以浏览:
http:
//localhost,看到下面的“Itworks”页面就算成功
2.2下载mod_jk-1.2.30
地址:
http:
//www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.30/
下载的文件名:
mod_jk-1.2.30-httpd-2.2.3.so
注意mod_jk与apache服务器的版本必须匹配,下面是从下载页面拷来的说明,清楚的说明了它们之间的匹配关系。
∙mod_jk-1.2.30-httpd-2.2.3.soisforApache2.2.x.Ithasbeenbuildagainstversion2.2.3,butshouldworkwithApache2.2.0andlater.Renametomod_jk.sobeforeputtingitinyourApache2.2/modulesdirectoryoradjustyourLoadModulestatement.
∙mod_jk-1.2.30-httpd-2.2.0.soisforApache2.0.x.Ithasbeenbuildagainstversion2.0.53,andshouldworkwithApache2.0.53andlater.Renametomod_jk.sobeforeputtingitinyourApache2.0/modulesdirectoryoradjustyourLoadModulestatement.
3集成配置
3.1Apache+mod_jk设置
3.1.1改变Apache端口号
Ø因为默认的80端口经常是被占用的,所以我改成了8081,当然也可以不改,修改方式如下:
文件路径:
D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\httpd.conf找到这一行:
Listen8081
Ø也需要配置一下ServerName,如果没有配置在mod_jk.log里会报错,同样在上面的文件中找到这行改为:
ServerNamelocalhost:
8081
3.1.2拷贝mod_jk-1.2.30-httpd-2.2.3.so
将上面下载的mod_jk-1.2.30-httpd-2.2.3.so文件拷贝到D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\modules目录下,因为在配置文件中要求引用这个文件,所以我们改一个简单的名叫mod_jk.so
3.1.3在httpd.conf增加载入mod_jk配置
●在上面提到httpd.conf文件中增加:
LoadModulejk_modulemodules/mod_jk.so根据测试这行不加也行,可能是因为在mod_jk.conf文件已经有了这个引用。
●在上面提到httpd.conf文件中增加:
includeconf/mod_jk.conf
3.1.4新建mod_jk配置文件mod_jk.conf
在在上面提到httpd.conf文件中增加:
includeconf/mod_jk.conf配置,所以需要在D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\文件夹下新建一个mod_jk.conf文件,其内容如下:
#Loadmod_jkmodule
#Specifythefilenameofthemod_jklib
#加载mod_jkModule:
将下载的mod_jk-1.2.30-httpd-2.2.3.so文件放入到Apache_Home\module并改并为mod_jk.so
LoadModulejk_modulemodules/mod_jk.so
##配置mod_jk
#加载集群中的workers
#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
#指定哪些请求交给jboss处理,"loadbalancer"为在workers.propertise里指定的负载分配控制器名
JkMount/*loadbalancer
#JkMount/jkstatus*jkstatus
#Youcanuseexternalfileformountpoints.
#Itwillbecheckedforupdateseach60seconds.
#Theformatofthefileis:
/url=worker
#/examples/*=loadbalancer
#加载workers的请求处理分配文件
JkMountFileconf/uriworkermap.properties
#Addsharedmemory.
#Thisdirectiveispresentwith1.2.10and
#laterversionsofmod_jk,andisneededfor
#forloadbalancingtoworkproperly
JkShmFilelogs/jk.shm
#Addjkstatusformanagingruntimedata
JkMountjkstatus
Orderdeny,allow
Denyfromall
Allowfrom127.0.0.1
其中JkMount /* loadbalancer的意思是,把所有的请求都发给loadbalancer处理。
可以通过修改url来控制发送某些request。
3.1.5增加workers.properties文件
因为在mod_jk.conf文件中配置了mod_jk的workersFile:
JkWorkersFileconf/workers.properties,所以需要在D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\文件夹下新建workers.properties文件,注意这里必须和引用的文件名相同。
workers.properties的内容如下:
#定义request所要转发到的节点
#告诉JK,哪些worker是可用的
worker.list=loadbalancer,jkstatus,node1,node2
#定义节点Node1
#lbfactor定义该节点的权重,数字越大分发到该节点的request越多
#modifythehostasyourhostIPorDNSname.
worker.node1.port=8009
worker.node1.host=192.16.90.9
#server的加权比重,值越高,分得的请求越多
worker.node1.type=ajp13
worker.node1.lbfactor=1
#定义节点Node2
#modifythehostasyourhostIPorDNSname.
worker.node2.port=8009
worker.node2.host=192.16.90.87
worker.node2.type=ajp13
worker.node2.lbfactor=1
#负载配置
#server名为loadbalancer,用于负载均衡
worker.loadbalancer.type=lb
#指定分担请求的jboss
worker.loadbalancer.balance_workers=node1,node2
#粘性Session(默认是打开的)当该属性值=True(或1)时,代表Session是粘性的,即同一Session在集群中的同一个节点上处理,Session不跨越节点。
在集群环境中,一般将该值设置为False
worker.loadbalancer.sticky_session=True
worker.loadbalancer.sticky_session_force=False
#Statusworkerformanagingloadbalancer
worker.jkstatus.type=status
其中对于node的命名规则是worker.节点名.xxxx。
所以上述文件定义了两个节点:
node1和node2。
所有需要负载均衡的节点,都必须在worker.loadbalancer.balanced_workers参数中列举出来。
worker.loadbalancer.sticky_session=True表示当前使用的粘连session,要知道粘连session的具体情况,可以查看1.3.2
worker.loadbalancer.sticky_session_force=False表示如果与用户绑定的server连接不上时,自动转向别的server。
sticky_session=true表示某个请求始终由当前Tomcat处理,不会转移到其他Tomcat上。
sticky_session_force=false表示,当前Tomcat挂掉的时候,自动将Session复制到其他Tomcat上。
如果将sticky_session_force设置为true,当你关闭一台Tomcat并刷新网页,将得到503错误。
但设置为false,关闭一台Tomcat并刷新网页,被关闭的那台Tomcat上的Session会被自动复制到其他Tomcat上,系统继续正常运行。
3.1.6增加workers的请求处理分配文件
在mod_jk.con中配置了workers的请求处理分配文件,配置如下:
JkMountFileconf/uriworkermap.properties
所以需要求在D:
\ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\文件夹下新建uriworkermap.properties文件,其内容如下:
#所有请求都由loadbalancer这个server处理
/*=loadbalancer
#所有包含jkstatus请求的都由status这个server处理
#/jkstatus=jkstatus
#这里的"!
”是“非”的意思。
/*.gif=loadbalancer
/*.jpg=loadbalancer
/*.png=loadbalancer
/*.css=loadbalancer
/*.js=loadbalancer
/*.htm=loadbalancer
/*.html=loadbalancer
注意:
uriworkermap.properties文件中的loadbalancer、jkstatus是在worders.properties文件中配置的名称。
3.2Jboss的配置
说明:
我使用的jboss版本为4.0.2
3.2.1增加这个属性jmvRoute="node1"
D:
\jboss-4.0.2-bap\server\default\deploy\jbossweb-tomcat55.sar\server.xm修改为:
请注意,jmvRoute的值必须和mod_jk中的节点名字正确对应,否则无法正确路由。
另外这里有一个小bug,jboss这个属性正确的写法是jvmRoute,但是官司文档、网上都上好多人写成jmvRoute。
不配置这个属性,粘性session不会起作用,因为负载均衡器会按照这个名称记录当前的session是属于那个节点的。
3.2.2建立AJP连接
emptySessionPath="true"enableLookups="false"redirectPort="8443" protocol="AJP/1.3"/> 这个一般就有的,只要看一下端口号就行了,这个端口号对于workers.properties中的配置: worker.node1.port=8009。 3.2.3打开JK开关 D: \jboss-4.0.2-bap\server\default\deploy\jbossweb-tomcat55.sar\META-INF\jboss-service.xml 4其他重要配置 4.1三种指定连接控制器的方式 发现有三种方式指定那个连接有那个控制器来处理,区别是啥? ? 从下面的图中可以看到URL是怎么配置的? 是JKMount还是uriworkermap 访问: http: //localhost: 8081/jkstatus 4.1.1通过mock_jk.conf文件中的JkMount D: \ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\mock_jk.conf中: JkMount/jkstatus*jkstatus说明uri中以/jkstatus开头的连接都交由jkstatusworker处理。 4.1.2JkMount与location结合的方式 D: \ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\mock_jk.conf中 #Addjkstatusformanagingruntimedata JkMountjkstatus Orderdeny,allow Denyfromall Allowfrom127.0.0.1 说明: JkMount后面的参数表示你配置的worker名称。 4.1.3请求处理分配文件中配置 D: \ProgramFiles\ApacheSoftwareFoundation\Apache2.2\conf\uriworkermap.properties中增加: /jkstatus=jkstatus 4.2Session问题 配置负载均衡器,两个jboss服务器后,可以正常访问系统,但是发现有一个问题,例如,我使用用户zm登录后,主页完美呈现,过上一会,点击主页上的链接要转到其他页面的时候,session失效,系统跳到登录页面,查看了服务器日志,原来第一次登录的时候是在jboss1上登录的,后来点击链接的时候是访问的jboss2,而jboss1和jboss2的session是独立的,即jboss1和jboss2分别有各自的session,所以才会造成session失效。 查看session的配置方式: worker.loa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- jboss 集群