首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

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

2013-11-27 
配置与理解Glassfish Cluster【28张图片已修复】第一部分 实验目的理解Glassfish V3.1.2.2 Cluster的工作原

配置与理解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【28张图片已修复】其中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/hosts192.168.107.131 ? ? ? das192.168.107.130 ? ? ? load-balancer192.168.107.129 ? ? ? gnode-1192.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地址。?配置与了解Glassfish Cluster【28张图片已修复】?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?转载自?http://www.gaggl.com/2012/04/installing-java6-jdk-on-ubuntu-12-04/??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?2.3.2.4 添加两个节点
                                  ?点击管理控制台左侧Nodes节点,如下图所示?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?在上图中点击New按钮,在新打开的网页中,如下图所示,按照网页中输入框中的内容创建gnode-1?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?按照相同的方法,在按照下图网页输入框中内容来创建gnode-2?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?2.3.2.5 创建一个Cluster
                                  ?点击管理控制台左侧Clusters节点,如下图所示?配置与了解Glassfish Cluster【28张图片已修复】
                                  点击上图中的New按钮, 并按照下图网页中输入框内容所示,创建一个名为gcluster的群集?配置与了解Glassfish Cluster【28张图片已修复】如果创建完成后,没有遇到任何告警信息,那么群集的最基本配置的就成功了。?注意:?如果遇到告警信息,请确保每个主机的虚拟主机名称, IP地址与主机名称映射关系,与Glassfish Nodes设定时,填入的主机名称务必保持一致。如果安装了防火墙软件,如iptables,在这个实验过程中请关闭防火墙。?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?最后在下图的表格中,选种gcluster群集,并点击"Start Cluster",过一会儿,如果能看到与下图中instances全部成功进入Running状态,恭喜!?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?当所有实例都成功启动后,可以将附带的样例彩票程序部署到gcluster上,?步骤如下:?首先另存附件到本地盘。配置与了解Glassfish Cluster【28张图片已修复】LotteryAnnotation.ear
                                  31.7 KB

                                  ?点击右侧网页的 Deploy 按钮,在打开的网页中, 首先将Targets部分的gcluster选中,点选Add按钮将其移动到Selected Targets列表,然后点击 “选择文件”, 在弹出的对话框中选择上一步中另存下来的文件。?配置与了解Glassfish Cluster【28张图片已修复】文件加载完毕后,选中 Availability对应的checkbox如下图,最后点击OK部署该应用程序?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?部署成功后,应用会出现在 Deployed Applications表格中,如下图所示配置与了解Glassfish Cluster【28张图片已修复】
                                  点击应用程序的名字进入应用的详细页面,如下:配置与了解Glassfish Cluster【28张图片已修复】?点击LotteryAnnotation-war.war后面对应的Launch按钮,网页会列出群集中所有可用的根URL如下图所示?配置与了解Glassfish Cluster【28张图片已修复】
                                  可以点选任何一个链接尝试该样例应用程序。?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,loadbalancerworker.worker1.type=ajp13worker.worker1.host=gnode-1worker.worker1.port=28080worker.worker1.lbfactor=1worker.worker1.socket_keepalive=1worker.worker1.socket_timeout=300worker.worker2.type=ajp13worker.worker2.host=gnode-2worker.worker2.port=28080worker.worker2.lbfactor=1worker.worker2.socket_keepalive=1worker.worker2.socket_timeout=300worker.worker3.type=ajp13worker.worker3.host=gnode-1worker.worker3.port=28081worker.worker3.lbfactor=1worker.worker3.socket_keepalive=1worker.worker3.socket_timeout=300worker.worker4.type=ajp13worker.worker4.host=gnode-2worker.worker4.port=28081worker.worker4.lbfactor=1worker.worker4.socket_keepalive=1worker.worker4.socket_timeout=300worker.loadbalancer.type=lbworker.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,保存?配置与了解Glassfish Cluster【28张图片已修复】
                                  ?最后可以通过负载均衡器对应的服务地址来访问之前部署的应用?http://load-balancer/LotteryAnnotation-war/
                                  ?配置与了解Glassfish Cluster【28张图片已修复】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 配置的"系统变量"功能,如下图:配置与了解Glassfish Cluster【28张图片已修复】?点击左侧的Configurations->gcluster-config->System Properties节点,在右侧打开的网页的 "Additional Properties" 表格中添加新的变量名称,本里添加了一个叫做“INSTANCE_EXTERNAL_IP”的变量,用来给出不同实例的主机名。另外的JMX服务端口是系统内建的一个变量,也在该表格中,叫做"JMX_SYSTEM_CONNECTOR_PORT"。?在添加过程中,首先给出变量名称,然后是默认值,保存后,在通过Instance Values来给出每一个实例对应的值,如下图所示:?其中INSTANCE_EXTERNAL_IP设定如下,具体IP地址或者主机名都可以:配置与了解Glassfish Cluster【28张图片已修复】?对于JMX_SYSTEM_CONNECTOR_PORT,只需要给出两个存在冲突的端口号即可,如下图所示:配置与了解Glassfish Cluster【28张图片已修复】
                                      ?变量设定完成后,需要给群集实例添加虚拟机参数?-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,配置就完成了。?配置与了解Glassfish Cluster【28张图片已修复】?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)...“配置与了解Glassfish Cluster【28张图片已修复】?在打开的对话框中输入主机名以及jstatd链接的端口号?配置与了解Glassfish Cluster【28张图片已修复】
                                      按照相同的方式,再添加远程主机?gnode-2?如果gnode-1和gnode-2两个虚拟主机中jstatd和gcluster的4个instance都处于服务运行状态,那么这些可被管理的对象会自动出现在VisualVM的“应用程序” -> "远程"节点下,如下图所示:?配置与了解Glassfish Cluster【28张图片已修复】?继续为各个实例添加JMX连接?配置与了解Glassfish Cluster【28张图片已修复】?按下图为instance01配置JMX连接?配置与了解Glassfish Cluster【28张图片已修复】
                                      ?类似的再给instance02, 03, 04配置,连接分别为:?gnode-2:28686gnode-1:28687gnode-2:28687?添加完成后,会在“远程”下出现额外的4个GlassFish节点,并且图表中带有JMX字样,如下图所示。?配置与了解Glassfish Cluster【28张图片已修复】
                                      ?双击4个带有JMX字样的节点,打开后可以调整视图,即可观察远程JVM的CPU, MEMORY,垃圾回收等各种状态。?点击VisualGC标签页,则可以看到如下图的Generational GC内存分布情况,以及垃圾回收所用时间等等。
                                      ?配置与了解Glassfish Cluster【28张图片已修复】
                                      ?至此,服务器实验环境搭建完毕。?第三部分 理解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 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???? .???? 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)