LVS负载均衡详解

工作模式介绍:

工作模式是配置在:real server

1.Virtualserver via NAT(VS-NAT)     -m
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
缺点:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

解决办法:即使是是负载均衡器成为整个系统的瓶颈,如果是这样也有两种方法来解决它。一种是混合处理,另一种是采用Virtual Server via IP tunneling或VirtualServer via direct routing。如果采用混合处理的方法,将需要许多同属单一的RR DNS域。你采用Virtual Server via IP tunneling或VirtualServer via direct routing以获得更好的可扩展性。也可以嵌套使用负载均衡器,在最前端的是VS-Tunneling或VS-Drouting的负载均衡器,然后后面采用VS-NAT的负载均衡器。

2.Virtualserver via IP tunneling(VS-TUN)   -i
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
缺点:但是,这种方式需要所有的服务器支持"IP Tunneling"(IPEncapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。

3.VirtualServer via Direct Routing(VS-DR) 常用  -g
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux、Solaris 、FreeBSD、windows、IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上。

三种IP负载均衡技术的优缺点比较:
杂项         VS/NAT     VS/TUN      VS/DR
服务器操作系统    任意      支持隧道     多数(支持Non-arp )
服务器网络      私有网络    局域网/广域网  局域网
服务器数目(100M网络) 10-20      100       多(100)
服务器网关      负载均衡器   自己的路由    自己的路由
效率         一般      高        最高

 

wKiom1Xqr7nwbCaLAAERVDIuRIQ282.jpg

 

管理集群服务中的RS

      添加:-a  -t|u|f service-address -rserver-address [-g|i|m] [-w weight]

                -t|u|f service-address:事先定义好的某集群服务

                -t:TCP协议的集群

                -u: UDP协议的集群

                -f:FWM: 防火墙标记

                -r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;

            [-g|i|m]:LVS类型  

                -g:DR

                -i:TUN

                -m:NAT

            [-wweight]: 定义服务器权重

        修改:-e

        删除:-d -t|u|fservice-address -r server-address

        配置DR模型

        #ipvsadm -a -t 192.168.10.120:80 -r 192.168.10.243 -g  -w [权重数]

       #  Route add –host 192.168.10.120 dev lo:0

        #ipvsadm -a -t 172.168.10.120:80 -r 192.168.10.244 –g 

       #  Route add –host 192.168.10.120 dev lo:0

    查看

        -L|l

            -n:数字格式显示主机地址和端口

            --stats:统计数据

            --rate:速率

            --timeout:显示tcp、tcpfin和udp的会话超时时长

            -c:显示当前的ipvs连接状况

 

    删除所有集群服务

        -C:清空ipvs规则

    保存规则

        -S

        #ipvsadm -S > /path/to/somefile

    载入此前的规则:

        -R

        #ipvsadm -R < /path/form/somefile


调度算法介绍:

调度算法是配置在:Director上的

类型

算法

说明

静态方法

RR

round-robin, 轮询;

WRR

weighted round-robin, 加权轮询;Overhead=conn/weight

SH

Source ip Hashing,源地址哈希;把来自同一个地址请求,统统定向至此前选定的RS;

DH

Destination ip Hashing, 目标地址哈希;把访问同一个目标地址的请求,统统定向至此前选定的某RS;

动态方法

LC

least connection:最小连接,Overhead=Active*256+Inactive

WLC

weighted least connection:加权最小连接,Overhead=(Active*256+Inactive)/weight;默认的调度算法  (权重越大连接数越多)

SED

Shorted Expection Delay:最短期望延迟,Overhead=(Active+1)*256/weight

NQ

Never Queue:永不排序

LBLC

Local-Based Least Connection,基于本地的最小连接:动态方式的DH算法

LBLCR

Replicated LBLC:带复制的LBLCR

 实例命令:

配置Director 上的调速算法和添加Director主机

添加集群服务,这里使用rr(轮询)调度算法 默认是WLC算法

ipvsadm -A -t 192.168.10.120:80 -s rr



wKiom1Xqr-DDtfrxAAD_GJEQedM471.jpg

                                                                      1.1DR模式

图中1.1,客户端发送的请求会由路由器和交换机转发后直接达到director。再由director调度给指定的real server ,最后由real server直接响应给客户端而不经过director,在此架构中director和real server的网络架构是此类型的重点。所以,配置DR类型一定要注意以下两点:

(1) 各RS要直接响应Client,因此,各RS均得配置VIP;但仅能够让Director上的VIP能够与本地路由直接通信;

(2) Director不会拆除或修改请求报文的IP首部,而是通过封闭新的帧首部(源MAC为Director的MAC,目标MAC为挑选出的RS的MAC)完成调度。

要完成上述的要求,着实很难,因为RS和DR都有VIP,而请求进入时必须最先发送给DR,所以,在DR类型中,首先通过ARP广播确认DR主机,其他RS主机不响应,这就确定了哪一个是DR主机。

 

默认方法:wlc

 

ipvsadm

管理集群服务Director

        添加:-A -t|u|fservice-address [-s scheduler]

            -t:TCP协议的集群

            -u:UDP协议的集群

           -s: 使用的调度算法:

                有这样几个选项 rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,

默认的调度算法是: wlc

                service-address:     IP:PORT

            -f:FWM: 防火墙标记

                service-address:Mark Number

        修改:-E

        删除:-D -t|u|fservice-address

 

        #ipvsadm -A -t 172.16.10.120:80 -s rr

 

   

 

 

但是在linux主机中,IP地址不属于网卡而是属于内核,就是说无论一个linux主机有多少个IP地址,它在接入的各个网络中都会公布它拥有的所有地址,这就给ARP广播的响应制造了困难,所以就需要修改内核参数来保证router发出ARP广播时,DR会响应RS不予响应,这里所说的内核参数分别为:

#arp_announce:定义arp通知级别;

0:默认级别,在各个网络中通告本机所含有的所有地址

1:尽量不在各个网络中通告本机中含有的不属于该网络的地址

2:不在各个网络中通告本机中含有的不属于该网络的地址

#arp_ignore:定义arp忽略arp请求或arp通告的级别;

0:(默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求 

1:只回答目标IP地址是来访网络接口本地地址的ARP查询请求 

2:只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 

3:不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应 

4-7:保留未使用 

8:不回应所有(本地地址)的arp查询

命令如下:real server 上使用

sysctl -w net.ipv4.conf.eth0.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.eth0.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_ignore=1

wKioL1XqsiKT2gsxAAERVDIuRIQ735.jpg

 

 

  按照此图,配置DR服务步骤:

1、配置Director

# Ifconfigeth0 192.168.10.245 up

# Ifconfig eth0:0 192.168.10.120netmask255.255.255.255 broadcast 192.168.10.120 up

# Routeadd –host 192.168.10.120 deveth0:0

 

2、配置RealServer

# Ifconfigeth0 192.168.10.243 up

# Ifconfiglo:0 192.168.10.120 netmask 255.255.255.255broadcast 192.168.10.120 up

# Route add –host 192.168.10.120 dev lo:0

sysctl -w net.ipv4.conf.eth0.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.eth0.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_ignore=1

 

 

 

# Ifconfigeth0 192.168.10.244 up

# Ifconfiglo:0 192.168.10.120 netmask 255.255.255.255broadcast 192.168.10.120 up

# Routeadd –host 192.168.10.120 dev lo:0

sysctl -w net.ipv4.conf.eth0.arp_announce=2

sysctl -w net.ipv4.conf.all.arp_announce=2

sysctl -w net.ipv4.conf.eth0.arp_ignore=1

sysctl -w net.ipv4.conf.all.arp_ignore=1

 

3、配置调度模式和调度计算机服务类型:

Director上执行如下命令:

# Ipvsadm –A – t 192.168.10.120:80 –s rr

  -A添加

  -ttcp协议

  -s:选择调度模式rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, 默认wlc

# Ipvsadm –a – t 192.168.10.120:80 –r 172.16.50.21 –g –w1 

  -a: 添加

  -t:tcp协议

  -r:real server 服务器IP

  -g:选择工作模式(-g:DR ; -i:TUN ; -m:NAT)

  -w:加权重

# Ipvsadm –a – t 192.168.10.120:80 –r 172.16.50.31 –g –w2

这样就完成了同网段内DR类型的负载均衡配置。