我正在使用Haproxy负载平衡我的Web服务器。 并不是所有的人都有相同的资源。 典型的负载平衡algorithm导致一些低端服务器超载,因为LB听不到信号。
是一种负载平衡服务器的方式,以他们当前的负载,资源可用性..等等?
你可以dynamic调整服务器的重量,使用一些HAProxy Voodoo来set weight
相关位(发送给HAProxy的统计套接字):
设定重量/ [%]
将服务器的权重更改为参数中传递的值。 如果数值以'%'符号结束,则新的重量将相对于初始configuration的重量。 相对权重只允许在0到100%之间,绝对权重在0到256之间是允许的。属于运行静态负载平衡algorithm的场的服务器有更严格的限制,因为权重一旦设置就不能改变。 因此,对于这些服务器,唯一可接受的值是0和100%(或0和初始权重)。 更改立即生效,但某些LBalgorithm需要一定数量的请求来考虑更改。 此命令的典型用法是在更新期间通过将其权重设置为零来禁用服务器,然后在更新后通过将其重新设置为100%来再次启用它。 该命令是受限制的,只能在configuration为“admin”级别的套接字上发出。 后端和服务器都可以通过名称或数字ID来指定,前缀为短划线('#')。
你当然需要在服务器上写一些后端代码来报告它们的相对负载,并且你的HAProxy盒上的一个进程需要查询它们(这可以通过一些创造性被合并到你的健康检查中,但是我会为了简单起见,将其作为一个单独的过程来开始)。
最简单的方法是在你的Web服务器上有一个状态页面,如果服务器没有问题的话返回HTTP 200,如果HTTP 500超载的话,返回HTTP 500。 另外,如果你知道一个特定的服务器可以处理比另一个多20%的连接,你可以使用权重来超越服务器:
backend appservers mode http option httpchk HEAD /health_check.php option redispatch server web1 xxxx:80 weight 100 check inter 2000 rise 5 fall 2 server web2 xxxx:80 weight 120 check inter 2000 rise 5 fall 2 server web3 xxxx:80 weight 80 check inter 2000 rise 5 fall 2