针对GlassFish V2 版 配置集群/负载均衡器

 

二零零八 年 五月廿九 晚
联系邮址并MSN:  dinghy@live.com
 
运行环境为 windows xp professional  sp3 简体中文版.
参考文档附后.考虑到不太习惯英文的朋友,引文一般都做了翻译.
 
内容要点
0/预备知识
1/安装并配置GlassFish与WebServer
2/在GlassFish V2中建立单机集群
3/配置负载均衡器插件
4/部署并运行Sample中的clusterjsp应用

 
0预备知识
GlassFish V2版增强的特性
内存间复制
在其他服务器上的内存间复制提供了轻量级的session状态数据存储方案,例如HADB,借助此方案不必再获取额外的数据库.这种类型的复制使用其他服务器上的内存实现Http Session和状态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 文件手动的拷贝到特定web server的config文件夹中.AppServer9.1 在WebServer和ApplicationServer之间包含了针对类似拷贝的自动推送机制.负载均衡器的自配置是在 server的 domain.xml中.
1/安装并配置GlassFish与WebServer
1/1/可能需准备如下两组安装文件
1/1/1/GlassFish(Sun Java System Application Server)方面
A:  https://glassfish.dev.java.net/ 上的普通版,均在100M左右,版本随时更新有两种
jar形式的安装包 或 exe形式的发行版  分为多语言版或English版 
jar版与exe版的区别是
? exe版可以从容的将AppServer实例服务添加到windows系统服务列表中,便于部署,
? jar版比较适合开发,解压后可以随时使用Ant编译.
? exe版中有一个with HADB版本 200M左右.下载地址:
http://www.sun.com/download/index.jsp?cat=Application%20%26%20Integration%20Services&tab=3&subcat=Application%20Servers
Exe Edition with HADB 上面有如下特征:High Avalablity Database Server及针对Sun的WebServer,Apache的HttpServer,Microsoft的IIS的负载均衡器 插件.
 
PS:如同一些朋友说的,这个插件若不直接安装,就需手动配置.在windows中的手动配置步骤,我会在后面给出.之前已经在配置的,我先提醒下,注意在windows系统中,plugin的链接文件为 dll文件(passthrough.dll),而非unix下的so文件.


1/1/2 WebServer方面
自然是要准备Sun的WebServer 6.1或者Apache的HttpServer2.0或者Microsoft的IIS6.0.

SunWebServer 管理端口默认为8888

手动配置Apache Http Server的LB插件
如何配置 apche 2.0.x 中的glassfish 插件
 
在\conf中修改httpd.conf文件,增加LoadModule <IfModule/> <VirtualHost/>三项内容,注意与本机信息的一致性
##BEGIN EE LB Plugin Parameters
LoadModule apachelbplugin_module modules/mod_loadbalancer.dll
<IfModule mod_apache2lbplugin.cpp>
config-file "C:\Program Files\Apache Group\Apache2/conf/loadbalancer.xml"
locale en
</IfModule>
<VirtualHost 192.168.100.52>
DocumentRoot "C:\Program Files\Apache Group\Apache2/htdocs"
ServerName 192.168.100.52
</VirtualHost>
##END EE LB Plugin Parameters
增加如下文件
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负载均衡器也是默认装好了.在可视化管理页面可以看到.可以直接到 第二步的 asant setup-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插件官方的测试正常与使用支持仅限于Sun WebServer 6.1.
 
直接Unjar命令或用winrar软件 解压 aslb-9.1-MS4-b1.jar 文件得到两个zip  SUNWaslb.zip, SUNWaspx.zip:
 
SUNWaslb.zip中是负载均衡器用到的dtd文件及需要自行开发或编译的负载均衡算法文件.
直接解压至 ${glassfish.home}/lib/ 中.
附:[在install中是template文件夹.其中ReadMe.UserDefinedLB有段说明.讲了如何使用 user-definded LoadBalancer,及配置方法.简单的讲就是开发并编译生成自己的so文件并通过改变loadbalancer.xml中的类似的配置,来改变cluster的均衡算法.  <cluster name="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项之间加入:
##BEGIN EE LB Plugin Parameters
Init fn="load-modules" shlib="<websrvr_install_dir>/plugins/lbplugin/bin/passthrough.dll" funcs="init-passthrough,service-passthrough,name-trans-passthrough" Thread="no"
Init fn="init-passthrough"
##END EE LB Plugin Parameters


B/2/2 obj.conf


加入如下内容:
 
NameTrans fn="name-trans-passthrough" name="lbplugin" config-file="<websrvr_instance_dir>/config/loadbalancer.xml"
 
<Object name="lbplugin">
ObjectType fn="force-type" type="magnus-internal/lbplugin"
PathCheck fn="deny-existence" path="*/WEB-INF/*"
Service type="magnus-internal/lbplugin" fn="service-passthrough"
Error reason="Bad Gateway" fn="send-error" uri="$docroot/badgateway.html"
</Object>
 
<Object ppath="*lbconfigupdate*">
PathCheck fn="get-client-cert" dorequest="1" require="1"
</Object>
 
<Object ppath="*lbgetmonitordata*">
PathCheck fn="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-two


3/配置负载均衡器插件


在可视化导出loadbalancer.xml的时候可能会遇到因为dtd文件无法正常导出的现象,这是glassfish的一个bug,在下的解决方案是:
A 按照错误的描述,在${GLASSFISH_HOME}下建立download文件夹,将相应的dtd文件拷贝至其中即可.
B 使用CLI模式下的,export-http-lb-config 命令


4/部署并运行Sample中的clusterjsp应用


部署的时候可以在可视化管理页面两个地方进行,一个地方是正常的部署步骤,只要选择部署目标到对应的集群上即可;另外一个地方是直接到下面的集群管理页面进行部署.
不论选择哪一种方案部署,部署的时候要注意部署的选项,一定勾选"可用性"建议勾选Java Web Start

 

阅读更多

没有更多推荐了,返回首页