环境: CentOS:6.5X86_64 JDK: jdk1.8.0_31 Apache :Apache/2.2.15 (Unix) Tomcat-connectors:tomcat-connecto
环境:
CentOS: 6.5X86_64
JDK: jdk1.8.0_31
Apache :Apache/2.2.15 (Unix)
Tomcat-connectors:tomcat-connectors-1.2.40-src.tar.gz
GlassFish Server Open Source Edition 4.1 (build 13)
官网下载地址https://glassfish.java.net/download.html
本文下载使用用的是跨平台通用安装包glassfish-4.1.zip
作者:梨子
时间:2015-6-18
目录
1.配置准备.
1.1安装操作系统
1.2 Java环境
1.3准备集群所需网络环境(重要)
1.4防火墙策略
2.DAS(n90)安装GlassFish
2.1安装请参考centos-glassfish安装与配置文档
2.2访问管理页面
3.配置集群(通过浏览器界面)
3.1添加节点(n82和n83)
3.2新建集群
3.3设置JVM参数
3.4创建JK监听器
4.启动集群(测试集群是否创建成功)
5.Apache配置
5.1安装apache http server和tomcat-connectors
5.2配置 httpd.conf和 worker .properties httpd.conf 文件
6.Glassfish集群应用部署:
7.Glassfish集群负载测试:
备注:
1.配置准备.
1.1安装操作系统
安装所需操作系统,并为root用户设置强密码。
1.2 Java环境
卸载自带的OpenJDK(如果存在),安装Oracle的标准Java环境(这一步请参考Linux下安装JDK1.8.0_31)。
1.3准备集群所需网络环境(重要)
本文用了3台计算机,分别设置了固定IP(推荐)和唯一的主机名,
其中n90为集群DAS控制主机。
为了模拟DNS服务器解析,修改每台计算机的/etc/hosts文件,追加以下内容。
192.0.0.82 n82 节点1
192.0.0.83 n83 节点2
192.0.0.90 n90 (DAS域以及Apache前端web服务器)
1.4防火墙策略
为了便于操作,本文所使用的计算机已经全部关闭了防火墙。如果有安全需要,则在配置集群后重新启用防火墙,并允许在集群配置的过程中所需端口接入即可。
2.DAS(n90)安装GlassFish
2.1安装请参考centos-glassfish安装与配置文档
运行GlassFish,启动GlassFish
/decompress/glassfish/glassfish4/bin/asadmin start-domain
2.2访问管理页面
此时GlassFish已经可以在远程主机上通过https://192.0.0.90:4848访
问,默认用户名:admin密码为:test123456
3.配置集群(通过浏览器界面)
3.1.添加节点(n82和n83)
节点的创建方式有3种(DCOM,SSH,CONFIG),此次我们创建节点的方式选用SSH。
打开常见任务——节点——新建,按下图依次添加节点。
n83节点创建跟n82一样,如上图。
3.2新建集群
打开常见任务——集群——新建
3.3设置JVM参数
如果需要使用 apache 的会话粘黏功能,还需要添加一个 jvm 参数
“jvmRoute”,并为每个 server 实例设置独立的值。
1) 点击 DAS 控制台左侧“配置”,找到之前配置的集群的配置文件,名称
为“c1-config”,选择其中的“JVM 设置”,选择右边面板的
“ JVM 选 项 ”, 单 击 “ 添 加 JVM 选项” ,新增
“-DjvmRoute=${AJP_INSTANCE_NAME}”
为集群中的每个 server 实例添加“AJP_INSTANCE_NAME”实例值。选择DAS 控制台“集群”,选择右侧面板中需要配置的集群的名字,选择“实例”,单击需要配置的实例名称,选择“属性”,单击“添加属性”,添加
“ AJP_INSTANCE_NAME ”, 并 为 其 赋 值 。 这里为每个实例添加的
AJP_INSTANCE_NAME 的值即为后面 apache 的配置文件 worker.properties
中每个 worker 的名字(两者一定要相同) 。
具体配置如下:首先点Clusters-c1-Instances-c1n82-properties
3.4创建JK监听器
通过 apache 之后浏览器端每次都是先访问,同一个地址(apache 服务器地址),再通过 apache 对请求做转发,这样每次请求的域一致,虽然每次可能由不同的 server 实例提供服务但是 sessionID 不会变。故此,如果想做 session 复制必然得使用 web 服务器。
首先点Configurations-c1-config-Network config-Network Listeners,点击右侧面板“新建”,填写“名称”、“端口” ,并勾选“JK 监听程序”为“已启用”,其中“端口”通过系统属性变量${JAP_PORT}来指定,如集群中所有实例均不在同一台物理机上也可直接在这里填写端口号。如本次我配置的监听端口号为8009。
填写完毕,点击“保存”后如下:
4.启动集群(测试集群是否创建成功)
在集群管理界面中点选启动集群,或者在控制机执行命令。
<GlassFish_Home>/bin/#./asadmin start-cluster c1
5.Apache配置
在前面我们配置 glassfish 时已经为集群添加了 jk 监听器,目的就是为了使用 apache 做 LB。本节将讲述如何配置 apache,使之能够使用 mod_jk 模
式为我们集群中的各 server 实例做代理,并最终完美实现负载均衡、session
复制。
5.1安装apache http server和tomcat-connectors
Apache服务器yum安装就可以,此次我的Apache版本为,Apache/2.2.15 (Unix)
tomcat-connectors-1.2.40-src.tar.gz从官网下载,地址如下:
http://www.apache.org/dist/tomcat/tomcat-connectors/jk/
配置参考官网文档:
(http://httpd.apache.org/docs/2.2/install.html) and mod_jk
(http://tomcat.apache.org/connectors-doc/webserver_
howto/apache.html)
安装配置mod_jk:
本文采用源码方式安装mod_jk:
#tar zxf tomcat-connectors-1.2.40-src.tar.gz
#cd tomcat-connectors-1.2.40-src/native/
#./configure --with-apxs=/usr/sbin/apxs//如果找不到路径;请yum install httpd-devel
#make
然后将native/apache-2.0中到mod_jk.so 拷贝到/etc/httpd/modules/
,拷贝完成后,#cd /usr/lib64/httpd/modules/,#ls,可以看到mod_jk.so已经在modules目录下。
5.2配置 httpd.conf和 worker .properties httpd.conf 文件
Httpd.conf配置如下:
worker .properties httpd.conf配置如下:如果没有这个文件自己创建,要在Apache,conf目录下创建。
worker.list=c1
worker.c1n82.type=ajp13 c1n82为glassfish的AJP_INSTANCE_NAME一致
worker.c1n82.host=192.0.0.82
worker.c1n82.port=8009 要与glassfish监听的端口一致
worker.c1n82.lbfactor=1 负载的权重值,越高表示分得的请求越多
worker.c1n82.socket_keepalive=1
worker.c1n82.socket_timeout=300
worker.c1n83.type=ajp13
worker.c1n83.host=192.0.0.83
worker.c1n83.port=8009
worker.c1n83.lbfactor=1
worker.c1n83.socket_keepalive=1
worker.c1n83.socket_timeout=300
worker.c1.type=lb 用于负载均衡分发的控制器,名称为lb
worker.c1.sticky_session=1 启用session 复制
worker.c1.balance_workers=c1n82,c1n83
Worker.list:
当启动服务器的时候,Web服务器插件会把这些出现在worker.list属性中出现名字的worker实例化,而这些也就是你可以用来映射请求的worker。
ajp13 Worker 属性:
ajp13类型标记的workers使用ajpv13协议通过TCP/IP的服务套接字(sockets)来传递请求给Tomcat处理。
ajpv12和ajpv13 的主要不同之处在于:
• ajpv13是一个变长字节协议。它依照使用频率最多的字符串编码为最小整数的方式对请求数据做一定的压缩。
• ajpv13 会重用打开的套接字,并且把他们保留给以后的请求 (记住,这是当你的Web服务器和Tomcat之间有防火墙时)。
• ajpv13 针对SSL信息有专有的策略以便容器能够实现与SSL关联的方法,例如isSecure()。Type=ajp13,这种worker知道如何使用ajpv13协议去给用来外部处理的worker传递一个请求。
socket_keepalive:
当防火墙位于web server与Tomcat之间时,防火墙将尝试断开未激活的网络连接。此属性将告诉操作系统在未激活的连接中发送KEEP_ALIVE信息(发送间隔时间依赖于操作系统的设置,一般为120秒),这样将防止防火墙切断未激活的网络连接。
但此设置并不是万能钥匙,它对于某些防火墙也无能为力。
socket_timeout:
此属性说明连接在未激活的状况下持续多久,web server将主动切断之。这是一个使Tomcat端的陈旧线程不致过多的好方法,但是也带来了在下一次请求到来时需要重新打开socket的开销。此属性与cache_timeout有类似的功效,但是它工作在non-cache模式。
6.Glassfish集群应用部署:
首先点集群,选择我们所建立的集群如本次我建立的集群为c1,然后选集群applications,点deploy部署应用
然后部署应用有2个来源,可以选择你使用远程本地主机的war包,也可以选择服务器本地的war包,此次我选择的是服务器本地的war包。最后要选择application应用的对象,targets,Available Targets:将集群c1,add到selectd-targets,点save保存配置。具体配置如下图:
配置成功的页面如下:
7.Glassfish集群负载测试:
首先访问自己部署的应用网站名字xmjieli:由于端口8009端口监听所以不能访问
Apache负载测试:访问192.0.0.90/xxxxli/,同台客户端访问时间2015-6-18,10:30和访问时间2015-6-18,10:33:
在logs目录下,vi server.log,查看日志
通过上面访问192.0.0.92/xxxxli/的不同访问时间,可以查看各节点的日志可以得到,第一次访问分配给节点n83,第二次访问分配给n82。
因为Apache负载,我们设置的平均分配lbfactor=1,故各节点被分配的概率分别为百分之50。综上glassfish集群负载测试成功。
备注:
如果是ssh方式配置的节点 启动是回失败的 报错误 line 54: exec: java: not found,则需要在配置前,在DAS控制机(192.0.0.90)上,在/decompress/glassfish/glassfish4/glassfish/config/asenv.conf,配置#vi asenv.conf,在asenv.conf文件内,加入AS_JAVA="/usr/local/jdk1.8.0_31",然后再重新创建节点和集群。