Haproxy负载均衡

一、常见的Web集群调度器

目前常见的Web集群调度器分为软件和硬件:

软件通常使用开源的LVS、Haproxy、Nginx
        LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持群集功能,但是对群集节点健康检查功能不强,高并发性能没有Haproxy好

硬件一般使用表较多的是F5、Array,也有很多人使用国内的一些产品,如梭子鱼、绿盟等

二、Haproxy介绍
Haproxy是可提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。Haproxy非常适用于并发大(并发达1w以上)web站点,这些站点通常又需要会话保持或七层处理。Haproxy的运行模式使得它可以很简单安全的整合至当前的架构中,同时可以保护web服务器不被暴露到网络上。

1、Haproxy应用分析

LVS在企业应用中康复在能力很强,但存在不足
        LVS不支持正则处理,不能实现动静分离
        对于大型网站,LVS的实施配置复杂,维护成本相对较高
Haproxy是一款可提供高可用、负载均衡、及基于TCP和HTTP应用的代理的软件
        适用于负载大的Web站点
        运行在硬件上可支持数以万计的并发连接的连接请求

2、Haproxy的主要特性

  1. 可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美
  2. 最高可以同时维护40000-50000个并发连接,单位时间内处理的最大请求数为20000个,最大处理能力可达10Git/s;
  3. 支持多达8种负载均衡算法
  4. 支持Session会话保持,Cookie的引导;
  5. 支持通过获取指定的url来检测后端服务器的状态;
  6. 支持虚拟主机功能,从而实现web负载均衡更加灵活;
  7. 支持连接拒绝、全透明代理等独特的功能;
  8. 拥有强大的ACL支持,用于访问控制;
  9. 支持TCP和HTTP协议的负载均衡转发;
  10. 支持客户端的keepalive功能,减少客户端与haproxy的多次三次握手导致资源浪费,让多个请求在一个tcp连接中完成

3、Haproxy负载均衡策略

三、LVS、Nginx、Haproxy之间的区别

  1. LVS基于Linux操作系统内核实现软负载均衡,而HAProxy和Nginx是基于第三方应用实现的软负载均衡;
  2. LVS是可实现4层的IP负载均衡技术,无法实现基于目录、URL的转发。而HAProxy和Nginx都可以实现4层和7层技术,HAProxy可提供TCP和HTTP应用的负载均衡综合解决方案;
  3. LVS因为工作在ISO模型的第四层,其状态监测功能单一,而HAProxy在状态监测方面功能更丰富、强大,可支持端口、URL、脚本等多种状态检测方式;
  4. HAProxy功能强大,单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。但整体性能低于4层模式的LVS负载均衡;
  5. Nginx主要用于Web服务器或缓存服务器。Nginx的upstream模块虽然也支持群集功能,但是性能没有LVS和Haproxy好,对群集节点健康检查功能不强,只支持通过端口来检测,不支持通过URL来检测。

四、Haproxy搭建Web群集

Haproxy服务器:192.168.154.13
Nginx 服务器1:192.168.154.14
Nginx 服务器2:192.168.154.15
客户端:192.168.154.11

1、Haproxy服务器部署

  1. 关闭防火墙,将安装Haproxy所需软件包传到/opt目录下
systemctl stop firewalld
setenforce 0

wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz

2.安装 Haproxy

编译安装

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

tar zxvf haproxy-1.7.2.tar.gz
cd haproxy-1.7.2/
make TARGET=linux2628 PREFIX=/usr/local/haproxy 
make install PREFIX=/usr/local/haproxy

3.Haproxy服务器配置

useradd -M -s /sbin/nologin haproxy

mkdir -p /usr/local/haproxy/conf
cd /usr/local/haproxy/conf


//yum安装
yum install -y haproxy

HAProxy 的配置文件共有 5 个域:

global:用于配置全局参数
default:用于配置所有frontend和backend的默认属性
frontend:用于配置前端服务(即HAProxy自身提供的服务)实例
backend:用于配置后端服务(即HAProxy后面接的服务)实例组
listen:frontend + backend的组合配置,可以理解成更简洁的配置方法,frontend域和backend域中所有的配置都可以配置在listen域下

五. haproxy调度算法

1)静态调度算法:

静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和响应速度等,且无法实时修改权重,只能靠重启HAProxy生效。

 2)动态调度算法:

基于后端服务器 状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
静态算法☞static-rr
static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制。
配置:balance static-rr
静态算法☞first
first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。
配置:balance first
动态算法☞roundrobin
roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不完全等于lvs中的rr轮训模式,HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),其每个后端backend中最多支持4095个realserver,roundrobin为默认调度算法,且支持对real server权重动态调整。
配置:balance roundrobin
动态算法 leastconn
leastconn加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度(新客户端连接),leastconn比较适合长连接的场景使用,比如MySQL等场景。
balance leastconn
其他算法☞source
源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。
源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法和一致性hash
配置:
balance source (默认是取模法)
hash-type consistent hash类型:一致性hash
取模法:
   map-based:取模法,基于服务器总权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变。

   所谓取模运算,就是计算两个数相除之后的余数,10%7=3, 7%4=3,(2^32-1)%(1+1+2)。

2)取模法示意图

 

一致性hash:

   一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动,hash(o)mod n。

   hash对象:

   一致性hash示意图:

  • 后端服务器在线与离线的调度方式

其他算法☞uri
基于对用户请求的uri做hash并将请求转发到后端指定服务器,也可以通过map-based和consistent定义使用取模法还是一致性hash。
配置:
balance uri
hash-type consistent (uri 一致性hash)
其他算法☞url_param
url_param对用户请求的url中的 params 部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个real server
配置:balance url_param name,age #支持对单个及多个url_param值hash(注:一般取一个url_param 值hash,或者一般不使用)
其他算法☞hdr
针对用户每个http头部(header)请求中的指定信息做hash,此处由 name 指定的http首部将会被取出并做hash计算,然后由服务器总权重相除以后派发至某挑出的服务器,假如无有效的值,则会使用默认的轮询调度。
配置:
balance hdr(User-Agent)
hash-type consistent
其他算法☞rdp-cookie
rdp-cookie对远程桌面的负载,使用cookie保持会话
配置:balance rdp-cookie
基于iptables实现:
注意:有去有回,iptables命令有两条

net.ipv4.ip_forward = 1


# iptables -t nat -A PREROUTING -d 192.168.7.101 -p tcp --dport 3389 -j DNAT --todestination 172.18.139.20:3389
# iptables -t nat -A POSTROUTING -s 192.168.0.0/21 -j SNAT --to-source 192.168.7.101   

其他算法☞random
在1.9版本开始增加一个叫做random的负载平衡算法,其基于一个随机数作为一致性hash的key,随机负载平衡对于大型服务器场或经常添加或删除服务器非常有用,因为它可以避免在这种情况下由roundrobin或leastconn导致的锤击效应。
配置:balance random

算法总结:

first                       #使用较少


static-rr                   #做了session共享的web集群
roundrobin
random


leastconn                   #数据库
source                      #基于客户端公网IP的会话保持


Uri--------------->http     #缓存服务器,CDN服务商
url_param--------->http 


hdr                         #基于客户端请求报文头部做下一步处理


rdp-cookie                  #很少使用
  • 23
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值