配置与理解Glassfish Cluster【28张图片已修复】
第一部分 实验目的
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台虚拟主机。为了节省安装时间,可以采取下面的安装配置步骤来完成: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?转载自?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节点,如下图所示?
?在上图中点击New按钮,在新打开的网页中,如下图所示,按照网页中输入框中的内容创建gnode-1?
?按照相同的方法,在按照下图网页输入框中内容来创建gnode-2?
?2.3.2.5 创建一个Cluster
?点击管理控制台左侧Clusters节点,如下图所示?
点击上图中的New按钮, 并按照下图网页中输入框内容所示,创建一个名为gcluster的群集?如果创建完成后,没有遇到任何告警信息,那么群集的最基本配置的就成功了。?注意:?如果遇到告警信息,请确保每个主机的虚拟主机名称, IP地址与主机名称映射关系,与Glassfish Nodes设定时,填入的主机名称务必保持一致。如果安装了防火墙软件,如iptables,在这个实验过程中请关闭防火墙。?
?最后在下图的表格中,选种gcluster群集,并点击"Start Cluster",过一会儿,如果能看到与下图中instances全部成功进入Running状态,恭喜!?
?当所有实例都成功启动后,可以将附带的样例彩票程序部署到gcluster上,?步骤如下:?首先另存附件到本地盘。LotteryAnnotation.ear
31.7 KB
?点击右侧网页的 Deploy 按钮,在打开的网页中, 首先将Targets部分的gcluster选中,点选Add按钮将其移动到Selected Targets列表,然后点击 “选择文件”, 在弹出的对话框中选择上一步中另存下来的文件。?文件加载完毕后,选中 Availability对应的checkbox如下图,最后点击OK部署该应用程序?
?部署成功后,应用会出现在 Deployed Applications表格中,如下图所示
点击应用程序的名字进入应用的详细页面,如下:?点击LotteryAnnotation-war.war后面对应的Launch按钮,网页会列出群集中所有可用的根URL如下图所示?
可以点选任何一个链接尝试该样例应用程序。?2.3.3 负载均衡配置
?负载均衡配置主要需要三个步骤:
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,保存?
?最后可以通过负载均衡器对应的服务地址来访问之前部署的应用?http://load-balancer/LotteryAnnotation-war/
?2.3.4 使用Visualvm远程监控虚拟机实例?远程JVM监控与本地JVM监控能力和配置上都有很大不同,如果能够本地监控则选择本地监控,按照VisualVM自己的说法,根据文中给出的配置,远程监控的能力如下:?
为了解决这个小问题,我们需要使用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
#登陆后执行下面的命令
?2.3.4.3?在Visualvm的Applications面板中添加远程主机??可以使用jdk自带的jvisualvm,或者在http://visualvm.java.net/?下载安装独立版本。注:MacOS随机的jdk可能不包含jvisualvm。又或者jdk升级以后,在MacOS系统中,jvisualvm的链接可能会失效,此时可以找到jvisualvm的实际位置,然后通过ln -s的命令完成修复,此处不多赘述。?启动VisualVM,如下图,在“远程”节点上(右键)打开上下文菜单,选择”添加远程主机(H)...“?在打开的对话框中输入主机名以及jstatd链接的端口号?
asadmin@gnode-1$ jstatd -J-Djava.security.policy=/home/asadmin/runtimes/jstatd.all.policy -p 2020 -J-Djava.rmi.server.hostname=gnode-2&?
按照相同的方式,再添加远程主机?gnode-2?如果gnode-1和gnode-2两个虚拟主机中jstatd和gcluster的4个instance都处于服务运行状态,那么这些可被管理的对象会自动出现在VisualVM的“应用程序” -> "远程"节点下,如下图所示:??继续为各个实例添加JMX连接??按下图为instance01配置JMX连接?
?类似的再给instance02, 03, 04配置,连接分别为:?gnode-2:28686gnode-1:28687gnode-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 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)