《51CTO下载-EOS5+JBoss负载均衡方案.doc》由会员分享,可在线阅读,更多相关《51CTO下载-EOS5+JBoss负载均衡方案.doc(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、PRIMETON TECHNOLOGIES, LTD.上海普元信息技术有限责任公司EOS5+JBoss负载均衡技术解决方案No part of this document may be reproduced, stored in any electronic retrieval system, or transmitted in any form or by any means, mechanical, photocopying, recording, otherwise, without the written permission of the copyright owner.COPYRI
2、GHT 2006 by Primeton Technologies, Ltd. ALL RIGHTS RESERVED.文档修订记录序号版本号修订日期修订概述修订人审批人备注10.12009-02-23创建林锋目 录1文档摘要41.1文档分类41.2关键字/Tag41.3摘要41.4作者、协作者及评审人员41.5定义、首字母缩写词及缩略语42概述52.1问题或场景52.2目的52.3参考资料52.4工具和技术52.5系统运行环境53解决方案63.1概述63.2部署步骤63.2.1安装部署第一个JBoss实例63.2.2安装部署第二个JBoss实例73.2.3安装部署Apache2.273.2.
3、3.1安装83.2.3.2配置83.2.4配置EOS工作流缓存同步93.3启动并验证124注意事项134.1JBoss实例停止后用户需要重新登录134.2发布EOS构件包135常见问题135.1启动EOS5.3.5 Server时报错135.264位UNIX下安装Apache碰到的一些问题146附录156.1一台机器运行两个EOS for JBoss实例需要修改的端口156.2在unix下编译安装Apache176.3关闭Apache的access.log日志181 文档摘要1.1 文档分类部署上线 技术方案1.2 关键字/TagEOSJBoss负载均衡1.3 摘要介绍如何搭建EOS+JBos
4、s+Apache负载均衡(非集群)环境。1.4 作者、协作者及评审人员作者: 林锋1.5 定义、首字母缩写词及缩略语负载均衡: 当服务请求发送到集群时,能根据一定的规则选择由集群中的某一台服务器来处理该请示。2 概述2.1 问题或场景一般的J2EE集群方案需要实现Web负载均衡、HTTPSession复制、EJB集群等等,但某些场景下只需要用到Web负载均衡,而且JBoss集群配置比较麻烦,HTTPSession复制又会影响性能,这时可以不需要配置集群,只需要两个JBoss单机实例做负载均衡即可。2.2 目的通过本文可以了解如何搭建EOS+JBoss+Apache负载均衡(非集群)环境。2.3
5、 参考资料2.4 工具和技术2.5 系统运行环境EOS5.3JBoss3.2.5(EOS安装包自带)3 解决方案3.1 概述本方案前端使用Apache的Session Sticky方式转发请求到后端的两个JBoss单机实例,实现WEB应用负载均衡,两个JBoss实例之间是互相单独存在的。Session Sticky的原理是JBoss实例(实际上是Tomcat)响应浏览器请求的时候,在Session ID后面附上了一个自己实例的标识。浏览器后续再发送请求的时候,会把Session ID连同这个标识一起送过来。Apache从Session ID里面拿到这个标识后,就知道应该将请求转发给哪个JBos
6、s实例。也就是说,在Session Sticky时,浏览器发送第一次请求到某JBoss实例,Apache会将后续所有的请求都转发给该JBoss实例。3.2 部署步骤3.2.1 安装部署第一个JBoss实例1、安装EOS按Primeton EOS 5.3产品安装指南中【安装EOS社区版】章节安装EOS for JBoss版本即可,本文中不做详细说明。2、配置jvmRoute打开jboss-3.2.5serverdefaultdeployjbossweb-tomcat50.sarserver.xml文件,找到如下配置:增加如上蓝色标识的配置:“jvmRoute=server1”。该配置给实例指定了
7、一个标识,JBoss会在Session ID后面加上该标识,Apache就可以根据该标识识别请求应该发给哪个JBoss实例。3.2.2 安装部署第二个JBoss实例1、先安装EOS for JBoss版本,可参看上一章节。2、配置jvmRoute打开jboss-3.2.5serverdefaultdeployjbossweb-tomcat50.sarserver.xml文件,找到如下配置:增加如上蓝色标识的配置:“jvmRoute=server2”。注意,第二个实例指定的标识是“server2”,不同于第一个实例指定的标识“server1”,因为只有标识唯一,Apache才能根据该标识来识别请
8、求应该发给哪个JBoss实例。如果是在同一台机器上部署本方案,那么需要修改部分冲突端口才能使用,参看附录6.1章节。3.2.3 安装部署Apache2.2本方案中Apache不使用传统的JK方式与JBoss连接,而使用mod_proxy方式。Apache可以通过自带的 mod_proxy_balancer 模块使用代理技术来连接 JBoss(Tomcat),可以选择http_proxy、ajp_proxy两种连接方式。mod_proxy_balancer是Apache2.1版本以后提供的,而Apache2.2.x 版本对该模块进行了重写,大大的增强了其功能和稳定性,所以建议使用Apache2.
9、2.x以后的版本。另外http_proxy和ajp_proxy的连接方式比JK的连接方式配置更简单、方便。3.2.3.1 安装Apache的安装包可以从http:/www.apache.org下载。在Windows下安装很容易,在此不做更多描述。在UNIX下安装就麻烦多了,一般是使用Apache的源码编译安装。安装时需要注意,Apache默认是不会安装mod_proxy_balancer模块的,需要在编译时指定。可参看附录6.2章节。3.2.3.2 配置打开Apache安装路径下的conf/httpd.conf主配置文件,修改配置。 加载mod_proxy_balancer模块mod_prox
10、y_balancer模块默认是注释掉不使用的,所以首先需要取消注释。找到如下配置(如果没有就手工添加),删除前面的“#”符号:#LoadModule proxy_module modules/mod_proxy.so#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so#LoadModule proxy_balancer_module modules/mod_proxy_balancer.so#LoadModule proxy_connect_module modules/mod_proxy_connect.so#LoadModule pro
11、xy_ftp_module modules/mod_proxy_ftp.so#LoadModule proxy_http_module modules/mod_proxy_http.so 配置负载均衡实例成员在配置文件最后增加如下配置:ProxyRequests OffProxyPass / balancer:/sticky-cluster/ stickysession=JSESSIONID BalancerMember http:/192.168.0.20:8080 route=server1 BalancerMember http:/192.168.0.21:8080 route=serv
12、er2以上配置配置了两个负载均衡实例,并指定了使用Sticky Session,使用的是http_proxy连接方式。注意BalancerMember中route指定的标识是JBoss实例中Server.xml配置的jvmRoute标识(参看3.3.1和3.3.2章节中的配置)。上面是http_proxy连接方式配置,再来看看ajp_proxy连接方式的配置:ProxyRequests OffProxyPass / balancer:/sticky-cluster/ stickysession=JSESSIONID BalancerMember ajp:/192.168.0.20:8009 r
13、oute=server1 BalancerMember ajp:/192.168.0.21:8009 route=server2对比http_proxy和ajp_proxy两种连接方式的配置,不同的是BalancerMember中指定的协议和端口。协议和端口要与Tomcat的Server.xml中的配置相对应:如上所示,Server.xml中前面配置的是HTTP的端口,后面配置的是AJP的端口。在负载均衡方案中,http_proxy和ajp_proxy两种连接方式任意选择一种使用。3.2.4 配置EOS工作流缓存同步负载均衡方案中,各个JBoss实例虽然是独立存在的,但是由于EOS工作流使用了
14、数据缓存,是需要配置缓存同步的。如果系统中没有使用到工作流,本章节的操作步骤可以忽略。因为EOS5.3的工作流缓存同步方案配置比较复杂,并且存在BUG,请将EOS升级到5.3.5版本后,按下面EOS5.3.5版本的工作流缓存同步配置方案配置。【步骤1】:打开工作流缓存同步开关:打开所有JBoss实例成员的eosserver/config/wfconfig.xml文件,找到如下配置:true默认配置是false,这里需要修改为true。【步骤2】:重新启动JBoss实例因为集群配置还没有完成,所以工作流引擎不能启动成功,控制台会有如下工作流引擎启动失败提示,这是正常现象。【步骤3】:增加工作流J
15、Boss实例将所有JBoss实例成员(含本机)添加到成员列表中。需要登录eos管理控制台来操作,如下面图例所示: 321如上所示,添加了两个JBoss成员实例。其中配置的RMI是在eosserver/config/eosconfig.xml中配置的,如下所示:30614【步骤4】:再次重启JBoss实例上一步骤的配置需要重启之后才能生效。重启之后,控制台上就不会再有出错信息了,并且可以看到工作流引擎启动成功的提示,如下所示:再看EOS管理控制台中的成员管理配置,本机成员的状态是启动的了。注一:以上操作只在一个JBoss成员实例上操作即可,因为配置是保存在数据库WFSystemInfo表中,所有
16、连接到数据库的JBoss成员实例都可以读取得到。注二:这里只是简单地介绍工作流的缓存同步配置,更多的配置说明请参看文档EOS5.3.5工作流集群配置说明。3.3 启动并验证1、 启动JBoss实例:执行安装路径下的run.bat(Windows)或者run.sh(UNIX)启动JBoss实例。2、 启动Apache:Windows下执行安装路径下bin/apache.exe启动。UNIX下,进入安装路径的bin目录,执行命令“./apache -k start”启动。3、 通过Apache访问系统;4、 登录EOS管理控制台查看在线用户监控信息:可以看到生成的SessionID后面带着JBos
17、s实例的标识5、 停止该JBoss实例,再继续操作,此时页面应该会报错,刷新页面将会返回到登录页面。报错是因JBoss实例已经不可用;返回登录页面是因为请求被转发到其它的JBoss实例,由于没有实现Session复制,其它的JBoss实例上并没有用户的Session信息,所以被EOS转到登录页面。4 注意事项4.1 JBoss实例停止后用户需要重新登录如果某个JBoss实例停止后,已经登录到这个JBoss实例的用户的请求将被转发其它的JBoss实例,由于没有实现Session复制,其它的JBoss实例上并没有这些用户的Session信息,所以这些用户需要重新登录才能操作系统。4.2 发布EOS
18、构件包由于EOS5版本不支持集群发布构件包,所以发布EOS构件包时,需要给每个JBoss成员实例都发布一次。5 常见问题5.1 启动EOS5.3.5 Server时报错场景:启动时报类似如下的错误:Workflow Engine failed!com.primeton.eos.wf.service.api.WFRuntimeException: com.primeton.eos.wf.service.api.WFRuntimeException: Localhost is not a member in cluster .解决方案:首先确定已经按3.3.4章节完成了EOS工作流缓存同步配置;然
19、后再检查操作系统的hosts中有没有在127.0.0.1的前面声明本机IP、机器名。5.2 64位UNIX下安装Apache碰到的一些问题1、编译时需要指定参数操作系统为64位,需要删除原先配置,加上参数“-enable-lib64 -libdir=/usr/lib64”来编译。32位则无需加。如下所示:#tar zxvf httpd-2.0.63.tar.gz#cd /home/software/httpd-2.0.63#rm -rf ./configure#rm -rf ./srclib/apr-util/configure#./buildconf#./configure -enable-
20、lib64 -libdir=/usr/lib64 -enable-MODULE=shared -enable-so -with-mpm=worker -prefix=/usr/local/apache2.0.63#make#make install2、安装apache时报错:configure: error: Cannot use an external APR with the bundled APR-utilq需要安装apr和apr-util:下载地址:http:/apache.justdn.org/apr/安装apr例如:tar -zxvf apr-1.2.12.tar.gzcd apr
21、-1.2.12./configure&make&make install安装apr-util例如:tar -zxvf apr-util-1.2.12.tar.gzcd apr-util-1.2.12./configure -with-apr=/usr/local/apr &make &make install先安装apr,安装apr-util时需要指定apr的路径。3、安装apr-util时报错:/usr/lib/libexpat.so: could not read symbols: File in wrong format办法一:是打开 Makefile 找到 -lexpat 这么一个参数
22、,修改为: /usr/lib64/libexpat.la 即可。办法二:编译时增加编译参数 -with-expat=builtin 。可能在64位服务器下编译脚本在定位系统 expat 支持时有些问题。使用自带的expat来编译就不存在这个问题了。办法三:备份/usr/lib/目录下的libexpat*,然后拷贝/usr/lib64/目录下的libexpat*至/usr/lib/目录。6 附录6.1 一台机器运行两个EOS for JBoss实例需要修改的端口如果一台机器运行两个EOS for JBoss实例时,因为都使用了相同的端口,当启动了一个实例后,再启动另外一个实例时,就会报端口已被占
23、用的异常。【解决方案和步骤】通过修改JBoss和EOS的端口配置可以解决端口占用的问题。1、修改jboss-3.2.5serverdefaultconfjboss-service.xml中的1098,1099,4444,4445,8083端口。端口配置在配置文件中位置如下:.8083.1099.1098.4444.4445.2、jboss-3.2.5serverdefaultconfjboss-minimal.xml中的1099端口,注意要改成跟jboss-service.xml中的1099一样的。端口配置在配置文件中位置如下:.1099.3、jboss-3.2.5serverdefaultd
24、eployjbossweb-tomcat50.sarserver.xml中8080,8009,8081端口。端口配置在配置文件中位置如下:.3、jboss-3.2.5serverdefaultdeployjmsuil2-service.xml中的8093端口。端口配置在配置文件中位置如下:.8093.4、eosserverconfigeosconfig.xml中的1099,30614端口,注意1099端口要改成跟jboss-service.xml中的1099端口一样的。端口配置在配置文件中位置如下:.sqlserver2000org.jnp.interfaces.NamingContextFa
25、ctoryjnp: /localhost:1099.127.0.0.130614.6.2 在unix下编译安装Apache1、 下载Apache源码例如下载Apache的源码文件为httpd-2.2.3.tar.gz。2、 解压源码包执行命令“tar zxvf httpd-2.2.3.tar.gz”进行解压,源码文件会解压到“httpd-2.2.3”目录下。3、 配置进入“httpd-2.2.3”目录,执行以下命令: ./configure -prefix=/usr/local/apache2.2.3 -enable-so -enable-proxy=shared -enable-proxy-
26、ajp=shared -enable-proxy-http=shared -enable-proxy-ftp=shared -enable-proxy-connect=shared -enable-proxy-balancer=shared配置Aapche的安装路径为“/usr/local/apache2.2.3”,并生成mod_proxy模块。 4、 执行命令“make”编译源码5、 执行命令“make install”安装例如:#tar zxvf httpd-2.2.3.tar.gz#cd httpd-2.2.3#./configure -prefix=/usr/local/apache2
27、.2.3 -enable-so -enable-proxy=shared -enable-proxy-ajp=shared -enable-proxy-http=shared -enable-proxy-ftp=shared -enable-proxy-connect=shared -enable-proxy-balancer=shared#make#make install6.3 关闭Apache的access.log日志access.log日志记录的内容比较多,运行时间长了之后,日志文件会变得很大,可以关闭该日志文件。在 Apache的conf/httpd.conf主配置文件里注释掉下面几行即可:# LogFormat %h %l %u %t %r %s %b %Refereri %User-Agenti combined# LogFormat %h %l %u %t %r %s %b common# # LogFormat %h %l %u %t %r %s %b %Refereri %User-Agenti %I %O combinedio# # CustomLog logs/access_log common#