配置与理解Glassfish Cluster【28张图片已修复】

第一部分 实验目的
  1. 理解Glassfish V3.1.2.2 Cluster的工作原理
  2. 理解Apache HTTPD 软件负载均衡的工作原理
  3. 理解如何使用Glassfish的内存复制功能
  4. 验证是否或者如何通过Apache HTTPD + Glassfish完成故障转移
第二部分 实验环境设计与搭建
 
2.1 实验环境拓扑
 
为了方便起见,实验环境由如简化过的网络拓扑示意图所示,有两个子网构成,分别为Glassfish Cluster Web Subnet和Glassfish Cluster Admin Subnet。
 
其中Glassfish Cluster Web Subnet作为Web Requests处理的子网,由一下元素组成:
  • Web Gateway, 拥有公网IP地址,作为互联网业务请求的入口。
  • Load Balance(以下简称LB),软件负载均衡器,将互联网的业务请求按照一定规则转交给4个Glassfish Server Instances以均衡负载。
  • Glassfish Node 1~2,每一个Glassfish Node当中包含两个Glassfish Server Instance。
  • Instance 1 ~ 4, 为4个Glassfish Server的实例。
此外Glassfish Cluster Admin Subnet作为应用服务器管理的子网,由以下元素构成:
  • Admin Gateway, 可以拥有公网IP地址,作为系统管理员完成日常维护工作的入口。
  • Domain Administration Server,域管理服务器,为Glassfish服务器的术语,用来管理domain下的各个Clusters, Nodes, Instances, Resources, Applications 和其他组件。
  • Glassfish Node 1~2,同上段介绍。
注意:对应Glassfish Cluster的概念, 一个Glassfish Cluster由DAS, Node, 以及各个instance构成。
 
由于资源有限且为了方便实验环境的构建,两个网关部分暂时省去,两个子网也可以暂时合并为一个子网。
 
2.2 实验环境描述
 
笔者采用VMware虚拟机构建目标环境,构建环境的大部分过程可以重用于云端虚拟环境。以下为实验环境清单:
  • 物理主机:MacOS 10.8.3 + 2.7 GHz Intel Core i7 + 16GB 1600 MHz DDR3 + 512G SSD
  • 虚拟机软件:VMware Fusion 5.0.3
  • 虚拟主机:
    • LB
      • 1GB MEM + 1 CPU + 20G + NAT (192.168.107.130) (load-balancer)
    • DAS
      • 1GB MEM + 1 CPU + 20G + NAT (192.168.107.131) (das)
    • Glassfish Node 1
      • 1GB MEM + 1 CPU + 20G + NAT (192.168.107.129) (gnode-1)
    • Glassfish Node 2
      • 1GB MEM + 1 CPU + 20G + NAT (192.168.107.128) (gnode-2)
  • ubuntu安装镜像
    • ubuntu-12.10-server-amd64.iso
  • ubuntu基本安装配置
    • 软件列表配置为VMware默认列表
    • 安装过程为VMware默认的无人参与安装
    • 虚拟资源配置参考“虚拟主机”部分
  • 服务器软件安装
    • LB
      • openssh
      • httpd
    • DAS
      • openssh
      • sun-java6-jdk
      • glassfish
    • Glassfish Node 1~2
      • openssh
      • sun-java6-jdk
      • glassfish (集群Node设定过程中自动安装)
  • 服务器账户
    • username:asadmin
    • password:adminadmin
  • 相关目录设定
    • glassfish
      • /home/asadmin/runtimes/glassfish3
  • 相关端口设定
    • ssh, 22
    • httpd, 80
    • glassfish das admin console, 4848
注解:
  1. NAT为虚拟主机网络配置选项,Network Address Translation 网络地址转换
  2. IP地址通过DHCP获得
  3. 由于Glassfish集群配置过程中需要用到各个Glassfish Node的主机名称,所以建议为每个主机设定有意义的名称。同时可以在各个虚拟主机的/etc/hosts文件中指定各个主机名与IP地址映射关系,例如下面文本片段
/etc/hosts
192.168.107.131       das
192.168.107.130       load-balancer
192.168.107.129       gnode-1
192.168.107.128       gnode-2
 
2.3 实验环境搭建过程
 
2.3.1 在VMware Fusion上安装虚拟机
 
根据上一节对实验环境的描述,需要安装配置4台虚拟主机。为了节省安装时间,可以采取下面的安装配置步骤来完成:
  1. 安装模板虚拟主机
  2. 在模板主机中配置安装openssh-server
  3. 如果计划使用指定IP地址的情况下,可预先在模板主机中的/etc/hosts文件中增加前述文本片段,否则可跳过这一步
  4. 复制模板虚拟主机为load-balancer虚拟主机,并通过VMware生成新的MAC地址
  5. 在load-balancer虚拟主机中安装apache web server
  6. 复制模板虚拟主机为glassfish-node模板虚拟主机模板,并通过VMware生成新的MAC地址
  7. 在glassfish-node虚拟主机模板中安装sun-java6-jdk
  8. 在glassfish-node虚拟主机模板中创建/home/asadmin/runtimes目录
  9. 复制glassfish-node虚拟主机模板为glassfish-node 1
  10. 复制glassfish-node虚拟主机模板为glassfish-node 2
  11. 复制glassfish-node虚拟主机模板为domain administration server
  12. 更改各个虚拟机主机名称和配置所有虚拟主机/etc/hosts文件
  13. 在domain administration server中安装glassfish v3.1.2.2
 

2.3.1.1 安装模板虚拟主机

 
使用VMware Fusion安装ubuntu-12.10-amd64-server, 包括设定用户名和密码(asadmin, adminadmin),
注解:在VMware Fusion安装的过程中,基本采用默认的配置方式(选择“下一步”,暂时忽略自定义部分),VMware会提示输入目标虚拟主机的用户名和密码,此时填入配置中给出用户名和密码。
 
2.3.1.2 在模板主机中配置安装openssh-server 
 
在采用VMware Fusion默认安装的版本中,openssh-server不是默认安装内置,需要手动安装。但是ssh服务的配置文件ssh_config在未手动安装之前就已经存在/etc/ssh/目录下。
 
为了简化安全配置,本次试验选用用户名密码登陆方式(而不是key文件登录方式),所以首先通过下列命令打开文件


sudo vi /etc/ssh/ssh_config
 
然后将PasswordAuthentication yes前面的#去掉
 
PasswordAuthentication yes
 
保存退出(esc :wq)
 
然后使用下面的命令安装openssh,安装后服务会自动启动。
 
sudo apt-get install openssh-server
 
最后,使用下面命令关闭虚拟模板主机
 
sudo shutdown -P 0
 
 
注:首先配置文件然后再安装openssh-server减少一次ssh服务重启。
 
2.3.1.4 复制虚拟主机模板为load-balancer虚拟主机
在MacOS中使用Finder程序,到个人的“文稿”(Documents)目录下,进入“虚拟机”目录,复制刚刚安装好的虚拟主机模板,将其重命名(比如load-balancer)。
 
在未启动load-balancer的状态下,打开load-balancer虚拟主机窗口,点击窗口上方的 设定(扳手)按钮。在打开的设定面板窗口中,选择网络适配器。点击底部的“高级选项”,如下图所示,最后点击“生成”按钮用来生成新的MAC地址。
 
 
2.3.1.5 在load-balancer虚拟主机中安装apache web server
 
当MAC地址重新设定完成后,开启load-balancer虚拟主机,并登陆(终端)执行下面的命令来安装apache2 web server
 
sudo apt-get install apache2
 
最后,使用下面命令关闭load-balancer虚拟主机
 
sudo shutdown -P 0
 
2.3.1.6 复制模板虚拟主机为glassfish-node模板虚拟主机模板,并通过VMware生成新的MAC地址
 
使用类似2.3.1.4的步骤复制glassfish-node虚拟主机模板以及生成新的MAC地址。
 
2.3.1.7 在glassfish-node虚拟主机模板中安装sun-java6-jdk
 
启动glassfish-node模版虚拟主机,按照如下方式安装sun-java6-jdk
 
 
UPDATE : [07-Aug-2012] Thanks to a comment from  Pierre-Yves Langlois  this seems to be the best method (uses the latest version of the Flexion script from Github rather than the version referenced above)

sudo apt-get purge sun-java* #You need to do that if you want the mozilla plugin to work without conflict with java7 for instance.
mkdir ~/src
cd ~/src
git clone https://github.com/flexiondotorg/oab-java6.git
cd ~/src/oab-java6
sudo ./oab-java.sh

Then when its finished, install java:
sudo apt-get install sun-java6-plugin sun-java6-jre sun-java6-bin sun-java6-jdk

You can follow the installation process with:
tail -f ~/src/oab-java6/oab-java.sh.log


 
Note: If you do not need Java 6 it’s much safer to stick to the current  Oracle Java 7release.
 
2.3.1.8 在glassfish-node虚拟主机模板中创建/home/asadmin/runtimes目录
 
通过下面命令创建相应目录
 
mkdir runtimes
 
最后,使用下面命令关闭load-balancer虚拟主机
 
sudo shutdown -P 0
 
按照2.3.1.4所提供的步骤完成下面三步
 
2.3.1.9   复制glassfish-node虚拟主机模板为glassfish-node 1
2.3.1.10 复制glassfish-node虚拟主机模板为glassfish-node 2
2.3.1.11 复制glassfish-node虚拟主机模板为glassfish domain administration server
2.3.1.12 更改所有虚拟主机主机名称以及配置/etc/hosts文件
 
启动所有虚拟主机,通过下列命令获取各个虚拟主机的IP地址
 
asadmin@localhost:~$ ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0c:29:7b:ab:a3
          inet addr:192.168.107.130  Bcast:192.168.107.255  Mask:255.255.255.0
          inet6 addr: fe80::20c:29ff:fe7b:aba3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3858 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1579 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:4790744 (4.7 MB)  TX bytes:105902 (105.9 KB)
 
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:16 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1184 (1.1 KB)  TX bytes:1184 (1.1 KB)
 
通过下面命令编辑主机名称
 
asadmin@localhost:~$ sudo vi /etc/hostname

#文件打开后第一行如下
localhost
#将localhost去掉并替换为相应主机名称,如load-balancer, das, gnode-1, gnode-2
load-balancer
 
注意:根据IP地址与映射关系来更改主机名称
如上ifconfig命令所示,本机eth0端口对应的IP地址为192.168.107.130, 按照预期设计该主机名为load-balancer。收集齐全四个虚拟主机的IP地址以后编辑每个虚拟主机的/etc/hosts文件,按照下面文本的方式编辑IP地址与主机名映射关系。
 
asadmin@localhost:~$ sudo vi /etc/hosts
#将原来前两行对应的localhost替换为对应的主机名,本例中应为load-balancer,如下
127.0.0.1             load-balancer
127.0.1.1             localhost.localdomain       load-balancer
#并且在文件最后添加
192.168.107.131       das
192.168.107.130       load-balancer
192.168.107.129       gnode-1
192.168.107.128       gnode-2
编辑结束后,保存退出(ESC + :wq), 其他虚拟机的主机名称以及IP地址与主机名映射关系修改方式同上,集中在/etc/hostname以及/etc/hosts两个文件中。更改完毕后,重新启动虚拟机,在ssh登录到虚拟主机之后,可以通过下面命令来检验修改是否生效。
 
asadmin@load-balancer$ hostname
load-balancer
 
将上述过程应用到其他虚拟主机也可以应用在MacOS主机。
 
 
2.3.1.13 在domain administration server中安装glassfish v3.1.2.2
 
在开启的glassfish domain administration server (das)虚拟主机中登陆(或者通过ssh登陆,如在MacOS的“终端”,键入ssh [email protected]
 
如果从未在MacOS中下载过glassfish v3.1.2.2的zip版本(切记下载zip版本,不是sh版本),则可以选择使用下面命令行在das中下载
 
asadmin@localhost:~$ cd ~/runtimes asadmin@localhost:~$ wget http://download.java.net/glassfish/3.1.2.2/release/glassfish-3.1.2.2-ml.zip
 
如果MacOS中已经下载过相应版本,在MacOS中,打开命令行“终端”应用程序,切换到下载有glassfish-3.1.2.2-ml.zip的目录中,选择使用下面命令将MacOS中的软件远程拷贝给das。 
 
scp ./glassfish-3.1.2.2-ml.zip [email protected]:/home/asadmin/runtimes/
 
接下来,对已下载的glassfish-3.1.2.2-ml.zip文件解压缩,如下
 
unzip glassfish-3.1.2.2-ml.zip
 
解压缩完成后,目录中将出现glassfish3目录,至此glassfish3已经成功安装并且 在VMware Fusion上安装虚拟机”部分结束
 
注:笔者在MacOS的/etc/hosts文件中同样加入上面提到的 IP地址与主机名映射关系,这样方便在MacOS中通过“终端”应用程序,使用类似ssh asasdmin@das来访问各个虚拟主机,亦可以通过网页使用类似于http://das:4848这样的URL来访问Glassfish Domain Administration Server的管理控制台。
操作步骤同2.3.1.12小节。接下来开始通过Admin Console配置集群。
 
2.3.2 配置Glassfish集群
 
配置步骤概要如下
  1. 修改DAS 管理员密码
  2. 开启DAS 远程访问
  3. 启动DAS
  4. 登陆Web Admin Console
  5. 添加两个节点
  6. 创建集群
  7. 创建四个服务器实例
2.3.2.1 修改DAS 管理员密码
在MacOS的终端应用程序中,使用下面命令完成
 
#登陆das终端
localhost:~ Barry$ ssh asadmin@das
#切换到glassfish bin目录
asadmin@localhost:~$ cd runtimes/glassfish3/bin
#更改管理员密码
asadmin@localhost:~/runtimes/glassfish3/bin$ ./asadmin change-admin-password
Enter admin user name [default: admin]>                                         /*直接敲回车键*/
Enter admin password>                                                           /*直接敲回车键*/
Enter new admin password>                                                       /*键入adminadmin作为管理员密码*/
Enter new admin password again>                                                 /*键入adminadmin确认管理员密码*/
Command change-admin-password executed successfully. 
 
2.3.2.2  开启DAS 远程访问
 
继续在当前的ssh会话中键入下面命令开启DAS Remote Access
 
asadmin@localhost:~/runtimes/glassfish3/bin$ ./asadmin --host das --port 4848 enable-secure-admin
Enter admin user name>  admin
Enter admin password for user "admin">                                         /*键入adminadmin作为管理员密码*/
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.
 
2.3.2.3 启动 DAS
asadmin@localhost:~/runtimes/glassfish3/bin$ ./asadmin start-domain
Waiting for domain1 to start ......
Successfully started the domain : domain1
domain  Location: /home/asadmin/runtimes/glassfish3/glassfish/domains/domain1
Log File: /home/asadmin/runtimes/glassfish3/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully. 
 
2.3.2.4 登陆Web Admin Console
 
在MacOS当中打开Chrome浏览器,并且在地址栏键入https://das:4848, 如果出现警告页面,点击“仍然继续”,并在User Name和Password输入框中输入用户名admin和密码adminadmin,最后点击Login按钮。如下图所示:
 
2.3.2.4 添加两个节点
 
点击管理控制台左侧Nodes节点,如下图所示
 

 
在上图中点击New按钮,在新打开的网页中,如下图所示,按照网页中输入框中的内容创建gnode-1
 

 
按照相同的方法,在按照下图网页输入框中内容来创建gnode-2
 

 
2.3.2.5 创建一个Cluster
 
点击管理控制台左侧Clusters节点,如下图所示
 

点击上图中的New按钮, 并按照下图网页中输入框内容所示,创建一个名为gcluster的群集
 
如果创建完成后,没有遇到任何告警信息,那么群集的最基本配置的就成功了。
 
注意: 
如果遇到告警信息,请确保每个主机的虚拟主机名称, IP地址与主机名称映射关系,与Glassfish Nodes设定时,填入的主机名称务必保持一致。
如果安装了防火墙软件,如iptables,在这个实验过程中请关闭防火墙。
 

 
最后在下图的表格中,选种gcluster群集,并点击"Start Cluster",过一会儿,如果能看到与下图中instances全部成功进入Running状态,恭喜!
 

 
当所有实例都成功启动后,可以将附带的样例彩票程序部署到gcluster上, 步骤如下:
 
首先另存附件到本地盘。
 
点选Web Admin Console左侧的Applications节点,如下图所示
 

 
点击右侧网页的 Deploy 按钮,在打开的网页中, 首先将Targets部分的gcluster选中,点选Add按钮将其移动到Selected Targets列表,
然后点击 “选择文件”, 在弹出的对话框中选择上一步中另存下来的文件。
 
文件加载完毕后,选中 Availability对应的checkbox如下图,最后点击OK部署该应用程序
 

 
部署成功后,应用会出现在 Deployed Applications表格中,如下图所示

点击应用程序的名字进入应用的详细页面,如下:
 
点击LotteryAnnotation-war.war后面对应的Launch按钮,网页会列出群集中所有可用的根URL如下图所示
 

可以点选任何一个链接尝试该样例应用程序。
 
2.3.3 负载均衡配置
 
负载均衡配置主要需要三个步骤:
  1. 在load-balancer虚拟中安装mod_jk模块
  2. 编辑workers.properties文件
  3. 编辑jk.conf文件
  4. 编辑000-default文件
  5. 重启apache2服务
  6. 在DAS Web Admin Console中激活http listener的JK Listener属性
2.3.3.1 在load-balancer虚拟中安装mod_jk
 
使用下面的命令安装
 
$ sudo apt-get install libapache2-mod-jk
 
2.3.3.2 编辑workers.properties
 
$ sudo vi /etc/apache2/workers.properties
 
将下面内容添加到该文件中
worker.list=worker1,worker2,worker3,worker4,loadbalancer
worker.worker1.type=ajp13
worker.worker1.host=gnode-1
worker.worker1.port=28080
worker.worker1.lbfactor=1
worker.worker1.socket_keepalive=1
worker.worker1.socket_timeout=300
worker.worker2.type=ajp13
worker.worker2.host=gnode-2
worker.worker2.port=28080
worker.worker2.lbfactor=1
worker.worker2.socket_keepalive=1
worker.worker2.socket_timeout=300
worker.worker3.type=ajp13
worker.worker3.host=gnode-1
worker.worker3.port=28081
worker.worker3.lbfactor=1
worker.worker3.socket_keepalive=1
worker.worker3.socket_timeout=300
worker.worker4.type=ajp13
worker.worker4.host=gnode-2
worker.worker4.port=28081
worker.worker4.lbfactor=1
worker.worker4.socket_keepalive=1
worker.worker4.socket_timeout=300
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=worker1,worker2,worker3,worker4
 
保存退出 (ESC + :wq)
 
2.3.3.3 编辑jk.conf
 
$ sudo vi mods-available/jk.conf 
将JkWorkersFile开头的一行替换为
 

JkWorkersFile /etc/apache2/workers.properties 

 
2.3.3.3 编辑000-default文件
 
$ sudo vi /etc/apache2/sites-enabled/000-default 
去掉下面一行
 
DocumentRoot /var/www  
替换为
 
JkMount /* loadbalancer
 
保存退出(ESC + :wq) 
 
2.3.3.4 重启apache2服务
 
$ sudo service apache2 restart
 
 
2.3.3.5 在DAS Web Admin Console中激活http listener的JK Listener属性
 
在管理控制台左侧面版选择 Configurations->gcluster-config->HTTP Service ->Http Listeners-> http-listener-1,在右侧的网页中选中JK Listener对应的checkbox,保存
 

 
最后可以通过负载均衡器对应的服务地址来访问之前部署的应用
 
 
2.3.4 使用Visualvm远程监控虚拟机实例
 
远程JVM监控与本地JVM监控能力和配置上都有很大不同,如果能够本地监控则选择本地监控,按照VisualVM自己的说法,根据文中给出的配置,远程监控的能力如下:
 
  • Attachable: no
  • Basic info supported: yes
  • System properties supported: yes
  • Monitoring supported: yes
  • CPU monitoring supported: yes
  • Memory monitoring supported: yes
  • GC activity monitoring supported: yes
  • Class monitoring supported: yes
  • Thread monitoring supported: yes
  • Thread dump supported: yes
  • Heap dump supported: no                        /*可以完成heap dump到远端机器,然后再通过scp复制回本地查看*/
  • Heap dump on OOME supported: no
 
远程JVM监控需要做三件事(如果不需要远程Profile的话,网上说可以通过ssh tunel的方式):
  • 开启远程JVM的JMX服务功能
  • 开启远程机器上的jstatd服务
  • 在Visualvm的Applications面板中添加远程主机
2.3.4.1 开启远程JVM的JMX服务功能
 
通常开启JMX服务,只需要在Java启动时添加如下虚拟机参数
 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=1099            /*JMX服务端口*/
 
在NAT网络中,如果JMX客户机在NAT网络的网关上,则还需要添加下面的虚拟机启动参数
-Djava.rmi.server.hostname=hostname                       /*运行JMX服务的主机名称,JMX客户端所在主机可以通过该名称与JMX服务器建立连接*/
 
对于我们的群集实验环境,稍有特别:
  1. 服务主机名是变量,因为gcluster中配置了两个节点,一个节点对应一个主机名称
  2. 端口号是变量,因为每一台节点上运行两个服务器实例,每一个服务器实例要单独制定一个服务端口;
为了解决这个小问题,我们需要使用Glassfish 配置的"系统变量"功能,如下图:
 
点击左侧的Configurations->gcluster-config->System Properties节点,在右侧打开的网页的 "Additional Properties" 表格中添加新的变量名称,本里添加了一个叫做“INSTANCE_EXTERNAL_IP”的变量,用来给出不同实例的主机名。另外的JMX服务端口是系统内建的一个变量,也在该表格中,叫做"JMX_SYSTEM_CONNECTOR_PORT"。
 
在添加过程中,首先给出变量名称,然后是默认值,保存后,在通过Instance Values来给出每一个实例对应的值,如下图所示:
 
其中INSTANCE_EXTERNAL_IP设定如下,具体IP地址或者主机名都可以:
 
对于JMX_SYSTEM_CONNECTOR_PORT,只需要给出两个存在冲突的端口号即可,如下图所示:

 
变量设定完成后,需要给群集实例添加虚拟机参数
 
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=${JMX_SYSTEM_CONNECTOR_PORT}
-Djava.rmi.server.hostname=${INSTANCE_EXTERNAL_IP}
 
如下图所示,点击管理控制台左侧的Configurations->gcluster-config->JVM Settings,在右侧打开的网页中,选择JVM Options标签页,在Options表格中,加入上面给出的四个变量。保存后,重启群集gcluster,配置就完成了。
 
 
2.3.4.2  开启远程机器上的jstatd服务
 
通过MacOS系统自带的终端程序 ssh登陆gnode-1和gnode-2两个节点,分别执行下面的命令:
 
$ ssh asadmin@gnode-1 #登陆后执行下面的命令
asadmin@gnode-1$ jstatd -J-Djava.security.policy=/home/asadmin/runtimes/jstatd.all.policy -p 2020 -J-Djava.rmi.server.hostname=gnode-1& 

 
类似的
 
$ ssh asadmin@gnode-2 #登陆后执行下面的命令
asadmin@gnode-1$ jstatd -J-Djava.security.policy=/home/asadmin/runtimes/jstatd.all.policy -p 2020 -J-Djava.rmi.server.hostname=gnode-2& 

 
2.3.4.3 在Visualvm的Applications面板中添加远程主机 
 
可以使用jdk自带的jvisualvm,或者在 http://visualvm.java.net/ 下载安装独立版本。
注:MacOS随机的jdk可能不包含jvisualvm。又或者jdk升级以后,在MacOS系统中,jvisualvm的链接可能会失效,此时可以找到jvisualvm的实际位置,然后通过ln -s的命令完成修复,此处不多赘述。
 
启动VisualVM,如下图,在“远程”节点上(右键)打开上下文菜单,选择”添加远程主机(H)...“
 
在打开的对话框中输入主机名以及jstatd链接的端口号
 

按照相同的方式,再添加远程主机 gnode-2
 
如果gnode-1和gnode-2两个虚拟主机中jstatd和gcluster的4个instance都处于服务运行状态,那么这些可被管理的对象会自动出现在VisualVM的“应用程序” -> "远程"节点下,如下图所示:
 
 
继续为各个实例添加JMX连接
 
 
按下图为instance01配置JMX连接
 

 
类似的再给instance02, 03, 04配置,连接分别为:
 
gnode-2:28686
gnode-1:28687
gnode-2:28687
 
添加完成后,会在“远程”下出现额外的4个GlassFish节点,并且图表中带有JMX字样,如下图所示。
 

 
双击4个带有JMX字样的节点,打开后可以调整视图,即可观察远程JVM的CPU, MEMORY,垃圾回收等各种状态。
 
点击VisualGC标签页,则可以看到如下图的Generational GC内存分布情况,以及垃圾回收所用时间等等。
 

 
至此,服务器实验环境搭建完毕。
 
第三部分 理解Glassfish Cluster中的Session复制
 
使用Chrome浏览器向其中的一个实例发送请求,并监视网络中的超文本传输
 
第一次的请求与响应的报头
 
     .     Request URL: http://gnode-1:28080/LotteryAnnotation-war/PlayLotteryServlet
     .     Request Method:GET
     .     Status Code:200 OK
     . Request Headersview source
     .     Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
     .     Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
     .     Accept-Encoding:gzip,deflate,sdch
     .     Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
     .     Cache-Control:max-age=0
     .     Connection:keep-alive
     .     Host:gnode-1:28080
     .     User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
     . Response Headersview source
     .     Content-Length:1815
     .     Content-Type:text/html;charset=ISO-8859-1
     .     Date:Fri, 05 Apr 2013 23:34:09 GMT
     .     Server:GlassFish Server Open Source Edition 3.1.2.2
     .     Set-Cookie:JSESSIONID=c8cd2fede69e850da697c2fe786a; Path=/LotteryAnnotation-war; HttpOnly
     .     Set-Cookie:JSESSIONIDVERSION=2f4c6f7474657279416e6e6f746174696f6e2d776172:0; Path=/LotteryAnnotation-war; HttpOnly
     .     Set-Cookie:JREPLICA=instance03; Path=/LotteryAnnotation-war; HttpOnly
     .     X-Powered-By:Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Sun Microsystems Inc./1.6)
 
第二次的 请求与响应的报头
     .    
     .     Request Method:GET
     .     Status Code:200 OK
     . Request Headersview source
     .     Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
     .     Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3
     .     Accept-Encoding:gzip,deflate,sdch
     .     Accept-Language:en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4
     .     Connection:keep-alive
     .     Cookie:JSESSIONID=c8cd2fede69e850da697c2fe786a; JSESSIONIDVERSION=2f4c6f7474657279416e6e6f746174696f6e2d776172:0; JREPLICA=instance03
     .     Host:gnode-1:28080
     .     User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_3) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.160 Safari/537.22
     . Response Headersview source
     .     Content-Length:1815
     .     Content-Type:text/html;charset=ISO-8859-1
     .     Date:Fri, 05 Apr 2013 23:35:36 GMT
     .     Server:GlassFish Server Open Source Edition 3.1.2.2
     .     Set-Cookie:JSESSIONIDVERSION=2f4c6f7474657279416e6e6f746174696f6e2d776172:1; Path=/LotteryAnnotation-war; HttpOnly
     .     Set-Cookie:JREPLICA=instance03; Path=/LotteryAnnotation-war; HttpOnly
     .     X-Powered-By:Servlet/3.0 JSP/2.2 (GlassFish Server Open Source Edition 3.1.2.2 Java/Sun Microsystems Inc./1.6)

你可能感兴趣的:(cluster,集群,Glassfish)