LVS特性介绍:

1 属于四层调度[物理层|数据链路层|网络层|传输层]
不需要解封装,但不能识别报文数据,速度快,性能好!
2 高可用性实现方式--keepalived
3 工作原理:
LVS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度 算法来挑选RS
4 工作位置:INPUT链之前
5 专用术语简介:
VS:Virtual Server,Director  Server(DS) --调度器
        Dispatcher(调度器),Load Balancer
RS:Real Server(lvs), upstream server(nginx)       
        backend server(haproxy) --后端服务器
CIP:Client IP --客户端拥有的IP地址
VIP: Virtual serve IP VS外网的IP 
DIP: Director IP  VS内网的IP
RIP: Real server IP  后端服务器IP
6 访问流程简述:
CIP <--> VIP == DIP <--> RIP
7 命令行管理工具:ipvsadm
8 工作于内核级别,支持并发访问量大
验证内核支持LVS
[root@KEEP208:56:43~]#cat /boot/config-3.10.0-862.el7.x86_64 | grep -i "ipvs"
CONFIG_NETFILTER_XT_MATCH_IPVS=m
# IPVS transport protocol load balancing support
# IPVS scheduler
# IPVS SH scheduler
# IPVS application helper

LVS四种模型简介:NAT

lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
解析:
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发  
(1) RIP和DIP应在同一个IP网络[也可以跨网段],且应使用私网地址;RS的网关要指向DIP  
(2)请求报文和响应报文都必须经由LVS转发,LVS易于成为系统瓶颈  
(3)支持端口映射,可修改请求报文的目标PORT  
(4)VS必须是Linux系统,RS可以是任意OS系统

LVS四种模型简介:DR

lvs-dr:操纵封装新的MAC地址 默认模式 
解析:
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛
通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC
目标 MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标 IP/PORT均保持不变 

1 LVS和各RS都配置有VIP 
2 确保前端路由器将目标IP为VIP的请求报文发往LVS
方式1:
在前端网关做静态绑定VIP和LVS的MAC地址
方式2:
在RS上使用arptables工具      
arptables -A IN -d $VIP -j DROP      
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
方式3:
在RS上修改内核参数以限制arp通告及应答级别 
忽略apr广播: 
/proc/sys/net/ipv4/conf/all/arp_ignore   --1
不宣称自己有这段IP:
/proc/sys/net/ipv4/conf/all/arp_announce --2
后端服务器也设置vip一样的IP地址
配置解析:
限制响应级别:arp_ignore 
0:默认值,表示可使用本地任意接口上配置的任意地址进行响应 
1: 仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应

限制通告级别:arp_announce 
0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告 
1:尽量避免将接口信息向非直接连接网络进行通告 
2:必须避免将接口信息向非本网络进行通告 
参数其它配置:
[root@KEEP211:01:29~]#find /proc -name *arp_ign*
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/default/arp_ignore
/proc/sys/net/ipv4/conf/eth0/arp_ignore
/proc/sys/net/ipv4/conf/eth1/arp_ignore
/proc/sys/net/ipv4/conf/lo/arp_ignore
........................................................
[root@KEEP211:47:29~]#find /proc -name *arp_announce*
/proc/sys/net/ipv4/conf/all/arp_announce
/proc/sys/net/ipv4/conf/default/arp_announce
/proc/sys/net/ipv4/conf/eth0/arp_announce
/proc/sys/net/ipv4/conf/eth1/arp_announce
/proc/sys/net/ipv4/conf/lo/arp_announce

vip配置在lo接口上!
举例:
ip a a 1.1.1.1/32 dev lo --要配置32的子网掩码
 ---加默认路由 route add default dev eth0

ping -I 1.1.1.1 1.1.1.2 --指定从本机那个IP -ping对方

DR模型特点:
1 RS的RIP可以使用私网地址,也可以是公网地址;
2 RIP与DIP在同一IP网络; RIP的网关不能指向DIP,以确保响应报文不会经由Director
3 RS和LVS一个物理网络
4 请求报文要经由LVS,相应报文不经过LVS
而由RS直接发往 Client
5 不支持端口映射-端口不能修改
6 RS可使用大多数OS系统 

DR模型不用启用ip_forward功能
NAT模型必须要启用此功能

LVS四种模型简介:tun

lvs-tun: 在原请求IP报文之外新加一个IP首部
转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP)
而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP)
将报文发往挑选出的目标 RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP) 

(1) DIP, VIP, RIP都应该是公网地址 
(2) RS的网关一般不能指向DIP 
(3) 请求报文要经由Director,但响应不能经由Director 
(4) 不支持端口映射 
(5) RS的OS须支持隧道功能 

LVS四种模型简介:lvs-fullnat

lvs-fullnat:
通过同时修改请求报文的源IP地址和目标IP地址进行转发  
 CIP --> DIP   
 VIP --> RIP   
    (1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;
    因此RIP的网关一般不会指向DIP  

    (2) RS收到的请求报文源地址是DIP,因此只需响应给DIP;
    但Director还 要将其发往Client  

    (3) 请求和响应报文都经由LVS
    (4) 支持端口映射  

    注意:此类型kernel默认不支持

模式之间差异总结:

差异总结:
lvs-nat与lvs-fullnat:请求和响应报文都经由Director    
lvs-nat:RIP的网关要指向DIP    
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信 

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client    
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发   
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信 

对比项                 NAT               TUN               DR
后端服务器          任何服务器        必须支持隧道       关闭apr广播
服务器网络          私网/公网         私网/公网           局域网
后端服务器数量       10--20            最大100            最大100
服务器网关:        指向LVS            其它路由           其它路由

LVS十种算法:静态算法

1、RR:roundrobin,轮询 
2、WRR:Weighted RR,加权轮询 
 自己的权重/总权重

3、SH:Source Hashing,实现session sticky,源IP地址hash;
将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定 

4、DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,
典型使用场景是正向代理缓存场景中的负载均衡, 如:宽带运营商

LVS十种算法:动态算法

1、LC:least connections 适用于长连接应用[最小连接算法]  
Overhead=activeconns*256+inactiveconns 
          活动连接*256+非活动连接
          值越小优先级越高!
2、WLC:Weighted LC,默认调度方法  
Overhead=(activeconns*256+inactiveconns)/weight 
          (活动连接*256+非活动连接)/权重
          值越小优先级越高!
          权重越大,值越小,优先级越高
          第一个请求过来时,为0
3、SED:Shortest Expection Delay,初始连接高权重优先  
Overhead=(activeconns+1)*256/weight 
          (活动连接+1)*256/权重
4、NQ:Never Queue,第一轮均匀分配,后续SED 

5、LBLC:Locality-Based LC,动态的DH算法,
使用场景:根据负载状态实现 正向代理 

6、LBLCR:LBLC with Replication,带复制功能的LBLC,
解决LBLC负载不均衡 问题,从负载重的复制到负载轻的RS