LVS 负载均衡

     首先,了解下LVS的工做原理,LVS有三种工做模式,分别是NAT, TUN和DR,调度算法上LVS有十种调度算法,分别是rr, wrr, lc, wlc, lblc, lblcr, dh, sh, sed, nq,工做模式和调度算法能够根据本身需求进行设置。

LVS三种工做模式:算法

  1. NAT 地址转换
    原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址,并发至此RS来处理,RS处理完成后把数据交给通过负载均衡器,负载均衡器再把数据包的原IP地址改成本身的IP,将目的地址改成客户端IP地址便可。期间,不管是进来的流量,仍是出去的流量,都必须通过负载均衡器。优势:集群中的物理服务器可使用任何支持TCP/IP操做系统,只有负载均衡器须要一个合法的IP地址。
    缺点:扩展性有限。当服务器节点(普通PC服务器)增加过多时,负载均衡器将成为整个系统的瓶颈,由于全部一的请求包和应答包的流向都通过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢。
     
  2. TUN 隧道
    原理:隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后接返回给客户端,不须要再通过负载均衡器。注意,因为RS须要对负载均衡器发过来的数据包进行还原,因此说必须支持IP Tunneling协议。因此,在RS的内核中,必须编译支持IPTUNNEL这个选项。
    优势:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。因此,减小了负载均衡器的大量数据流动,负载均衡器再也不是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器可以为不少RS进行分发。并且跑在公网上就能进行不一样地域的分发。
    缺点:隧道模式的RS节点须要合法IP,这种方式须要全部的服务器支持IP Tunneling(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
     
  3. DR 直接路由
    原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求(根据IP获取Mac地址请求)进行响应,全部RS对自己这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求所有定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改成RS的MAC(由于IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成以后,因为IP一致,能够直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。因为负载均衡器要对二层包头进行改换,因此负载均衡器和RS之间必须在一个广播域,也能够简单的理解为在同一台交换机上。
    优势:和TUN(隧道模式)同样,负载均衡器也只是分发请求,应答包经过单独的路由方法返回给客户端。与TUN相比,DR这种实现方式不须要隧道结构,所以可使用大多数操做系统作为物理服务器。
    缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。

     三种工做模式中,NAT限制最小,同时效率也是最低的,TUN和DR两种效率比较高,DR效率最高,不过DR要求在局域网中,通常推荐使用DR模式。

LVS提供和十种调度算法:后端

  1. rr 轮询(Round Robin)
    调度器经过“轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而无论服务器上实际的链接数和系统负载。
     
  2. wrr 加权轮询(Weighted Round Robin)
    调度器经过“ 加权轮询”调度算法根据真实服务器的不一样处理能力来调度访问请求。这样能够保证处理能力强的服务器处理更多的访问流量。调度器能够自动问询真实服务器的负载状况,并动态地调整其权值。
     
  3. lc 最少连接(Least Connections)
    调度器经过“最少链接”调度算法动态地将网络请求调度到已创建的连接数最少的服务器上。若是集群系统的真实服务器具备相近的系统性能,采用"最小链接"调度算法能够较好地均衡负载。
     
  4. wlc 加权最少连接(Weighted Least Connections)
    在集群系统中的服务器性能差别较大的状况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具备较高权值的服务器将承受较大比例的活动链接负载。调度器能够自动问询真实服务器的负载状况,并动态地调整其权值。
     
  5. lblc 于局部性的最少连接(Locality-Based Least Connections)
    “基于局部性的最少连接” 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工做负载,则用"最少连接"的原则选出一个可用的服务器,将请求发送到该服务器。
     
  6. lblcr 带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)
    “带复制的基于局部性最少连接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不一样之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小链接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小链接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以下降复制的程度。
     
  7. dh 目标地址散列(Destination Hashing)
    “目标地址散列”调度算法根据请求的目标IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。
     
  8. sh 源地址散列(Source Hashing)
    “源地址散列”调度算法根据请求的源IP地址,做为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,不然返回空。
     
  9. sed 最短时间望延迟 (Shortest Expected Delay)
    sed算法基于wlc算法,只是在wlc上作了微调,(活动链接数 + 1)x 256 / 权重。
     
  10. nq 永不排队(never queue)
    无需队列,若是有台realserver的链接数=0就直接分配过去,不须要在进行sed运算。


管理集群服务:服务器

  1. 添加或者修改配置
    -A|E -t|u|f service-address [-s scheduler]
    -t:tcp协议的集群服务 -u:udp协议的集群  -f:FWM:防火墙标记
    -s: rrr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq
    ipvsadm -A t 192.168.1.100:80  –s  rr
    ipvsadm -E t 192.168.1.100:80  –s  rr
     
  2. 删除配置
    -D -t|u|f service-address
    ipvsadm -D -t 192.168.100:80
     
  3. 清除配置
    ipvsadm -C
     
  4. 保存配置
    ipvsadm -S > file
     
  5. 载入配置
    ipvsadm -R < file
     
  6. 查看配置
    ipvsadm -L


管理集群服务中的RS:网络

  1. 添加或者修改RS
    -a|e virtual-service -r server-address   [-g|i|m] [-w weight] [-x upper] [-y lower]
    -g: DR  -i: TUN  -m: NAT
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.101 -g
    ipvsadm -a -t 192.168.1.100 -r 192.168.1.102 -g
     
  2. 删除RS
    -d -t|u|f service-address -r server-address
    ipvsadm -d -t 192.168.1.100 -r 192.168.1.101


搭建过程:并发

     首先,咱们选择DR工做模式和rr调度算法。Linux内核从2.6.x起已经支持LVS,因此只须要安装ipvsadm管理便可,具体步骤以下:负载均衡

  1. 安装配置ipvsadm
    apt-get install ipvsadm
    dpkg–reconfigure ipvsadm
     
  2. 建立vip进行广播
    vip = 192.168.100 (用于广播)
    dip = 192.168.101 (用于实现HA)
    rip = 192.168.1.102
    ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0
    // 配置虚拟外网网卡,并设置vip和netmask,正常对外工做
     
  3. 建立集群
    ipvsadm -A -t 192.168.1.100:80  –s  rr
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g
    ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.103:80 -g
    ipvsadm -S
     
  4. 修改sysctl.conf
    net.ipv4.ip_forward=0
    net.ipv4.conf.all.send_redirects=1
    net.ipv4.conf.default.send_redirects=1
    net.ipv4.conf.eth0.send_redirects=1
    sysctl -p 生效
     
  5. RS配置 sudo ifconfig lo:0 192.168.1.100 netmask 255.255.255.255 // 配置虚拟网卡,网卡必须是lo,netmask必须为255.255.255.255,不然会响应客户端的arp  修改/etc/sysctl.conf // DR的原理就是限制RS ARP响应,ARP用到就是广播 net.ipv4.conf.all.arp_ignore=1       // 只对本身网卡地址作ARP响应 net.ipv4.conf.all.arp_announce=2  // 只携带外网网卡地址做为原地址发送ARP请求 sysctl –p 生效
相关文章
相关标签/搜索