JESSIEfoo 2008-06-24
二零零八 年 五月廿九 晚
联系邮址并MSN:[email protected]
运行环境为windowsxpprofessionalsp3简体中文版.
参考文档附后.考虑到不太习惯英文的朋友,引文一般都做了翻译.
内容要点
0/预备知识
1/安装并配置GlassFish与WebServer
2/在GlassFishV2中建立单机集群
3/配置负载均衡器插件
4/部署并运行Sample中的clusterjsp应用
0预备知识
GlassFishV2版增强的特性
内存间复制
在其他服务器上的内存间复制提供了轻量级的session状态数据存储方案,例如HADB,借助此方案不必再获取额外的数据库.这种类型的复制使用其他服务器上的内存实现HttpSession和状态SessionBean数据的高可用性存储.集群服务器的实例之间按照环状拓扑复制数据到内存中.每一个备份的实例都在内存中存储了复制的数据.在其他服务器内存中Session状态数据的复制支持Session的分发.使用内存间复制需要组管理服务GMS支持.
负载均衡增强
对负载均衡插件进行了数项增强,介绍如下:
A/基于权重的RoundRobin算法.
一种称作weight的可选属性已经添加到实例的Loadbalancer.xml中.
这个选项使得负载均衡器插件可以根据权重发送request.例如,每500个request,100个会到instance1并400个会到instance2.默认的weight值是100.weight可以从管理控制台或命令行赋值到相应的实例.此外,server的domain.xml中为每一个实例指定了一项属性来标明其weight值.
B/用户自定义负载均衡的程序.
该特性使得用户可以定义常用的负载均衡逻辑.例如,基于用户身份验证的重定向和基于MIME的负载均衡.这个特性通过负载均衡器装载用户自定义的分享库文件实现.而分享库文件实现了定义在loadbalancer.h文件中的接口,loadbalancer.h文件位于lib/install/templates/.[其实是在安装了WebServer的PlugIn后,参见1/1/3]
C/管理控制台增强
先前版本的AppServer需要loadbalancer.xml文件手动的拷贝到特定webserver的config文件夹中.AppServer9.1在WebServer和ApplicationServer之间包含了针对类似拷贝的自动推送机制.负载均衡器的自配置是在server的domain.xml中.
1/安装并配置GlassFish与WebServer
1/1/可能需准备如下两组安装文件
1/1/1/GlassFish(SunJavaSystemApplicationServer)方面
A:https://glassfish.dev.java.net/上的普通版,均在100M左右,版本随时更新有两种
jar形式的安装包或exe形式的发行版分为多语言版或English版
jar版与exe版的区别是
?exe版可以从容的将AppServer实例服务添加到windows系统服务列表中,便于部署,
?jar版比较适合开发,解压后可以随时使用Ant编译.
?exe版中有一个withHADB版本200M左右.下载地址:
http://www.sun.com/download/index.jsp?cat=Application%20%26%20Integration%20Services&tab=3&subcat=Application%20Servers
ExeEditionwithHADB上面有如下特征:HighAvalablityDatabaseServer及针对Sun的WebServer,Apache的HttpServer,Microsoft的IIS的负载均衡器插件.
PS:如同一些朋友说的,这个插件若不直接安装,就需手动配置.在windows中的手动配置步骤,我会在后面给出.之前已经在配置的,我先提醒下,注意在windows系统中,plugin的链接文件为 dll文件(passthrough.dll),而非unix下的so文件.1/1/2WebServer方面
自然是要准备Sun的WebServer 6.1或者Apache的HttpServer2.0或者Microsoft的IIS6.0.SunWebServer 管理端口默认为8888
手动配置Apache Http Server的LB插件
如何配置apche2.0.x中的glassfish插件
在\conf中修改httpd.conf文件,增加LoadModule<IfModule/><VirtualHost/>三项内容,注意与本机信息的一致性
##BEGINEELBPluginParameters
LoadModuleapachelbplugin_modulemodules/mod_loadbalancer.dll
<IfModulemod_apache2lbplugin.cpp>
config-file"C:\ProgramFiles\ApacheGroup\Apache2/conf/loadbalancer.xml"
localeen
</IfModule>
<VirtualHost192.168.100.52>
DocumentRoot"C:\ProgramFiles\ApacheGroup\Apache2/htdocs"
ServerName192.168.100.52
</VirtualHost>
##ENDEELBPluginParameters
增加如下文件
loadbalancer.xml.example
ssl.conf
sun-loadbalancer_1_1.dtd
sun-loadbalancer_1_2.dtd
在\modules中直接增加以下文件
erropages文件夹
resource文件夹
mod_loadbalancer.dll
增加\sec_db_files目录
cert8.dll
key3.dll
secmod.dll
访问时,应按照填写的server_name进行访问,可能出现的问题是 IP 地址1/1/3安装顺序
为了安装插件,自然要首先安装相应的WebServer,之后通过exe带HADB的版本安装插件.顺便提一下,这个版本装完后,CLUSTER集群支持是默认开启了,LoadBalancer负载均衡器也是默认装好了.在可视化管理页面可以看到.可以直接到第二步的asantsetup-one-machine-cluster创建Cluster--NodeAgent---Instance关联组.
jar版的需手动配置.方法如下:
A.针对AppServer(GlassFish),下载相应的插件
http://download.java.net/javaee5/external/<OS>/aslb/jars/aslb-9.1-MS4-b1.jar
将OS=windows设置后,下载这个jar文件,这里注意一句话.WebServer插件官方的测试正常与使用支持仅限于SunWebServer6.1.
直接Unjar命令或用winrar软件解压aslb-9.1-MS4-b1.jar文件得到两个zipSUNWaslb.zip,SUNWaspx.zip:
SUNWaslb.zip中是负载均衡器用到的dtd文件及需要自行开发或编译的负载均衡算法文件.
直接解压至${glassfish.home}/lib/中.
附:[在install中是template文件夹.其中ReadMe.UserDefinedLB有段说明.讲了如何使用user-defindedLoadBalancer,及配置方法.简单的讲就是开发并编译生成自己的so文件并通过改变loadbalancer.xml中的类似的配置,来改变cluster的均衡算法.<clustername="cluster1"policy="user-defined"policy-module="home/user/workspacelb/roundrobin.so">]
SUNWaspx.zip是AppServer中需要的WebServer链接文件,
直接解压至${glassfish.home}/lib/中.
B.针对WebServer中配置
websrvr_install_dir-WebServer的安装目录
websrvr_instance_dir-WebServer的实例目录(指的是https-{机器名}命名的目录)
as_install_dir-GlassFish的安装目录
请注意:这几个文件路径在实际应用中都要被实例化.
B/1建立如下WebServer的plugins/lbplugin目录树
各个文件可以在SUNWaspx.zip中的webserver-plugin文件夹中找到:
o<websrvr_install_dir>/plugins/lbplugin/bin/passthrough.dll
o<websrvr_install_dir>/plugins/lbplugin/resource/LBPluginDefault_root.res
o<websrvr_install_dir>/plugins/lbplugin/resource/LBPlugin_root.res
o<websrvr_install_dir>/plugins/lbplugin/errorpages/default-error.html
o<websrvr_install_dir>/plugins/lbplugin/errorpages/sun-http-lberror.html
B/2在<websrvr_instance_dir>/config中增加或修改以下文件.
增加的文件可以在SUNWaslb.zip中找到.(.orig代表修改之前的文件)
loadbalancer.xml.example
magnus.conf
magnus.conf.orig
obj.conf
obj.conf.orig
sun-loadbalancer_1_0.dtd
sun-loadbalancer_1_1.dtd
sun-loadbalancer_1_2.dtd修改的文件内容如下:
B/2/1 magnus.conf
在两个Init项之间加入:
##BEGINEELBPluginParameters
Initfn="load-modules"shlib="<websrvr_install_dir>/plugins/lbplugin/bin/passthrough.dll"funcs="init-passthrough,service-passthrough,name-trans-passthrough"Thread="no"
Initfn="init-passthrough"
##END EE LB Plugin ParametersB/2/2 obj.conf
加入如下内容:
NameTransfn="name-trans-passthrough"name="lbplugin"config-file="<websrvr_instance_dir>/config/loadbalancer.xml"
<Objectname="lbplugin">
ObjectTypefn="force-type"type="magnus-internal/lbplugin"
PathCheckfn="deny-existence"path="*/WEB-INF/*"
Servicetype="magnus-internal/lbplugin"fn="service-passthrough"
Errorreason="BadGateway"fn="send-error"uri="$docroot/badgateway.html"
</Object>
<Objectppath="*lbconfigupdate*">
PathCheckfn="get-client-cert"dorequest="1"require="1"
</Object>
<Objectppath="*lbgetmonitordata*">
PathCheckfn="get-client-cert"dorequest="1"require="1"
</Object>
如此手动配置GlassFish和SunWebServer6.1的任务便已经完成.其中放在WebServer实例config目录下的loadbalancer.xml.example 是loadbalancer.xml的示例文件.理论上后面可由GlassFish的负载均衡器自动生成.2/在GlassFish V2中建立单机集群
CLUSTER-->NODEAGENT-->N*INSTANCE
具体是建立了 集群cluster1,建立了节点代理cluster1-nodeagent,在节点代理下,建立两个实例instance-one和instance-two3/配置负载均衡器插件
在可视化导出loadbalancer.xml的时候可能会遇到因为dtd文件无法正常导出的现象,这是glassfish的一个bug,在下的解决方案是:
A按照错误的描述,在${GLASSFISH_HOME}下建立download文件夹,将相应的dtd文件拷贝至其中即可.
B 使用CLI模式下的,export-http-lb-config 命令4/部署并运行Sample中的clusterjsp应用
部署的时候可以在可视化管理页面两个地方进行,一个地方是正常的部署步骤,只要选择部署目标到对应的集群上即可;另外一个地方是直接到下面的集群管理页面进行部署.
不论选择哪一种方案部署,部署的时候要注意部署的选项,一定勾选"可用性"建议勾选Java Web Start