您的位置:首页 > 运维架构 > Tomcat

负载均衡软件之Apache以及和tomcat整合

2015-01-05 12:35 295 查看
Apache不仅可以作为WEB服务器,也能够作为负载均衡服务器或者反向代理服务器。

部分文字和内容来自网络。

首先,Apache并不是用来设计做负载均衡服务器的,如果需要使用Apache的负载均衡功能,需要手动开启Apache的mod_proxy模块。

利用Apache做负载均衡,有一些基本配置

1).基本配置

假设有一个域名为:www.a.com 的网站要用apache作为负载均衡设备, 首先需要启用Apache的几个必须的模块:

Httpd.conf代码

LoadModule proxy_modulemodules/mod_proxy.so

LoadModule proxy_balancer_modulemodules/mod_proxy_balancer.so

LoadModule proxy_http_modulemodules/mod_proxy_http.so



mod_proxy提供代理服务器功能,mod_proxy_balancer提供负载均衡功能, mod_proxy_http让代理服务器能支持HTTP协议。如果把mod_proxy_http换成其他协议模块(如mod_proxy_ftp),能支持其他协议的负载均衡。



然后要添加以下配置:

Httpd.conf代码



ProxyRequests Off

<Proxy balancer://mycluster>

BalancerMemberhttp://node-a.myserver.com:8080

BalancerMemberhttp://node-b.myserver.com:8080

</Proxy>

ProxyPass / balancer://mycluster/

# 警告:以下这段配置仅用于调试,绝不要添加到生产环境中!!!

<Location /balancer-manager>

SetHandler balancer-manager

order Deny,Allow

Deny from all

Allow from localhost

</Location>



注:node-a.myserver.com,node-b.myserver.com是另外两台服务器的域名,不是当前服务器的域名



从上面的 ProxyRequests Off 这条可以看出,实际上负载均衡器就是一个反向代理,只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer:// 协议:



ProxyPass / balancer://mycluster协议地址可以随便定义。然后,在<Proxy>段中设置该balancer协议的内容即可。 BalancerMember指令可以添加负载均衡组中的真实服务器地址。



下面那段<Location /balancer-manager>是用来监视负载均衡的工作情况的,调试时可以加上(生产环境中禁止使用!),然后访问 http://localhost/balancer-manager/ 即可看到负载均衡的工作状况。



OK,改完之后重启服务器,访问你的Apache所在服务器的地址(www.a.com),即可看到负载均衡的效果了。



出错提示:

访问网页提示Internal Serveral Error,察看error.log文件

Error.log代码



[warn] proxy: No protocol handler wasvalid for the URL /admin/login_form. If you are using a DSO version ofmod_proxy, make sure the proxy submodules are included in the configurationusing LoadModule.





原因是配置:# ProxyPass / balancer://mycluster 可能少了一个/



2). 负载比例分配

打开 balancer-manager 的界面,可以看到请求是平均分配的。



如果不想平均分配怎么办?给 BalancerMember 加上 loadfactor 参数即可,取值范围为1-100。比如你有三台服务器,负载分配比例为 7:2:1,只需这样设置:

Httpd.conf代码

复制代码 代码如下:



ProxyRequests Off

<Proxy balancer://mycluster>

BalancerMemberhttp://node-a.myserver.com:8080 loadfactor=7

BalancerMemberhttp://node-b.myserver.com:8080 loadfactor=2

BalancerMemberhttp://node-c.myserver.com:8080 loadfactor=1

</Proxy>

ProxyPass / balancer://mycluster





3).负载分配算法



默认情况下,负载均衡会尽量让各个服务器接受的请求次数满足预设的比例。如果要改变算法,可以使用lbmethod 属性。如:

Httpd.conf代码

ProxyRequests Off

<Proxy balancer://mycluster>

BalancerMemberhttp://node-a.myserver.com:8080 loadfactor=7

BalancerMemberhttp://node-b.myserver.com:8080 loadfactor=2

BalancerMember http://node-c.myserver.com:8080loadfactor=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>

BalancerMemberhttp://node-a.myserver.com:8080

BalancerMemberhttp://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。



Tomcat 和 Apache的负载均衡组

下面是2个tomcat加一个Apache做的负载均衡组,供参考。

准备工作:

1. 使用tomcat免安装版,放在不同的目录下,tomcat使用不同的端口。

2. 安装JDK;

3. 下载安装apache_2.2.11-win32-x86-no_ssl.msi



apache使用的是apache_2.2.11-win32-x86-no_ssl.msi。如果版本低于2.2Apache负载均衡的配置要有所不同,因为这个2.2.11和2.2.8版本集成了jk2等负载均衡工具,所以配置要简单许多。

把Apache安装为运行在80端口的Windows服务,安装成功后在系统服务列表中可以看到Apache2.2服务。服务启动后在浏览器中输入http://localhost进行测试,如果能看到一个"Itworks!"的页面就代表Apache已经正常工作了。



在Apache安装目录下找到conf/httpd.conf文件,去掉以下文本前的注释符(#)以便让Apache在启动时自动加载代理(proxy)模块。



LoadModuleproxy_module modules/mod_proxy.so

LoadModuleproxy_ajp_module modules/mod_proxy_ajp.so

LoadModuleproxy_balancer_module modules/mod_proxy_balancer.so

LoadModuleproxy_connect_module modules/mod_proxy_connect.so

LoadModuleproxy_ftp_module modules/mod_proxy_ftp.so

LoadModuleproxy_http_module modules/mod_proxy_http.so





向下拉动文档找到<IfModuledir_module>节点,在DirectoryIndexindex.html后加上index.jsp,这一步只是为了待会配置完tomcat后能看到小猫首页,可以不做。继续下拉文档找到Include conf/extra/httpd-vhosts.conf,去掉前面的注释符。



然后打开conf/extra/httpd-vhosts.conf,配置虚拟站点,在最下面加上

<VirtualHost*:80>

ServerAdmin管理员邮箱

ServerNamelocalhost

ServerAliaslocalhost

ProxyPass/ balancer://sy/ stickysession=jsessionid nofailover=On

ProxyPassReverse/ balancer://sy/

ErrorLog"logs/sy-error.log"

CustomLog"logs/sy-access.log" common

</VirtualHost>



然后回到httpd.conf,在文档最下面加上



ProxyRequestsOff

<proxybalancer://sy>

BalancerMemberajp://127.0.0.1:8009 loadfactor=1 route=jvm1

BalancerMemberajp://127.0.0.1:9009 loadfactor=1 route=jvm2

</proxy>



ProxyRequestsOff 是告诉Apache需要使用反向代理,ip地址和端口唯一确定了tomcat节点和配置的ajp接受端口。loadfactor是负载因子,Apache会按负载因子的比例向后端tomcat节点转发请求,负载因子越大,对应的tomcat服务器就会处理越多的请求,如两个tomcat都是1,Apache就按1:1的比例转发,如果是2和1就按2:1的比例转发。这样就可以使配置更灵活,例如可以给性能好的服务器增加处理工作的比例,如果采取多台服务器,只需要修改ip地址和端口就可以了。route参数对应后续tomcat负载均衡配置中的引擎路径(jvmRoute)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: