[每周讨论专题]--第九期--Apache的负载均衡

Squid 怎么做,请指点
LVS+SQUID应该是不错的吧
我有点不理解的是apache本身怎么能负载均衡?均衡给谁?
负载均衡肯定是说一个apache web server cluster之间分担负载,应该由一个单独的仲裁者分配负载。这个仲裁者有必要是Apache本身吗?或者说Apache本身有必要实现这种功能吗?

还有DNS的问题,我个人认为DNS负载均衡是一种伪均衡。没有快速的failover机制,只能轮询(或者加权轮询?写这个script恐怕很有难度),而且DNS记录被下游cache了怎么办?

這個每週專題討論還有再繼續麽?
apache本身是可以做到均衡的,不过得写一点脚本来实现,但都用jk了事,如果你用tomcat的话
DNS不是真正意义上的Loadbalance,就像ccie15766说 的那样,没有故障检测机制和故障切换机制(failover)
貌似DNS Round-Robin如下配置较为推荐:
www.test.com       A        192.168.1.110
www1.test.com    CNAME  www.test.com
www2.test.com    CNAME  www.test.com
...

默认是轮询机制,至于采用哪种轮询机制是可以自己配置的。

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)是以流量为权重负载均衡的,这是最大的区别)。
顶一下,又学到新东西了。


QUOTE:
原帖由 nianzong 于 2008-5-20 12:18 发表
DNS不是真正意义上的Loadbalance,就像ccie15766说 的那样,没有故障检测机制和故障切换机制(failover)
貌似DNS Round-Robin如下配置较为推荐:
www.test.com       A        192.168.1.110
www1.test.com ...

4.2 负载分担
原始的负载分担是在DNS 中,通过对一个名字使用多条的A 记录来实现的。例如,如
果用户有三个WWW 服务器,地址是10.0.0.1, 10.0.0.2 和 10.0.0.3,下列一系列记录表示用
户会有机会访问这3 个IP 地址,且几率相同。
Name TTL CLASS TYPE Resource Record (RR) Data
www  600 IN A 10.0.0.1
         600 IN A 10.0.0.2
         600 IN A 10.0.0.3
为了解析www 请求响应所有这些记录,BIND 会轮询这些记录,以不同的顺序为结果
来响应用户的解析请求。在上面的例子中,用户将会随机以1,2,3;2,3,1 和3,1,2
的顺序得到解析结果。大多数用户会使用返回的第一条纪录而忽略掉其余的纪录。
有关响应顺序的细节,可以查看options 中有关rrset-order 的配置。但是BIND9 中不支持
rrset-order 中的配置,只能按照上述的顺序响应。



上述内容来自BIND9管理手册
用nginx来做