Mrfei 发表于 2019-1-3 07:43:24

LVS-Libra博客

  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)
  服务器网关      负载均衡器   自己的路由    自己的路由
  效率         一般      高        最高
http://s3.运维网.com/wyfs02/M01/72/AA/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
http://s3.运维网.com/wyfs02/M02/72/AA/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
http://s3.运维网.com/wyfs02/M00/72/A6/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:添加
  -t:tcp协议
  -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类型的负载均衡配置。
  

页: [1]
查看完整版本: LVS-Libra博客