猫咪在论坛看到有人尝试配置Glassfish多机集群失败。猫咪也在网上搜索了一下,Glassfish有关配置集群的文章很少,仅有的几篇居然多是在一台机器上配置多个实例。昏死,那还叫什么集群!  
  猫咪又在网上和Sun的官方网站上反复搜索,终于发现一篇Glassfish配置多机集群的文章(http://blogs.sun.com/anilam/entry/glassfish_v2_admin_console_series)。猫咪根据这篇文章在自己的VMware上配置成功。现把自己的经验写下来,帮助有需要的朋友。
  猫咪自己是在VMware中建立两个虚拟计算机,使用的是Windows Server 2003。本来是想用Linux的,但是Ubuntu每次总要联机查补丁,慢得要死,所以只好装2003了。
  两台虚拟机器,IP地址一个是192.168.1.103,一个是192.168.1.104。其中192.168.1.104作为主控代理服务器和其中一个节点服务器。
  首先在每台计算机上下载安装JDK6(至少也得是JDK5),安装过程在此不再叙述。
  然后是安装Glassfish。猫咪用的是Glassfish v2ur1多语言版。从网上下载来后,执行
  java –Xmx256m –jar glassfish-installer-v2ur1-b09d-windows-ml.jar
  将安装文档解压缩。然后进入Glassfish下,执行
  lib\ant\bin\ant –f setup-cluster.xml
  两台都要这么做。
  其实理论上应该是一台代理服务器,多台节点服务器。不过猫咪怕自己机器吃不消,所以就只用了两台机器。不过其中一台机器既做代理又做节点,性能上有问题。自己试验可以,实际中这么配可不行。
如果“ant –f setup-cluster.xml”执行没有问题,那么在两台服务器上就都建立了一个支持集群的服务器实例。
  首先,在代理服务器上进入Glassfish的bin目录启动实例,
  asadmin strat-domain domain1
  “domain1”是系统自动建立的缺省实例,你也可以建立自己的实例。格式是“create-domain --profile cluster --adminport 4848 <实例名>”,“--profile cluster”表示实例是集群实例,“--adminport 4848”表示管理端口是4848。
  分别在两个节点服务器上建立节点代理(目前192.168.1.104还兼任代理服务器职责)。
  asadmin create-node-agent --host 192.168.1.104 --port 4848 agentOnFirst
  建立第一个代理节点。
  asadmin create-node-agent --host 192.168.1.104 --port 4848 agentOnSecond
  建立第二个代理节点。
  建立的时候,要求你输入代理服务器的用户名、密码和主密码。缺省是用户名“admin”,密码“adminadmin”,主密码我是自己建立的实例,也设定成了“adminadmin”。如果你用的是缺省实例,主密码应该是“changeit”。命令要分别在两个节点服务器上执行,不要在代理服务器上执行。然后分别启动这两个节点代理
  asadmin start-node-agent agentOnFirst
  asadmin start-node-agent agentOnSecond
  启动的时候同样要求你输入代理服务器用户名、密码和主密码。如果没有问题,系统会显示节点启动成功。
现在通过浏览器登录“http://192.168.1.104:4848”,进行集群的创建和配置。进入控制台后,选择“群集”,然后选择“新建”按钮。输入集群名称后按“确定”。猫咪把自己的集群叫“MiaoCluster”。然后点击这个集群实例,选择右边的“实例”选项卡,然后将刚才创建的两个节点代理分别添加进去就可以了。最后在“常规”选项卡中按“启动群集”按钮,如果之前一切正常,两个节点均正常连接的情况下,集群就会成功启动。现在就可以在“应用程序”选项卡中进行应用部署了。猫咪自己写了一个缺省的JavaEE应用,只有一个缺省的index.jsp文件,上面就一句话“<%=”Hello WOrld!”%>”。因为不涉及到任何其他东西,所以部署很成功。
  然后在浏览器上输入“http://192.168.1.104:38080/hello”。其中38080是集群的访问端口,猫咪的应用叫hello。浏览器成功显示出了“Hello World!”。然后再访问“http://192.168.1.103:38080/hello”,同样成功显示。去每个节点服务器的节点目录下,可以看到在“C:\glassfish\nodeagents\<节点名>\<实例名>\applications\j2ee-modules\”下有hello目录。如果你觉得这么访问不方便,一会儿103一会儿104的,你可以在代理服务器上配置HTTP负载均衡。
截图是浏览器分别访问两个节点成功的画面。

 

  • 63a5bd00-9d48-3af2-a68f-330a1166518b-thumb
  • 描述:
  • 大小: 78.4 KB
  • 1347e6ae-dee0-3475-9e9e-13f08abe1c36-thumb
  • 描述:
  • 大小: 78.6 KB
评论
ftmouse 2008-06-16
还没有用过这样的高级功能。
davexin 2008-06-15
做群集,无非就是java应用和数据库,本人商业环境只用过bea webloigc群集和orale群集,其他的只是测试过,如果用群集的web方面,感觉得不偿失,因为性能实在不敢恭维,最好是用 ejb的cluster,既简单,又方便,只需要把地址配成群集中多个机器的ip就可以了。web的群集本人的方案是采用resin的农场模式做。虽然不可以使用热session,但是个人感觉已经够了。
ferreousbox 2008-05-27
glassfish的集群效率如何呢?现在的应用服务器基本上都支持集群,如tomcat、resin等,但是真正复杂高访问量应用的时候有多少用到了呢?软件层面的集群解决方案似乎是个鸡肋,系统层面的LVS大家讨论的似乎不是很多,后者虽然麻烦点,但性能方面应该会好很多。
Lucas Lee 2008-05-23
Joo 写道
robbin 写道
dinghyana 写道
多机是集群,单机上的多个实例又叫啥?

前者叫做水平群集,后者叫做垂直群集。


是吗,貌似不是这么定义的吧

我觉得也不是,不过查了一下,还真是:http://publib.boulder.ibm.com/infocenter/tivihelp/v3r1/index.jsp?topic=/com.ibm.itcamrtt.doc_6.0/ITCAMfTT_InstallConfig10.htm
魔力猫咪 2008-05-23
就别夸我了。我发了这个后,有人问我如何配置负载均衡和前端的WebServer。还有如何进行服务器同步。还有人问我Glassfish的同步机制如何。结果我就答不上来了。
judytang 2008-05-22
“猫咪自己是在VMware中建立两个虚拟计算机,使用的是Windows Server 2003”,猫咪好厉害,掌声一下 !
judytang 2008-05-22
”Glassfish有关配置集群的文章很少”,猫咪好,想问问在中国用GLASSFISH的人很少是吗,大约是什么百分比呢,多数人是用什么APPLICATION SERVER 呢 ?
judytang 2008-05-22
来拜访魔力猫咪,这里的讨论很热闹,欢迎来加入GLASSFISH QUALITY COMMUNITY,借你的宝地啦,谢谢 !

http://glassfish.group.javaeye.com/group/topic/5579
Joo 2008-05-07
robbin 写道
dinghyana 写道
多机是集群,单机上的多个实例又叫啥?

前者叫做水平群集,后者叫做垂直群集。


是吗,貌似不是这么定义的吧
dinghyana 2008-05-07
大哥,我还有疑问,
"如果你觉得这么访问不方便,一会儿103一会儿104的,你可以在代理服务器上配置HTTP负载均衡"
怎么配置来?有什么教程吗?
dinghyana 2008-05-07
请问 如何验证 LoadBalance 呢?
我初步是这样做,您看对不对?
我在SunWebServer的本机实例 Https-{hostname}下
修改了 loadbalancer.xml 如下
<!DOCTYPE loadbalancer PUBLIC \"-//Sun Microsystems Inc.//DTD Sun ONE Application Server 7.1//EN\" \"sun-loadbalancer_1_2.dtd\">
<loadbalancer>
<cluster name=\"cluster1\" policy=\"round-robin\">
<!--
Configure the listeners as space seperated URLs like
listeners=\"http://host:port https://host:port\" For example:

<instance name=\"instance1\" enabled=\"true\" disable-timeout-in-minutes=\"60\" listeners=\"http://localhost:80 https://localhost:443\" weight=\"100\"/>

-->
<instance name=\"instance1\" enabled=\"true\" disable-timeout-in-minutes=\"60\" listeners=\"http://localhost:38080 https://localhost:38181\" weight=\"100\"/>
<instance name=\"instance1\" enabled=\"true\" disable-timeout-in-minutes=\"60\" listeners=\"http://localhost:38081 https://localhost:38182\" weight=\"100\"/>
<web-module context-root=\"clusterjsp\" enabled=\"true\" disable-timeout-in-minutes=\"60\" error-url=\"sun-http-lberror.html\" />
<health-checker url=\"/\" interval-in-seconds=\"10\" timeout-in-seconds=\"30\" />
</cluster>
<property name=\"reload-poll-interval-in-seconds\" value=\"60\"/>
<property name=\"response-timeout-in-seconds\" value=\"30\"/>
<property name=\"https-routing\" value=\"true\"/>
<property name=\"require-monitor-data\" value=\"false\"/>
<property name=\"active-healthcheck-enabled\" value=\"false\"/>
<property name=\"number-healthcheck-retries\" value=\"3\"/>
<property name=\"rewrite-location\" value=\"true\"/>
</loadbalancer>
然后我在Sun WebServer正常启动了 本机实例 ps:glassfish 两个实例已经正常启动.
最后我该如何验证 本机的 两个实例间的Load Balancer呢?
robbin 2008-05-07
dinghyana 写道
多机是集群,单机上的多个实例又叫啥?

前者叫做水平群集,后者叫做垂直群集。
dinghyana 2008-05-07
多机是集群,单机上的多个实例又叫啥?
魔力猫咪 2008-04-05
iamlibo 写道
请问这样在一台机器上做集群与在一台机器上单独安装性能那个会好一点?

这只是为了做试验已而,所以用虚拟机模拟多个计算机。现实中每台都是独立的计算机。
iamlibo 2008-04-05
请问这样在一台机器上做集群与在一台机器上单独安装性能那个会好一点?
发表评论

您还没有登录,请登录后发表评论