apache 设置反向代理和负载均衡的方法

负载均衡提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。

一般来说,分为两种实现方式, 一种就是将客户端的请求分流给后端的各个真实服务器,达到负载均衡的目的。还有一种方式是用两台服务器,一台作为主服务器(Master),另一台作为热备份(Hot Standby),请求全部分给主服务器,在主服务器当机时,立即切换到备份服务器。

对于大多数公司来言,反向代理和负载均衡一般是使用 nginx , 今天钻研了下apache的方法,其实也很简单.

一、反向代理

首先,启用apache的代理模块

a2enmod proxy

然后启用代理协议模块

a2enmod proxy_http

或者

a2enmod proxy_ftp

等等

如果你需要的话,你也可以启用监视器模块

a2enmod proxy_balancer

之后,重启 apache 即可

 

二、负载均衡的配置

基本配置

apache的site反向代理最简单的配置如下

<VirtualHost *:80>
      ServerName www.123.com
      proxypass / http://192.168.0.1:8080/
      proxypassreverse / http://192.168.0.1:8080/
</VirtualHost>
这是一条Vhost记录,其中ServerName代表要反向代理的域名, proxypass 和 proxypassreverse 后跟要代理的地址即可.
而负债均衡就是建立在反向代理的基础上的,可以看到,上方的配置将一个域名代理给力一个后台地址,当我们代理成多个后台地址时即为负债均衡.
扩充上面的配置:
<VirtualHost *:80>
      <Proxy balancer://mycluster>
            BalancerMember http://192.168.0.1:8080/
            BalancerMember http://192.168.0.2:8080/
      </Proxy>
      ServerName www.123.com
      ProxyPass / balancer://mycluster/
</VirtualHost>

实际上负载均衡器就是一个反向代理,只不过它的代理转发地址不是某台具体的服务器,而是一个 balancer:// 协议

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

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

添加负载均衡监视器

负债均衡在调试的时间想查看具体的详情怎么办?很简单,打开负债均衡监视器即可(也要启用监视器模块哦~)

扩充上面的配置:
<VirtualHost *:80>
      <Proxy balancer://mycluster>
            BalancerMember http://192.168.0.1:8080/
            BalancerMember http://192.168.0.2:8080/
      </Proxy>
      ServerName www.123.com
      ProxyPass / balancer://mycluster/
      
      <Location /balancer-manager> 
            SetHandler balancer-manager 
      </Location> 
</VirtualHost>

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

负载比例分配

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

如果后端服务器配置不均衡,能够处理的速度不一致怎么办? 给 BalancerMember 加上 loadfactor 参数即可,取值范围为1-100。比如你有三台服务器,负载分配比例为 7:2:1,只需这样设置

<Proxy balancer://mycluster>
      BalancerMember http://192.168.0.1:8080/ loadfactor=7
      BalancerMember http://192.168.0.2:8080/ loadfactor=2
      BalancerMember http://192.168.0.3:8080/ loadfactor=1
</Proxy>

负载分配算法

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

<VirtualHost *:80>
      <Proxy balancer://mycluster>
            BalancerMember http://192.168.0.1:8080/
            BalancerMember http://192.168.0.2:8080/
      </Proxy>
      ServerName www.123.com
      ProxyPass / balancer://mycluster/
      ProxySet lbmethod=bytraffic
</VirtualHost>

lbmethod可能的取值有:

byrequests 按照请求次数均衡(默认)
bytraffic 按照流量均衡
bybusyness 按照繁忙程度均衡(总是分配给活跃请求数最少的服务器)

各种算法的原理请参见Apache的文档

热备份实现

热备份的实现很简单,只需添加 status=+H 属性,就可以把某台服务器指定为备份服务器:

<VirtualHost *:80>
      <Proxy balancer://mycluster>
            BalancerMember http://192.168.0.1:8080/
            BalancerMember http://192.168.0.2:8080/ status=+H
      </Proxy>
      ServerName www.123.com
      ProxyPass / balancer://mycluster/
</VirtualHost>

从 balancer-manager 界面中可以看到,请求总是流向192.168.0.1 ,一旦192.168.0.1挂掉, Apache会检测到错误并把请求分流给192.168.0.2 。Apache会每隔几分钟检测一下 192.168.0.1 的状况,如果192.168.0.1 恢复,就继续使用192.168.0.1 。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据