2014年8月4日星期一

EAP_011:配置EAP集群(Standalone方式)

运行环境:RHEL 6.5 + Jboss EAP 6.2 + Apache Httpd 2.2.15-29 + mod_cluster 1.2.6 Final

本文介绍如何使用Standalone方式配置Jboss EAP 集群,具体的实现方式是使用 Apache httpd + mod_cluster作为负载均衡。
Apache httpd + mod_cluster作为负载均衡器和应用服务器构建企业应用集群是非常普遍的一种方式,当前主要三大应用服务器:JBoss,Weblogic,Websphere都支持Apache httpd作为负载均衡器。
为了简单起见,这里Apache Httpd、Jboss EAP node1、Jboss EAP node2是在同一台物理机器上。

httpd是Apache基金会的,mod_cluster是Jboss社区的。这里的httpd就是我们原来说的Apache Web Server,由于后来Apache基金会越来越有名,就把起家的Apache更名为httpd,也更符合其http server的特性。而Apache现在成为Apache基金会下几十种开源项目的标识。

1. 下载mod_cluster相关安装包
在 JBoss 社区mod_cluster页面:http://mod-cluster.jboss.org,选择版本1.2.6 Final。
http://mod-cluster.jboss.org/downloads/1-2-6-Final-bin。
下载这些软件包:
(1)linux-x86_64 mod_cluster binaries:mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz
(2)linux-x86_64 httpd+ssl binaries:mod_cluster-1.2.6.Final-linux2-x64-ssl.tar.gz
(3)linux-x86_64 httpd binaries:mod_cluster-1.2.6.Final-linux2-x64.tar.gz
这个实验只需要mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz。

2. 解压mod_cluster-1.2.6.Final-linux2-x64-so.tar.gz,得到如下包:
(1)mod_advertise.so
(2)mod_manager.so
(3)mod_proxy_cluster.so
(4)mod_slotmem.so

3. 安装httpd
(1)su -
(2)yum install httpd
Setting up Install Process
Package httpd-2.2.15-29.el6_4.x86_64 already installed and latest version
Nothing to do
RHEL 6.5 已经安装了httpd 2.2.15,所以就不用安装了。

4. 编辑/etc/httpd/conf/httpd.conf,让httpd监听在80端口:
Listen 10.66.192.21:80
经过测试,如果是本机,省略IP地址也可以。

5. 复制第2步解压的所有.so文件到/etc/httpd/modules目录
这些包用来维护、管理Apache httpd与后台Jboss EAP之间的连接,通信。

6. 编辑/etc/conf/httpd.conf,注释掉mod_proxy_balancer模块,因为此模块与mod_cluster相关模块不兼容。
# LoadModule proxy_balancer_module modules/mod_proxy_balancer.so 

7. 在httpd/conf.d目录下创建JBoss_HTTP.conf文件,将如下内容添加到此文件:

# add mod_cluster reference module 
LoadModule slotmem_module modules/mod_slotmem.so 
LoadModule manager_module modules/mod_manager.so 
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so 
LoadModule advertise_module modules/mod_advertise.so

#Listen 10.66.192.21:6666 
Listen 6666
#<VirtualHost 10.66.192.48:6666> 
<VirtualHost *:6666> 
    <Directory /> 
        Order deny,allow 
        Allow from all 
    </Directory> 
    <Location /mod_cluster-manager> 
        SetHandler mod_cluster-manager 
        Order deny,allow 
        Allow from all 
    </Location> 
          KeepAliveTimeout 60 
          MaxKeepAliveRequests 0 
          AdvertiseFrequency 5 
          ManagerBalancerName kylincluster 
          ServerAdvertise Off 
          EnableMCPMReceive On  
</VirtualHost>

8. 重启Apache httpd:# service httpd restart
启动时,会报告如下失败信息:
正在启动 httpd:(13)Permission denied: make_sock: could not bind to address [::]:6666
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:6666
no listening sockets available, shutting down
Unable to open logs

这是因为SELinux的安全策略导致的,修改如下:
# vi /etc/sysconfig/selinux,内容如下:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
执行 # setenforce 0, 设置SELinux 成为permissive模式。
说明:如果执行# setenforce 1,将会把SELinux 设置成为enforcing模式。
执行# getenforce,查看确认SELinux 已经设置为permissive模式。
再次执行# service httpd restart,这次成功了。
如果为了省事,可以直接设置SELINUX=disabled,这样重启以后,不用每次执行setenforce 0。

9. 编辑Jboss EAP node1的standalone/configuration/standalone-ha.xml文件,找到urn:jboss:domain:modcluster部分,修改mod-cluster-config的属性如下:
<mod-cluster-config advertise-socket="modcluster" proxy-list="10.66.192.21:6666" balancer="kylinBalancer" sticky-session="true" connector="ajp">

10. 编辑Jboss EAP node2的standalone/configuration/standalone-ha.xml文件,找到urn:jboss:domain:modcluster部分,修改mod-cluster-config的属性如下:
<mod-cluster-config advertise-socket="modcluster" proxy-list="10.66.192.21:6666" balancer="kylinBalancer" sticky-session="true" connector="ajp">

11. 启动Jboss EAP node1:
./standalone.sh -c standalone-ha-cluster-node1.xml -b 10.66.192.21 -bmanagement 10.66.192.21 -u 239.255.100.100 -Djboss.node.name=node1 -Djboss.mod_cluster.jvmRoute=node1 

12. 启动Jboss EAP node2:
./standalone.sh -c standalone-ha-cluster-node2.xml -Djboss.socket.binding.port-offset=100 -b 10.66.192.21 -bmanagement 10.66.192.21 -u 239.255.100.100 -Djboss.node.name=node2 -Djboss.mod_cluster.jvmRoute=node2

13. 发布sessionReplication应用
(1)登录 http://10.66.192.21:6666/mod_cluster-manager,显示mod_cluster界面。
(2)登录 http://10.66.192.21:9990/console,显示节点1管理界面。
(3)登录 http://10.66.192.21:10090/console,显示节点2管理界面。
(4)分别发布 webcluster-session-replication.war 到节点1和节点2上。
 为了能够让其它机器能够访问10.66.192.21,需要把10.66.192.21的防火墙关掉:
 (1)iptables -F
 (2)iptables -L -n
 (3)临时停掉防火墙:/etc/init.d/iptables stop
 (4)彻底关掉防火墙:chkconfig iptables off

14. 测试集群效果
(1)访问 http://10.66.192.21/sessionReplication,点击add按钮几次,会发现节点1处理了请求。
(2)由于节点1和节点2 Session状态复制,所以添加在节点1上的三条信息也复制到节点2,直接访问节点2(http://10.66.192.21:8180/sessionReplication)会看到执行(1)后的内容已经存在于节点2上。
(3)容错性高可用性测试:停掉节点1,再次执行(1),会发现请求会自动切换到节点2上。

参考文献:
1. http://blog.csdn.net/kylinsoong/article/details/12292707
2. http://hongran.diandian.com/post/2011-08-05/3562358
3. http://blog.csdn.net/skmbw/article/details/10511237

没有评论: