EOS5+JBoss负载均衡方案Word文件下载.docx
《EOS5+JBoss负载均衡方案Word文件下载.docx》由会员分享,可在线阅读,更多相关《EOS5+JBoss负载均衡方案Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
5.1启动EOS5.3.5Server时报错13
5.264位UNIX下安装Apache碰到的一些问题14
6附录15
6.1一台机器运行两个EOSforJBoss实例需要修改的端口15
6.2在unix下编译安装Apache17
6.3关闭Apache的access.log日志18
1文档摘要
1.1文档分类
部署上线技术方案
1.2关键字/Tag
EOS
JBoss
负载均衡
1.3摘要
介绍如何搭建EOS+JBoss+Apache负载均衡(非集群)环境。
1.4作者、协作者及评审人员
1.5定义、首字母缩写词及缩略语
负载均衡:
当服务请求发送到集群时,能根据一定的规则选择由集群中的某一台服务器来处理该请示。
2概述
2.1问题或场景
一般的J2EE集群方案需要实现Web负载均衡、HTTPSession复制、EJB集群等等,但某些场景下只需要用到Web负载均衡,而且JBoss集群配置比较麻烦,HTTPSession复制又会影响性能,这时可以不需要配置集群,只需要两个JBoss单机实例做负载均衡即可。
2.2目的
通过本文可以了解如何搭建EOS+JBoss+Apache负载均衡(非集群)环境。
2.3参考资料
2.4工具和技术
2.5系统运行环境
EOS5.3
JBoss3.2.5 (EOS安装包自带)
3解决方案
3.1概述
本方案前端使用Apache的SessionSticky方式转发请求到后端的两个JBoss单机实例,实现WEB应用负载均衡,两个JBoss实例之间是互相单独存在的。
SessionSticky的原理是JBoss实例(实际上是Tomcat)响应浏览器请求的时候,在SessionID后面附上了一个自己实例的标识。
浏览器后续再发送请求的时候,会把SessionID连同这个标识一起送过来。
Apache从SessionID里面拿到这个标识后,就知道应该将请求转发给哪个JBoss实例。
也就是说,在SessionSticky时,浏览器发送第一次请求到某JBoss实例,Apache会将后续所有的请求都转发给该JBoss实例。
3.2部署步骤
3.2.1安装部署第一个JBoss实例
1、安装EOS
按《PrimetonEOS5.3产品安装指南》中【安装EOS社区版】章节安装EOSforJBoss版本即可,本文中不做详细说明。
2、配置jvmRoute
打开jboss-3.2.5\server\default\deploy\jbossweb-tomcat50.sar\server.xml文件,找到如下配置:
<
Enginename="
jboss.web"
defaultHost="
localhost"
jvmRoute="
server1"
>
<
LoggerclassName="
org.jboss.web.tomcat.Log4jLogger"
verbosityLevel="
WARNING"
category="
org.jboss.web.localhost.Engine"
/>
Hostname="
autoDeploy="
false"
deployOnStartup="
deployXML="
增加如上蓝色标识的配置:
“jvmRoute="
”。
该配置给实例指定了一个标识,JBoss会在SessionID后面加上该标识,Apache就可以根据该标识识别请求应该发给哪个JBoss实例。
3.2.2安装部署第二个JBoss实例
1、先安装EOSforJBoss版本,可参看上一章节。
server2"
注意,第二个实例指定的标识是“server2”,不同于第一个实例指定的标识“server1”,因为只有标识唯一,Apache才能根据该标识来识别请求应该发给哪个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.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_proxy_balancer模块默认是注释掉不使用的,所以首先需要取消注释。
找到如下配置(如果没有就手工添加),删除前面的“#”符号:
#LoadModuleproxy_modulemodules/mod_proxy.so
#LoadModuleproxy_ajp_modulemodules/mod_proxy_ajp.so
#LoadModuleproxy_balancer_modulemodules/mod_proxy_balancer.so
#LoadModuleproxy_connect_modulemodules/mod_proxy_connect.so
#LoadModuleproxy_ftp_modulemodules/mod_proxy_ftp.so
#LoadModuleproxy_http_modulemodules/mod_proxy_http.so
配置负载均衡实例成员
在配置文件最后增加如下配置:
ProxyRequestsOff
ProxyPass/balancer:
//sticky-cluster/stickysession=JSESSIONID
<
Proxybalancer:
//sticky-cluster>
BalancerMemberhttp:
//192.168.0.20:
8080route=server1
//192.168.0.21:
8080route=server2
/Proxy>
以上配置配置了两个负载均衡实例,并指定了使用StickySession,使用的是http_proxy连接方式。
注意BalancerMember中route指定的标识是JBoss实例中Server.xml配置的jvmRoute标识(参看3.3.1和3.3.2章节中的配置)。
上面是http_proxy连接方式配置,再来看看ajp_proxy连接方式的配置:
BalancerMemberajp:
8009route=server1
8009route=server2
对比http_proxy和ajp_proxy两种连接方式的配置,不同的是BalancerMember中指定的协议和端口。
协议和端口要与Tomcat的Server.xml中的配置相对应:
<
Servicename="
className="
org.jboss.web.tomcat.tc5.StandardService"
!
--AHTTP/1.1Connectoronport8080-->
Connectorport="
8080"
address="
${jboss.bind.address}"
maxThreads="
150"
minSpareThreads="
25"
maxSpareThreads="
75"
enableLookups="
redirectPort="
8443"
acceptCount="
100"
connectionTimeout="
20000"
disableUploadTimeout="
true"
URIEncoding="
GBK"
--AAJP1.3Connectoronport8009-->
8009"
debug="
0"
protocol="
AJP/1.3"
如上所示,Server.xml中前面配置的是HTTP的端口,后面配置的是AJP的端口。
在负载均衡方案中,http_proxy和ajp_proxy两种连接方式任意选择一种使用。
3.2.4配置EOS工作流缓存同步
负载均衡方案中,各个JBoss实例虽然是独立存在的,但是由于EOS工作流使用了数据缓存,是需要配置缓存同步的。
如果系统中没有使用到工作流,本章节的操作步骤可以忽略。
因为EOS5.3的工作流缓存同步方案配置比较复杂,并且存在BUG,请将EOS升级到5.3.5版本后,按下面EOS5.3.5版本的工作流缓存同步配置方案配置。
【步骤1】:
打开工作流缓存同步开关:
打开所有JBoss实例成员的eosserver/config/wfconfig.xml文件,找到如下配置:
modulename="
cluster"
groupname="
<
configValuekey="
enable"
true<
/configValue>
默认配置是false,这里需要修改为true。
【步骤2】:
重新启动JBoss实例
因为集群配置还没有完成,所以工作流引擎不能启动成功,控制台会有如下工作流引擎启动失败提示,这是正常现象。
【步骤3】:
增加工作流JBoss实例
将所有JBoss实例成员(含本机)添加到成员列表中。
需要登录eos管理控制台来操作,如下面图例所示:
如上所示,添加了两个JBoss成员实例。
其中配置的RMI是在eosserver/config/eosconfig.xml中配置的,如下所示:
config"
remoteCallerPort"
30614<
【步骤4】:
再次重启JBoss实例
上一步骤的配置需要重启之后才能生效。
重启之后,控制台上就不会再有出错信息了,并且可以看到工作流引擎启动成功的提示,如下所示:
再看EOS管理控制台中的成员管理配置,本机成员的状态是启动的了。
注一:
以上操作只在一个JBoss成员实例上操作即可,因为配置是保存在数据库WFSystemInfo表中,所有连接到数据库的JBoss成员实例都可以读取得到。
注二:
这里只是简单地介绍工作流的缓存同步配置,更多的配置说明请参看文档《EOS5.3.5工作流集群配置说明》。
3.3启动并验证
1、启动JBoss实例:
执行安装路径下的run.bat(Windows)或者run.sh(UNIX)启动JBoss实例。
2、启动Apache:
Windows下执行安装路径下bin/apache.exe启动。
UNIX下,进入安装路径的bin目录,执行命令“./apache-kstart”启动。
3、通过Apache访问系统;
4、登录EOS管理控制台查看在线用户监控信息:
5、停止该JBoss实例,再继续操作,此时页面应该会报错,刷新页面将会返回到登录页面。
报错是因JBoss实例已经不可用;
返回登录页面是因为请求被转发到其它的JBoss实例,由于没有实现Session复制,其它的JBoss实例上并没有用户的Session信息,所以被EOS转到登录页面。
4注意事项
4.1JBoss实例停止后用户需要重新登录
如果某个JBoss实例停止后,已经登录到这个JBoss实例的用户的请求将被转发其它的JBoss实例,由于没有实现Session复制,其它的JBoss实例上并没有这些用户的Session信息,所以这些用户需要重新登录才能操作系统。
4.2发布EOS构件包
由于EOS5版本不支持集群发布构件包,所以发布EOS构件包时,需要给每个JBoss成员实例都发布一次。
5常见问题
5.1启动EOS5.3.5Server时报错
场景:
启动时报类似如下的错误:
WorkflowEnginefailed!
com.primeton.eos.wf.service.api.WFRuntimeException:
com.primeton.eos.wf.service.api.WFRuntimeException:
Localhostisnotamemberincluster.
解决方案:
首先确定已经按3.3.4章节完成了EOS工作流缓存同步配置;
然后再检查操作系统的hosts中有没有在127.0.0.1的前面声明本机IP、机器名。
5.264位UNIX下安装Apache碰到的一些问题
1、编译时需要指定参数
操作系统为64位,需要删除原先配置,加上参数“--enable-lib64--libdir=/usr/lib64”来编译。
32位则无需加。
如下所示:
#tarzxvfhttpd-2.0.63.tar.gz
#cd/home/software/httpd-2.0.63
#rm-rf./configure
#rm-rf./srclib/apr-util/configure
#./buildconf
#./configure--enable-lib64--libdir=/usr/lib64--enable-MODULE=shared
--enable-so--with-mpm=worker--prefix=/usr/local/apache2.0.63
#make
#makeinstall
2、安装apache时报错:
configure:
error:
CannotuseanexternalAPRwiththebundledAPR-utilq
需要安装apr和apr-util:
下载地址:
http:
//apache.justdn.org/apr/
安装apr例如:
tar-zxvfapr-1.2.12.tar.gz
cdapr-1.2.12
./configure&
&
make&
makeinstall
安装apr-util例如:
tar-zxvfapr-util-1.2.12.tar.gz
cdapr-util-1.2.12
./configure--with-apr=/usr/local/apr&
make&
先安装apr,安装apr-util时需要指定apr的路径。
3、安装apr-util时报错:
/usr/lib/libexpat.so:
couldnotreadsymbols:
Fileinwrongformat
办法一:
是打开Makefile找到-lexpat这么一个参数,修改为:
/usr/lib64/libexpat.la即可。
办法二:
编译时增加编译参数--with-expat=builtin。
可能在64位服务器下编译脚本在定位系统expat支持时有些问题。
使用自带的expat来编译就不存在这个问题了。
办法三:
备份/usr/lib/目录下的libexpat*,然后拷贝/usr/lib64/目录下的libexpat*至/usr/lib/目录。
6附录
6.1一台机器运行两个EOSforJBoss实例需要修改的端口
如果一台机器运行两个EOSforJBoss实例时,因为都使用了相同的端口,当启动了一个实例后,再启动另外一个实例时,就会报端口已被占用的异常。
【解决方案和步骤】
通过修改JBoss和EOS的端口配置可以解决端口占用的问题。
1、修改jboss-3.2.5\server\default\conf\jboss-service.xml中的1098,1099,4444,4445,8083端口。
端口配置在配置文件中位置如下:
...
mbeancode="
org.jboss.web.WebService"
name="
jboss:
service=WebService"
attributename="
Port"
8083<
/attribute>
org.jboss.naming.NamingService"
service=Naming"
1099<
RmiPort"
1098<
org.jboss.invocation.jrmp.server.JRMPInvoker"
service=invoker,type=jrmp"
RMIObjectPort"
4444<
org.jboss.invocation.pooled.server.PooledInvoker"
service=invoker,type=pooled"
ServerBindPort"
4445<
2、jboss-3.2.5\server\default\conf\jboss-minimal.xml中的1099端口,注意要改成跟jboss-service.xml中的1099一样的。
/mbean>
3、jboss-3.2.5\server\default\deploy\jbossweb-tomcat50.sar\server.xml中8080,8009,8081端口。
redi