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

JESSIEfoo 2008-06-24

二零零八 年 五月廿九 晚

联系邮址并MSN:dinghy@live.com

运行环境为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 Parameters

B/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-two

3/配置负载均衡器插件

在可视化导出loadbalancer.xml的时候可能会遇到因为dtd文件无法正常导出的现象,这是glassfish的一个bug,在下的解决方案是:

A按照错误的描述,在${GLASSFISH_HOME}下建立download文件夹,将相应的dtd文件拷贝至其中即可.

B 使用CLI模式下的,export-http-lb-config 命令

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

部署的时候可以在可视化管理页面两个地方进行,一个地方是正常的部署步骤,只要选择部署目标到对应的集群上即可;另外一个地方是直接到下面的集群管理页面进行部署.

不论选择哪一种方案部署,部署的时候要注意部署的选项,一定勾选"可用性"建议勾选Java Web Start

相关推荐

gamezouni / 0评论 2013-07-28