方案说明:
1.以两台linux为基础环境分别为
节点1:Hadoop00 10.10.10.11
节点2:Hadoop01 10.10.10.12
2.在两个节点分别安装TOMCAT,作为后端服务。
2.第1台机器上安装apache作为集群WEB服务器。
环境参数:JDK1.6以上,Apache-2.2.24,Tomcat-6.0.35
1.Tomcat安装和配置
登录节点1,下载TOMCAT
[root@hadoop00 ~]# cd /opt
[root@hadoop00 ~]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-6/v6.0.33/bin/apache-tomcat-6.0.33.tar.gz
[root@hadoop00 ~]# tar -zxvf apache-tomcat-6.0.33.tar.gz
部署测试工程cluster到TOMCAT
下载测试工程WAR包:http://dl.iteye.com/topics/download/00ce84ef-3579-3582-a0cd-18ce6b0bddfb
[root@hadoop00 ~]# cd /opt/apache-tomcat-6.0.33/webapps
[root@hadoop00 ~]# ls
cluster
测试节点TOMCAT部署
[root@hadoop00 opt]# /opt/apache-tomcat-6.0.33/bin/startup.sh
浏览器中访问 http://10.10.10.11:8080/cluster
拷贝节点1部署好的TOMCAT到节点2
[root@hadoop00 opt]# zip -r tomcat.zip apache-tomcat-6.0.33
[root@hadoop00 opt]# scp tomcat.zip root@10.10.10.12://opt/
tomcat.zip 100% 5412KB 5.3MB/s 00:01
登录节点2部署TOMCAT
[root@hadoop01 ~]# cd /opt/
[root@hadoop01 opt]# unzip tomcat.zip
启动和测试节点2
[root@hadoop00 opt]# /opt/apache-tomcat-6.0.33/bin/startup.sh
浏览器中访问 http://10.10.10.12:8080/cluster
Apache安装
本例假设Apache安装在/usr/local/apache/
Apache配置
检查LoadModule配置,vi打开/opt/apache2/conf/httpd.conf主配置文件
- LoadModule proxy_module modules/mod_proxy.so
- LoadModule proxy_connect_module modules/mod_proxy_connect.so
- LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
- LoadModule proxy_http_module modules/mod_proxy_http.so
- LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
- LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
- LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
- LoadModule ssl_module modules/mod_ssl.so
- LoadModule speling_module modules/mod_speling.so
- LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_ftp_module modules/mod_proxy_ftp.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_scgi_module modules/mod_proxy_scgi.so LoadModule proxy_ajp_module modules/mod_proxy_ajp.so LoadModule proxy_balancer_module modules/mod_proxy_balancer.so LoadModule ssl_module modules/mod_ssl.so LoadModule speling_module modules/mod_speling.so LoadModule rewrite_module modules/mod_rewrite.so
打开vhost配置的自配置文件引用
- # Virtual hosts
- Include conf/extra/httpd-vhosts.conf
# Virtual hosts Include conf/extra/httpd-vhosts.conf
配置http-vhost.conf以host方式配置代理转发
以VI方式打开/opt/apache-2.2.21/conf/extra/httpd-vhosts.conf
删除或注释掉原有的VirtualHost配置,加入如下配置
- <VirtualHost *:80>
- ErrorLog "logs/localhost-error_log"
- LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon
- CustomLog logs/localhost-access_log vcommon
- ProxyRequests Off
- ProxyPreserveHost on
- # apache+tomcat cluster
- ProxyPass / balancer://tomcat-cluster/
- ProxyPassReverse / balancer://tomcat-cluster/
- <Proxy balancer://tomcat-cluster/>
- BalancerMember http://10.10.10.11:8080 loadfactor=1
- BalancerMember http://10.10.10.12:8080 loadfactor=1
- ProxySet lbmethod=bybusyness
- </Proxy>
- </VirtualHost>
<VirtualHost *:80> ErrorLog "logs/localhost-error_log" LogFormat "%{Host}i %h %l %u %t \"%r\" %s %b" vcommon CustomLog logs/localhost-access_log vcommon ProxyRequests Off ProxyPreserveHost on # apache+tomcat cluster ProxyPass / balancer://tomcat-cluster/ ProxyPassReverse / balancer://tomcat-cluster/ <Proxy balancer://tomcat-cluster/> BalancerMember http://10.10.10.11:8080 loadfactor=1 BalancerMember http://10.10.10.12:8080 loadfactor=1 ProxySet lbmethod=bybusyness </Proxy> </VirtualHost>
保存后退出。
检查配置,启动apache
[root@hadoop00 bin]# ./httpd -S
[root@hadoop00 extra]# cd /opt/apache2/bin/
测试集群
1.浏览器访问测试:http://10.10.10.11/cluster
2.测试Load Balance
反复刷新浏览器,测试是否后端服务器是否切换
3.测试Failover
关闭其中一台后,反复刷新界面,测试是否可以正常使用。
----------------------------------------------------
二. 负载比例分配
打开 balancer-manager 的界面,可以看到请求是平均分配的。
如果不想平均分配怎么办?给 BalancerMember 加上 loadfactor 参数即可,取值范围为1-100。比如你有三台服务器,负载分配比例为 7:2:1,只需这样设置:
Httpd.conf代码
复制代码 代码如下:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080 loadfactor=7
BalancerMember http://node-b.myserver.com:8080 loadfactor=2
BalancerMember http://node-c.myserver.com:8080 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster
3).负载分配算法
默认情况下,负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用 lbmethod 属性。如:
Httpd.conf代码
复制代码 代码如下:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080 loadfactor=7
BalancerMember http://node-b.myserver.com:8080 loadfactor=2
BalancerMember http://node-c.myserver.com:8080 loadfactor=1
</Proxy>
ProxyPass / balancer://mycluster
ProxySet lbmethod=bytraffic
lbmethod可能的取值有:
lbmethod=byrequests 按照请求次数均衡(默认)
lbmethod=bytraffic 按照流量均衡
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)
各种算法的原理请参见Apache的文档。
2. 热备份(Hot Standby)
热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:
Httpd.conf代码
复制代码 代码如下:
ProxyRequests Off
<Proxy balancer://mycluster>
BalancerMember http://node-a.myserver.com:8080
BalancerMember http://node-b.myserver.com:8080 status=+H
</Proxy>
ProxyPass / balancer://mycluster
从 balancer-manager 界面中可以看到,请求总是流向 node-a ,一旦node-a挂掉, Apache会检测到错误并把请求分流给 node-b。Apache会每隔几分钟检测一下 node-a 的状况,如果node-a恢复,就继续使用node-a。
详细出处参考:http://www.jb51.net/article/31454.htm