文档章节

apache做负载均衡器 配置

朱君
 朱君
发布于 2014/04/09 08:56
字数 2206
阅读 161
收藏 1
点赞 0
评论 0

将Apache作为LoadBalance前置机分别有三种不同的部署方式,分别是:

1 )轮询均衡策略的配置

进入Apache的conf目录,打开httpd.conf文件,在文件的末尾加入:

ProxyPass / balancer://proxy/         #注意这里以"/"结尾

<Proxy balancer://proxy>

       BalancerMember http://192.168.6.37:6888/

       BalancerMember http://192.168.6.38:6888/

</Proxy>

      我 们来观察上述的参数“ProxyPass / balancer://proxy/”,其中,“ProxyPass”是配置虚拟服务器的命令,“/”代表发送Web请求的URL前缀,如:http: //myserver/或者http://myserver/aaa,这些URL都将符合上述过滤条件;“balancer://proxy/”表示要配 置负载均衡,proxy代表负载均衡名;BalancerMember 及其后面的URL表示要配置的后台服务器,其中URL为后台服务器请求时的URL。以上面的配置为例,实现负载均衡的原理如下:

      假 设Apache接收到http://localhost/aaa请求,由于该请求满足ProxyPass条件(其URL前缀为“/”),该请求会被分发到 后台某一个BalancerMember,譬如,该请求可能会转发到 http://192.168.6.37:6888/aaa进行处理。当第二个满足条件的URL请求过来时,该请求可能会被分发到另外一台 BalancerMember,譬如,可能会转发到http://192.168.6.38:6888/。如此循环反复,便实现了负载均衡的机制。

2) 按权重分配均衡策略的配置

ProxyPass / balancer://proxy/         #注意这里以"/"结尾

<Proxy balancer://proxy>

        BalancerMember http://192.168.6.37:6888/  loadfactor=3

        BalancerMember http://192.168.6.38:6888/  loadfactor=1

</Proxy>

      参 数”loadfactor”表示后台服务器负载到由Apache发送请求的权值,该值默认为1,可以将该值设置为1到100之间的任何值。以上面的配置为 例,介绍如何实现按权重分配的负载均衡,现假设Apache收到http://myserver/aaa 4次这样的请求,该请求分别被负载到后台服务器,则有3次连续的这样请求被负载到BalancerMember为 http://192.168.6.37:6888的服务器,有1次这样的请求被负载BalancerMember为http: //192.168.6.38:6888后台服务器。实现了按照权重连续分配的均衡策略。

3) 权重请求响应负载均衡策略的配置

ProxyPass / balancer://proxy/ lbmethod=bytraffic  #注意这里以"/"结尾

<Proxy balancer://proxy>

         BalancerMember http://192.168.6.37:6888/  loadfactor=3

         BalancerMember http://192.168.6.38:6888/  loadfactor=1

 </Proxy>

       参 数“lbmethod=bytraffic”表示后台服务器负载请求和响应的字节数,处理字节数的多少是以权值的方式来表示的。“loadfactor” 表示后台服务器处理负载请求和响应字节数的权值,该值默认为1,可以将该值设置在1到100的任何值。根据以上配置是这么进行均衡负载的,假设 Apache接收到http://myserver/aaa请求,将请求转发给后台服务器,如果BalancerMember为http: //192.168.6.37:6888后台服务器负载到这个请求,那么它处理请求和响应的字节数是BalancerMember为http: //192.168.6.38:6888 服务器的3倍(回想(2)均衡配置,(2)是以请求数作为权重负载均衡的,(3)是以流量为权重负载均衡的,这是最大的区别)。

注:每次修改httpd.conf,用apachectl –k restart重新启动Apache。



   apache功能其实很是强大,最近一段时间研究了下apache的反向代理和负载均衡,反向代理网协的外网出口和我的博客出口就是通过apache的反向代理实现的,总结一下,重点说说负载均衡的配置。
首先说先实验环境吧
操作系统:DEBIAN 5.03(Ubuntu也可以同理配置)

一、安装apache加载模块

apt-get install apache2
然后进入到apache的配置目录
cd /etc/apache2
apache的反向代理和负载均衡其实利用的都是反向代理的原理,至于什么叫做反向代理可以点此http://baike.baidu.com/view/1165595.htm

关键需要加载下面三个模块
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 

由 于Debian系统下apache所有的模块都是放在/usr/lib/apache2/modules/里面的,通过/etc/apache2 /mods-available里面的*.load加载的,如果要模块的话需要在/etc/apache2/mods-enabled里面用ln建立链 接,当然你也可以再/etc/apache2/apache2.conf里面直接把上面三句话写进入,但是不建议这样做。执行代码如下
ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/proxy.load
ln -s /etc/apache2/mods-available/proxy_http.load /etc/apache2/mods-enabled/proxy_http.load
ln -s /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/proxy_banancer.load

做好上面几步之后我们重启下apache
/etc/init.d/apache2 restart

二、配置反向代理功能

加载完模块后可以建立一个虚拟主机来作为反向代理
vi /etc/apache2/sites_available/proxy
配置如下
Listen 202.xxx.xxx.xxx:80     (别人访问的IP和端口)
<VirtualHost 202.xxx.xxx.xxx:80> (同上)
ServerAdmin admin@bit.net
ProxyRequests Off             (说明开启的是反向代理)
ProxyMaxForwards 100
ProxyPreserveHost On
ProxyPass / http://10.x.xx.xxx/ (转发到url上的请求)
ProxyPassReverse / http://10.x.xx.xxx/
 <Proxy *>                (这段是访问的控制)
 Order Deny,Allow
 Allow from all
 </Proxy>
</VirtualHost>
然后再在/etc/apache2/sites_enabled/里面建立ln链接
ln -s /etc/apache2/sites_available/proxy /etc/apache2/sites_enabled/proxy
重启apache
/etc/init.d/apache2 restart

然后反向代理就开启了
当别人输入http://202.xxx.xxx.xxx时 就会通过反向代理转到http://10.x.xx.xxx上,这样简单的反向代理功能就开启了

三、apache负载均衡配置

a、简单的负载均衡

然后接着讲apache的负载均衡模块吧
同理建立一个虚拟主机来作为负载均衡
vi /etc/apache2/sites_available/balancer
配置如下
Listen 202.x.xx.xxx:80        (别人访问的IP和端口)
<VirtualHost 202.x.xx.xxx:80>

     ServerAdmin admin@bit.com
     ProxyRequests Off
     Proxypass / balancer://proxy/  
     <Proxy balancer://proxy>
         Order Deny,Allow
         Allow from all
         BalancerMember http://10.0.0.1
         BalancerMember http://10.0.0.2
     </Proxy>

</VirtualHost>
从上面的 ProxyRequests Off 这条可以看出,实际上负载均衡器就是一个反向代理,只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer://协议地址
ProxyPass / balancer://proxy/ 协议地址可以随便定义。然后,在<Proxy>段中设置该balancer协议的内容即可。 BalancerMember指令可以添加负载均衡组中的真实服务器地址。

然后再在/etc/apache2/sites_enabled/里面建立ln链接
ln -s /etc/apache2/sites_available/balancer /etc/apache2/sites_enabled/balancer
重启apache
/etc/init.d/apache2 restart
这样apache的负载均衡就配置好了

如 果访问http://202.x.xx.xxx的时候会均匀地打开http://10.0.0.1和http://10.0.0.2,比如你两次打开 http://202.x.xx.xxx会又一次打开http://10.0.0.1一次打开http://10.0.0.2这样就是两台服务器接受的请 求平均了,达到了负载均衡的效果。

b、负载比例分配

当然如果你发现你的两台服务器配置不一样,一台较好,一台较差,那么就要开始配置不同比例的负载均衡了。如果两台服务器你想配置负载分配比为3:1则配置文件如下

Listen 202.x.xx.xxx:80        (别人访问的IP和端口)
<VirtualHost 202.x.xx.xxx:80>

     ServerAdmin admin@bit.com
     ProxyRequests Off
     Proxypass / balancer://proxy/  
     <Proxy balancer://proxy>
         Order Deny,Allow
         Allow from all
         BalancerMember http://10.0.0.1   loadfactor= 3
         BalancerMember http://10.0.0.2   loadfactor= 1
     </Proxy>

</VirtualHost>

c、负载分配算法

当然你可能想通过不同的算法实现负载均衡,比方说按照请求次数,或者按照流量均衡,这里用到的指令是lbmethod
lbmethod可能的取值有: 
lbmethod=byrequests 按照请求次数均衡(默认) 
lbmethod=bytraffic 按照流量均衡 
lbmethod=bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

按照流量的均衡配置如下

Listen 202.x.xx.xxx:80        (别人访问的IP和端口)
<VirtualHost 202.x.xx.xxx:80>

     ServerAdmin admin@bit.com
     ProxyRequests Off
     Proxypass / balancer://proxy/  
     ProxySet lbmethod=bytraffic   (加上这句)
     <Proxy balancer://proxy>
         Order Deny,Allow
         Allow from all
         BalancerMember http://10.0.0.1   loadfactor= 3
         BalancerMember http://10.0.0.2   loadfactor= 1
     </Proxy>

</VirtualHost>
这样你的负载均衡就可以按照流量均衡了

d、热备份
在最后讲一讲热备份吧,热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器,配置文件如下
Listen 202.x.xx.xxx:80        (别人访问的IP和端口)
<VirtualHost 202.x.xx.xxx:80>

     ServerAdmin admin@bit.com
     ProxyRequests Off
     Proxypass / balancer://proxy/  
     ProxySet lbmethod=bytraffic   (加上这句)
     <Proxy balancer://proxy>
         Order Deny,Allow
         Allow from all
         BalancerMember http://10.0.0.1   
         BalancerMember http://10.0.0.2   status=+H
     </Proxy>

</VirtualHost>
  从配置中可以看出请求总是流向http://10.0.0.1,一旦http://10.0.0.1挂掉, Apache会检测到错误并把请求分流给 http://10.0.0.2。Apache会每隔几分钟检测一下http://10.0.0.1的状况,如果http://10.0.0.1恢复,就 继续使用http://10.0.0.1,这样就可以实现热备份了


好了总结完了,最近发现apache的功能确实是很强大,各种模块都有待发掘,一直在听说Nginx的并发比apache要好,有时间再发个两者的比较的文章吧。


© 著作权归作者所有

共有 人打赏支持
朱君

朱君

粉丝 11
博文 4
码字总数 0
作品 7
上海
后端工程师
配置Apusic集群

集群是保证大型应用高可用的重要手段之一,应用服务器的集群也是目前最常见的集群操作方式。 通过借鉴我的同事之前的经验及相关资料,这里制作了2中环境的集群:一种是直接使用Apusic自带的负...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

JBoss 系列二:使用Apache httpd(mod_cluster)和JBoss构架高可用集群环境

什么是企业应用集群 集群是指把不同的服务器集中在一起,组成一个服务器集合,这个集合给客户端提供一个虚拟的平台,使客户端在不知道服务器集合结构的情况下可以对这一服务器集合进行部署应...

无鸯 ⋅ 2014/02/04 ⋅ 0

F5负载均衡器的功能介绍和配置图示

基于庞大的网络结构,集群服务器的使用带来了不少流量等负载问题。那么相对的,负载均衡的技术也应运而生。每一种技术都需要产品的支持,那么现在我们来认识一下F5负载均衡器的一种。那么首先...

凡尘里的一根葱 ⋅ 2015/11/06 ⋅ 1

深入了解ApusicAS服务器配置系列之——AAS集群:使用第三方负载均衡器相关配置

ApusicAS集群对第三方的负载均衡(如:硬件负载均衡器F5,软件负载均衡器Apache Server,微软的IIS等)提供良好的支持。 当使用第三方的负载均衡器时,AAS的Session复制同样采用内存复制技术...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

把Web集群由HTTP转换为HTTPS(LVS+HAProxy+SSL)

一、环境介绍 接到通知,要求网站由http改为使用https,目前我的网站前端架构如下图所示: 假设我们有两台物理机,每台物理机上面有很多的tomcat容器,前端使用的是haproxy进行的http层负载均...

English0523 ⋅ 01/12 ⋅ 0

Lumins Technolgies一年来在生产中使用Kubernetes的经验

在2015年,我们Lumins Technolgoies在亚马逊的EC2上面运行配置很多年之后,我所在的团队接到任务,负责为Lumins Technolgoies所有其他开发团队的配置创建一个新的配置平台。过去这么多年,A...

Caicloud ⋅ 2016/06/22 ⋅ 0

apache+jk+tomcat集群配置

1集群配置介绍 Apache Tomcat可以说是当下最受欢迎的开源Java Web服务器。Tomcat的单个实例恐怕无法满足访问量日增的需要。这种情况下,需要考虑在“集群”环境下运行Tomcat;在这种环境下,...

bill2candy ⋅ 2016/10/28 ⋅ 0

6.Azure负载均衡(下)

那接下来我就可以创建一个负载均衡来放在WEB01和WEB02的前面。 创建一个负载均衡器 输入负载均衡的名称,以及类型: 内部:内部负载均衡器 (ILB) 仅将流量定向到云服务内的资源,或使用 VPN ...

ZJUNSEN ⋅ 02/11 ⋅ 0

LVS与nginx的比较

lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用。 首先提醒,做技术切不可人云亦云,我云即你云;同时也不可太趋向保守,过于相信旧有方式...

蓝狐乐队 ⋅ 2014/05/22 ⋅ 0

nginx负载均衡和lvs负载均衡的比较

一、lvs的优势: 1、抗负载能力强,因为lvs工作方式的逻辑是非常之简单,而且工作在网络4层仅做请求分发之用,没有流量,所以在效率上基本不需要太过考虑。在我手里的 lvs,仅仅出过一次问题...

English0523 ⋅ 2013/12/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

BS与CS的联系与区别【简】

C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件。 B/S是Brower/...

anlve ⋅ 53分钟前 ⋅ 0

发生了什么?Linus 又发怒了?

在一个 Linux 内核 4.18-rc1 的 Pull Request 中,开发者 Andy Shevchenko 表示其在对设备属性框架进行更新时,移除了 union 别名,这引发了 Linus 的暴怒。 这一次 Linus Torvalds 发怒的原...

问题终结者 ⋅ 今天 ⋅ 0

在树莓派上搭建一个maven仓库

在树莓派上搭建一个maven仓库 20180618 lambo init 项目说明 家里有台树莓派性能太慢。想搭建一个maven私服, 使用nexus或者 jfrog-artifactory 运行的够呛。怎么办呢,手写一个吧.所在这个...

林小宝 ⋅ 今天 ⋅ 0

Spring发展历程总结

转自与 https://www.cnblogs.com/RunForLove/p/4641672.html 目前很多公司的架构,从Struts2迁移到了SpringMVC。你有想过为什么不使用Servlet+JSP来构建Java web项目,而是采用SpringMVC呢?...

onedotdot ⋅ 今天 ⋅ 0

Python模块/包/库安装(6种方法)

Python模块/包/库安装(6种方法) 冰颖机器人 2016-11-29 21:33:26 一、方法1: 单文件模块 直接把文件拷贝到 $python_dir/Lib 二、方法2: 多文件模块,带setup.py 下载模块包(压缩文件zip...

cswangyx ⋅ 今天 ⋅ 0

零基础学习大数据人工智能,学习路线篇!系统规划大数据之路?

大数据处理技术怎么学习呢?首先我们要学习Python语言和Linux操作系统,这两个是学习大数据的基础,学习的顺序不分前后。 Python:Python 的排名从去年开始就借助人工智能持续上升,现在它已经...

董黎明 ⋅ 今天 ⋅ 0

openJdk和sun jdk的区别

使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK, 那么到底什么是OpenJDK,它与SUN JDK有什么关系和区别呢? 历史上的原因是,Ope...

jason_kiss ⋅ 今天 ⋅ 0

梳理

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。 它是JS的状态容器,是一种解决问题的方式,所以即可以用于 react 也可以用于 vue。 需要理解其思想及实现方式。 应用中所有的 stat...

分秒 ⋅ 今天 ⋅ 0

Java 后台判断是否为ajax请求

/** * 是否是Ajax请求 * @param request * @return */public static boolean isAjax(ServletRequest request){return "XMLHttpRequest".equalsIgnoreCase(((HttpServletReques......

JavaSon712 ⋅ 今天 ⋅ 0

Redis 单线程 为何却需要事务处理并发问题

Redis是单线程处理,也就是命令会顺序执行。那么为什么会存在并发问题呢? 个人理解是,虽然redis是单线程,但是可以同时有多个客户端访问,每个客户端会有 一个线程。客户端访问之间存在竞争...

码代码的小司机 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部