如何使用Apache服务器配置负载均衡集群
的快速增长,特别是电子商务应用的发展,使Web应用成为目前最重要最广泛的应用,Web服务器动态内容越来越流行。
目前,网上信息交换量几乎呈指数增长,需要更高性能的Web服务器提供更多用户的Web服务,因此,Web服务器面临着访问量急剧增加的压力,对其处理能力和响应能力等带来更高的要求,如果Web 服务器无法满足大量Web访问服务,将无法为用户提供稳定、良好的网络应用服务。
由于客观存在的服务器物理内存、CPU 处理速度和操作系统等方面的影响因素,当大量突发的数据到达时,Web服务器无法完全及时处理所有的请求,造成应答滞后、请求丢失等,严重的导致一些数据包因延时而重发,使传输线路和服务器的负担再次增加。
传统的方法是提高Web 服务器的CPU 处理速度和增加内存容量等硬件办法但无论如何增加Web 服务器硬件性能,均无法满足日益增加的对用户的访问服务能力。
面对日渐增加的Web 访问服务要求,必须对Web 服务器按一定策略进行负载分配。
利用负载均衡[1]的技术,按照一定策略将Web 访问服务分配到几台服务器上,负载处理对用户透明,整体上对外如同一台Web 服务器为用户提供Web服务。
2 Web负载均衡结构
2.1 负载均衡
负载是一个抽象的概念,是表示系统繁忙程度,系统在一段时间空闲,该系统负载轻,系统在一段时间空忙,该系统负载重,影响系统负载的各种因数较多如果存在很多的数据包同时通过网络连向一台Web服务器,也就是网络的速度比网络所连接的设备速度快的情况下,系统负载不断增加,直到最大。
目前提高Web 服务器性能,使其具有较强负载能力,主要有两种处理思想[2]:
1)单机思想
不断升级服务器硬件性能,每当负载增加,服务器随之升级。
这随之将带来一些问题,首先,服务器向高档升级,花费资金较多;其次,升级频繁,机器切换造成服务中断,可能会导致整个服务中断;最后,每种架构的服务器升级总有一个极限限制。
2)多机思想
使用多台服务器提供服务,通过一定机制使它们共同分担系统负载,对单一的服务器没有太高的性能要求,系统负载增加,可以多增加服务器来分担。
对用户而言,整个系统仿佛是一台单一的逻辑服务器,这样的系统能够提供较强的可扩展性和较好的吞吐性能。
为了适应当前急剧增长的Web访问,有别于传统的单机思想,解决单机思想带来的一系列问题,本文提出了一种基于权值的策略分配负载。
2.2 负载均衡实现设备[2]
目前实现负载均衡需要两类的设备:服务器和分配器。
1)服务器(Server)
为用户提供真正的服务,也就是指给用户提供负载均衡服务的计算机设备,有关该设备的一些性能数据是负载均衡的主要依据之一。
2)分配器(Dispatcher)
由用户浏览器、Web 服务器组成两层结构Web 系统[2],如所示,实际是基于客户端的负载均衡。
负责给用户服务分配服务器,分配器的主要功能是根据客户和服务器的各种情况(这些情况要能反映服务器的负载状况或性能状况)通过一定的算法进行调动和分配工作,从而提高由服务器整体构成的网站的稳定性、响应能力。
它主要是集中所有的HTTP 请求,然后分配到多台Web服务器上处理,来提高系统的处理效率。
2.3 负载均衡系统结构
2.3.1 两层结构的负载均衡系统
在服务器上运行一个特定的程序,该程序相当一个客户端,它定期的收集服务器相关性能参数,如CPU、I/O、内存等动态信息,根据某种策略,确定提供最佳服务的服务器,将应用请求转发给它。
如果采集负载信息程序发现服务器失败,则找其它服务器作为服务选择。
这是一种动态负载均衡技术,但是每台服务器上必须安装特定的客户端程序,同时,为保证应用程序的透明性,需要对每个应用进行修改,能够将访问请求通过该客户端程序转发到其它服务器上,重定向方式进行,修改每一个应用程序,工作量十分大。
2.3.2 三层结构的负载均衡系统
由用户浏览器、负载均衡和Web服务器组成三层结构Web系统[2],如所示。
实际是基于服务器的负载均衡。
如果将基于客户端的负载均衡中客户端的负载均衡部分移植到一个中间平台,形成一个应用服务器,构成请求、负载均衡和服务器的三层结构,客户端应用不需要做特殊修改,透明的中间层将请求均衡的分布到不同的服务器。
据服务器直接连到 与否有两种多Web 服务器结构:隔离式(Separation) 和非隔离式(Unseparation)。
隔离式是服务器不直接连到,如所示,非隔离式是服务器直接连到,如所示。
隔离式中只有负载均衡器对外有一个IP 地址,所有的请求由负载均衡器分配到不同的Web Server,所有Web Server 的返回结果也经过负载均衡器传回给用户。
非隔离式中每一台Web Server 都有一个IP地址,用户请求经过负载均衡器分配到Web Server,而请求的应答不经过负载均衡器,直接传回用户。
为了减轻均衡器的负载,本文中采用了三层结构中的隔离方式。
2.4 负载均衡实现的方法
Web 负载均衡常见算法有[3]:循环调度算法(Round-Robin Scheduling)、加权循环调度算法(Weighted Round-Robin Scheduling) 、最小连接调度算法(Least-Connection Scheduling)、目标地址散列调度算法(Destination Hashing Scheduling)、源地址散列调度算法(Source Hashing Scheduling)。
本文采用基于权值的调度算法,也就是说权值大的服务器优先得到调度,本文在实现时是基于静态的权值,就是在开始的时候给每一个服务器配置一个默认的权值。
当然也可以根据实际运行情况再对每一个服务器的权值进行调整。
但是这需要实时的搜集每一个服务器的信息,如服务器的内存实用情况,响应速度等一些信息。
如何实现Apache,Tomcat集群和负载均衡
0, 环境说明
Apache :apache_2.0.55 1 个
Tomcat: apache-tomcat-5.5.17 (zip版) 2个
mod_jk:: mod_jk-apache-2.0.55.so 1个
第一部分:负载均衡
负载均衡,就是apache将客户请求均衡的分给tomcat1,tomcat2....去处理
1.安装apche,tomcat
/ 下载Apache 2.0.55
/download-55.cgi 下载tomcat5.5 zip版本(解压即可,绿色版)
/tomcat/tomcat-connectors/jk/binaries/win32/jk-1.2.15/ 下载mod_jk,注意和 apache版本匹配
按照jdk,我的路径为:E:ideapacheApache2
解压两份Tomcat, 路径分别为 E:ide omcat1,E:ide omcat2
下载mod_jk
2.修改Apache配置文件http.conf
在apache安装目录下conf目录中找到http.conf
在文件最后加上下面一句话就可以了
include "E:ideapacheApache2confmod_jk.conf"
2. http.conf 同目录下新建mod_jk.conf文件,内容如下
#加载mod_jk Module
LoadModule jk_module modules/mod_jk-apache-2.0.55.so
#指定 workers.properties文件路径
JkWorkersFile conf/workers.properties
#指定那些请求交给tomcat处理,"controller"为在workers.propertise里指定的负载分配控制器
JkMount /*.jsp controller
3.在http.conf同目录下新建 workers.properties文件,内容如下
worker.list = controller,tomcat1,tomcat2 #server 列表
#========tomcat1========
worker.tomcat1.port=8009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat1.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========tomcat2========
worker.tomcat2.port=9009 #ajp13 端口号,在tomcat下server.xml配置,默认8009
worker.tomcat2.host=localhost #tomcat的主机地址,如不为本机,请填写ip地址
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor = 1 #server的加权比重,值越高,分得的请求越多
#========controller,负载均衡控制器========
worker.controller.type=lb
worker.controller.balanced_workers=tomcat1,tomcat2 #指定分担请求的tomcat
worker.controller.sticky_session=1
4.修改tomcat配置文件server.xml
如果你在不同电脑上安装tomcat,tomcat的安装数量为一个,可以不必修改tomcat配置文件
我这里是在同一台电脑上安装两个tomcat,所以需要更改其中一个的设置
打开tomcat2/conf/server.xml文件
linux 下如何查看 apache 负载均衡 将请求分发到哪台机器 求命令
修改http.conf配置文件
# vim /usr/local/apache2/conf/httpd.conf
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so
ProxyRequests Off
<Proxy balancer://clusterphpinfo>
BalancerMember http://10.0.2.203:80 loadfactor=1
BalancerMember http://10.0.2.204:80 loadfactor=1
</Proxy>
ProxyPass / balancer://clusterphpinfo
怎么实现apache+tomcat负载均衡案列
ServerAdmin binbin@locahost
ServerName localhost
ServerAlias localhost
ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://cluster/
#ErrorLog "logs/error.log"
#CustomLog "logs/ess.log"mon
#The ProxyRequests directive should usually be set off when using ProxyPass.
ProxyRequests Off
BalancerMember ajp://localhost:8009 loadfactor=1 route=tomcatJava如何实现Socket转发,问题同"Apache如何实现负载均衡"?
你说apache的是由JK插件实现的,而JK插件是基于AJP协议的,AJP协议就是对HTTP协议的一种优化,提供TOMCAT与其他web服务器的通信。
JK插件把请求转发给哪个Tomcat服务器上的哪个连接器,也就是该连接器的通信协议和地址。
谢谢,你的提示。
可惜Apache端的JK实现我没有研究过,我只想知道的其实就是个小问题,比如TCP转发的语句该怎么写。
问题补充:huoyj 写道我理解的是负载均衡服务器在集群系统里充当的是代理的角色,比如所有的请求都是发向负载均衡服务器的,然后由它去请求其他的servlet容器去执行并获得结果,然后由它将结果展示给请求者,而不是它将请求转发给servlet容器。
因为有的负载均衡系统中,可能静态页面放一个容器中,其他的一些动态的可能放在另一个容器中,比如说apache服务器的静态页面处理能力强,那静态页面都在他哪儿,tomcat的动态处理能力强,那servlet就在tomcat上,而且还可以有IIS服务器在里面,来处理asp的内容,所以负载均衡服务器应该不是一股脑的将请求转发走,而是由它假冒请求者再去别的地方请求。
我明白你说的,我这里的情况是这样,我这边的客户端Socket直连服务器建立不中断的通道。
我不能让所有的请求都建立在一个机器上,所以想让他们经过代理把请求分散开。
如何配置Web服务器实现负载均衡
这篇实用文章介绍如何将pfSense 2.0配置成你那些Web服务器的负载均衡器。
这篇实用文章假设你已经安装了一个pfSense设备和至少两台Apache服务器,并且运行在你的网络上;还假设你具备了pfSense方面的一些知识。
要求
一台设备用于安装pfSense 2.0(如果这是你的边缘防火墙,我会建议物理机器)。
至少两台Apache2服务器(这些可以是虚拟服务器)。
对Apache服务器进行了配置,以便以某种方式同步Web文件(rsync/corosync或通过Web服务器维持文件版本最新的另一个选项)。
配置pfSense
pfSense使用负载均衡器,将某些类型的流量带来的负载分摊到多台服务器上;如果你有多台服务器用于托管运行应用程序,这很好;你可以将负载分摊到所有服务器上,而不是把负载全扔给一台服务器、导致不堪重负。
可以入手了,先点击“Services”(服务),然后点击“Load Balancers”(负载均衡器),然后点击“Monitor”(监视器)选项卡。
要添加一个新条目,点击“Plus”(添加)按钮,指定“Name”(名称)和“Description”(描述,在这个示例中,我会使用ApacheClusterMon作为名称和描述),将类型设成“HTTP”,然后为“Host”(主机)设置一个未使用的IP地址(我们随后会创建虚拟服务器的IP,以便分配给故障切换服务器组),任由“HTTP Code”(HTTP代码)设成“200 OK”。
需要的话,然后点击“Save”(保存),使更改生效。
现在我们要创建服务器池。
点击“Pools”(服务器池)选项卡,点击“Plus”(添加)按钮,即可添加新的服务器池。
指定一个名称(ApacheSrvPool将用在我的示例中)。
将“Mode”(模式)设成“Load Balance”(负载均衡),然后将“Port”(端口)设成“80”(你可以让pfSense对其他端口上的其他应用程序实现负载均衡),将“Monitor”(监视器)设成你之前创建的监视器配置,并且指定你希望在服务器池中的所有Web服务器的IP地址,需要的话,点击“Save”(保存),使更改生效。
接下来点击“Virtual Servers”(虚拟服务器)选项卡,点击“Plus”(添加)按钮,添加一个新条目。
指定“Name”(名称)和“Description”(描述),然后用你之前选择的未使用IP地址来设置“IP Address”(IP地址),将“Port”(端口)设成“80”,然后将“Virtual Server Pool”(虚拟服务器池)设成你之前创建的服务器池,点击“Submit”(提交),使更改生效。
就这样,你刚配置好了pfSense,对你的Web服务器之间的网络流量实现负载均衡。
顺便提一下,如果任何一台服务器没有给出200 OK状态这样的回应(pfSense定期向你的Web服务器发送请求,以确定它们是否正常运行),服务器池就会处于离线停运状态。
要避免出现停运,最好的办法就是配置故障切换系统(下一篇文章会有介绍)。