单机环境构建WebSphere Application Server Community Edition V2.1.1集群环境
1 引言
本文主要通过示例介绍WAS CE V2.1.1的multiple server instances和cluster的配置。主要参考了Configuring multiple server instances[1]和 和为WAS CE V1.0.1构建集群环境[2]。
2 环境配置
系统环境:windows xp sp2, java version 1.6.0。
工具 | 链接 | 备注 |
wasce setip-2.1.1.1-win.exe | wasce server | |
wasce-samples-2.1.1.1.zip | 配置示例,含cluster配置 | |
apache http server v2.x | redirector & load balancer,下载时注意mod_jk和apache版本要匹配 | |
mod_jk.so |
3 配置WAS CE多实例服务
3.1 安装运行WAS CE默认服务
安装WAS CE,运行安装目录<WASCE_HOME>/bin/geronimo.bat run启动默认服务。默认服务的配置信息参见<WASCE_HOME>/var/config的各文件。简便起见我们将默认服务称为instance1。
Note:WAS CE启动时需要使用多个端口,请确保这些端口未被占用。WAS CE占用的端口信息请参见var/config/config-substitutions.properties。查看系统端口使用情况:
3.2 创建新的服务实例
3.2.1 新服务实例(instance2)的配置
WAS CE的服务配置信息都在var目录下,创建一个新的服务实例步骤如下:
1. 在<WASCE_HOME>下创建一个文件夹(本例使用的是instance2)保存新实例的服务器配置信息。
2. 将<WASCE_HOME>/var目录copy到<WASCE_HOME>/instance2目录下
3. 设定instance2的服务器配置信息:
打开instance2/var/config/config-substitutions.properties。修改PortOffset,本例中设定PortOffset=10。这样instance2的所有端口都会+10,如web服务端口变成了8090(instance1的为默认端口8080)。同时注意AJPPort,这个端口是下面配置分发服务器时所需要的。
3.2.2 启动instance2
打开cmd到<WASCE_HOME>/bin目录下运行:
set GERONIMO_OPTS=-Dorg.apache.geronimo.server.name=<path_of_instance2>
注意< path_of_instance2>是instance2在<WASCE_HOME>中的相对路径。
运行<WASCE_HOME>/bin/geronimo.bat run启动instance2服务。
为了运行方便,可以写一个bat文件放在bin目录下:
@REM start instance2.bat set GERONIMO_OPTS=-Dorg.apache.geronimo.server.name=instance2 geronimo.bat run |
通过上述方法可以创建多个server instance。
注:停止instance2服务请使用 shutdown.bat --port [1099 + portOffset],本文使用的是shutdown.bat --port 1109。
本例配置完成后访问instance1的url为:http://localhost:8080,instance2:http://localhost:8090 。Administrator console的默认用户名和密码为:system/manager
4 配置WAS CE V2.1.1集群服务
wasce-samples-2.1.1.1.zip中是有关WAS CE的配置实例,在applications/tomcat-cluster中是有关cluster服务器的配置。
4.1 设置WAS CE服务器配置,指定jvmRouter标识
本例是在单机环境配置的WAS CE服务器,一下设计的server1指的是instance1服务,server2为instance2服务。修改server1的配置文件var/config/config.xml,在<module name="org.apache.geronimo.configs/tomcat6/2.1.3/car">下添加TomcatEngine的initParams:
<gbean name="TomcatEngine"> <attribute name="initParams"> name=Geronimo jvmRoute=server1 </attribute> </gbean> |
同样修改server2的config.xml:jvmRouter=server2
4.2 在server1和server2上分别安装应用程序
打开samples下的tomcat-cluster,将servlet-examples-cluster-server(1|2)部署到服务器上。首先修改servlet-examples-cluster-plan.xml将其中的<xx.yy.zz.aa>修改为127.0.0.1。
打开server1的administrator console,在Deploy New选项下,指定war和plan.xml的路径,安装程序。
Note:因为本例的server1和server2是两个instance,需要额外修改servlet-examples-cluster-plan.xml中的<dep:artifactId>servlet-examples-cluster-server1</dep:artifactId>,否则部署的时候会提示已存在。
修改上述plan中的dep:artifactId为servlet-examples-cluster-server2,将程序同样部署到server2上。
现在可以通过http://localhost:8080/servlet-examples-cluster/和http://localhost:8090/servlet-examples-cluster/查看运行情况:
4.3 安装Apache Http Server + mod_jk
# # The following should be added to the end of your LoadModule list, if it # does not exist. # LoadModule jk_module modules/mod_jk.so # # The following can be added anywhere after the above LoadModule statement. # <IfModule mod_jk.c> JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log JkLogLevel info JkLogStampFormat "[%a %b %d %H:%M:%S %Y] " JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories JkRequestLogFormat "%w %V %T" <Location /*/WEB-INF/*> AllowOverride None deny from all </Location> <Location /*/META-INF/*> AllowOverride None deny from all </Location> # forward ALL web requests to our mod_jk loadbalancer workers JkMount /* loadbalancer </IfModule> |
将workers.properties拷贝到Apache安装目录下的conf目录中,并根据server1和server2的IP地址和AJPPort作相应的修改,如下例所示:
worker.list=loadbalancer,status worker.maintain=60 worker.server1.type=ajp13 worker.server1.host=127.0.0.1 worker.server1.port=8009 worker.server1.socket_timeout=60 worker.server1.socket_keepalive=true worker.server1.lbfactor=1 worker.server2.type=ajp13 worker.server2.host=127.0.0.1 worker.server2.port=8019 worker.server2.socket_timeout=60 worker.server2.socket_keepalive=true worker.server2.lbfactor=1 worker.loadbalancer.type=lb worker.loadbalancer.balanced_workers=server1,server2 worker.loadbalancer.sticky_session=1 worker.status.type=status |
注意:如果WAS CE集群中有除了server1和server2之外,还有jvmRoute属性为xyz的成员,则需要在loadbalancer管理的worker列表中加入xyz:
worker.loadbalancer.balanced_workers=server1,server2,xyz
并且相应的加入对该成员的worker描述信息。
当然需要从集群中删除某个成员的时候,则需要从worker.loadbalancer.balanced_workers的取值列表中删除该成员的jvmRoute值,并且删除对该成员的worker描述信息。
通过设置worker.server1.lbfactor和worker.server2.lbfactor的值,可以根据server1和server2服务器性能的差异,设置server1和server2负载用户请求的权重:数值越大,分配到的用户请求数就越多。
4.4 实验结果
在浏览器中通过Apache访问示例程序的URL(本文apache2.2的端口默认为80)为:
http://localhost/servlet-examples-cluster/servlet/SessionExample
不断刷新页面可以看到session data在Server1和Server2之间切换。
Reference:
[1] Configuring multiple server instances
http://publib.boulder.ibm.com/wasce/V2.1.0/en/configuring-multiple-server-instances.html
[2] 为WebSphere Application Server Community Edition V1.0.1 构建集群环境
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0606_zhangsong/index.html