lvs三种工作模型

LVS介绍

LVS:Linux Virtual Server,负载调度器,内核集成,章文嵩(花名 正明), 阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现
LVS 官网:http://www.linuxvirtualserver.org/


lvs工作原理:

1.根据套接字做转发:四层交换、四层路由,工作在tcp/udp等协议的四层;
    2. 根据用于的请求的IP加端口来判定是否转发:向何处转发,工作在内核中,不通过用户空间;
    3. osi模型第四层,(无法根据应用层转发,如果要通过应用层转发就必须到用户空间,根据mac转换叫交换机加,根据ip转发叫路由器);
    4. 套接字最多65535个,ipvs不依赖套接字


lvs相关术语

LVS Director:负载调度器,它接收所有传入的客户端服务请求,并将它们定向到特定的“真实服务器(RS)”以处理请求
    Real servers:组成LVS群集的节点,用于代表群集提供服务
    Client computers:向LVS Director请求服务的计算机
    VIP(Virtual IP address):用于向客户端计算机提供服务的IP地址
    RIP(Real IP address):用于连接到群集节点的IP地址
    DIP (Directors IP address):用于连接到真实IP地址网络的IP地址
    CIP(Client computers):分配给客户端计算机的IP地址,它用作发送到群集的请求的源IP地址

访问流程:CIP <--> VIP == DIP <--> RIP

Lvs工作模式

一、lvs-nat: 修改请求报文的目标ip和目标端口,多目标ip的DNAT

1. RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
    2. 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
    3. 支持端口映射,可修改请求报文的目标PORT
    4. VS必须是Linux系统,RS可以是任意OS系统

缺点:
    Director很可能成为系统性能瓶颈

LVS-DNat工作过程
1、 客户端请求数据,目标IP为VIP
2、 请求数据到达LB服务器,LB根据调度算法将目的地址修改为RIP地址及对应端口(此RIP地址是根据调度算法得出的),并在连接HASH表中记录下这个连接。
3-4、 数据包从LB服务器到达RS服务器webserver,然后webserver进行响应。Webserver的网关必须是LB,然后将数据返回给LB服务器。
5、 收到RS的返回后的数据,根据连接HASH表修改源地址VIP目标地址CIP,及对应端口80.然后数据就从LB出发到达客户端。
6、 客户端收到的就只能看到VIP/DIP信息。


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

1. Director和各RS都配置有VIP
   2. 确保前端路由器将目标IP为VIP的请求报文发往Director
   3. RS的RIP可以使用私网地址,也可以是公网地址,此时可以直接通过互联网连入RS以实现配置、监控等;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
   4. RS和Director要在同一个物理网络(不能由路由分隔,中间不能经过路由器,可以经过交换机
   5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
   6. RS可使用大多数OS系统

缺点:
    不支持端口映射(端口不能修败)

同网段

LVS-DR工作原理
1、Client正常访问服务,源地址CIP目标地址GIP即真实的伪地址公网IP(因为提供服务的是内部的私有网络VIP)
2、通过路由器或防火墙的调度把请求报文的数据帧的目标MAC地址改为LB服务器真实的DIP的MAC地址,放行此次访问把请求给送给提供调度的LB服务器,此时CIP的MAC为私网入口IP的MAC,VIP目标为LB主机VDP的MAC(因为通过路由器和防火墙调度后,数据帧始终在同一个局域网传输)
3、LB将请求报文的数据帧的目标MAC地址改为RS服务器的MAC地址(RIP),然后再将修改的数据帧在局域网内发送给真实提供服务RS服务服务器。此时的CIP的MAC内DIP的MAC,VIP目标为RS服务的MAC.(我们需要在本地的lo上面配置VIP,来调度后面的RS服务器,并接受响应)
4、RS服务器接收到请求数据包的时候, 解开IP包头查看到的目标IP是VIP。(此时只有自己的IP符合目标IP才会接收进来,所以需要在本地的lo上面配置VIP,等待调度)
5、然后RS服务器做成请求响应,之后根据自己的路由信息将这个响应数据包发送回给客户,并且源IP地址还是VIP,目标仍IP为CIP,源MACRSMAC目标MAC为私网入口MAC地址,之后在通过入口设备调用给Client

问题:由于同一局域网内网络接口都会进行ARP广播响应,但集群的其他机器都有这个VIP的lo接口,都响应就会冲突

解决方法:
1 在前端网关做静态绑定VIP和Director的MAC地址(未必有路由器的配置权限;Director调用时静态地址绑定将难以适用)
 
 
2.在RS上使用arptables工具(不常用)
           arptables -A IN -d $VIP -j DROP
           arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RI

3 在RS上修改Liunx内核参数,将RS上的VIP配置在lo接口的别名,限制其LIunx仅对对应接口的ARP请求做相应(建议使用)
 /proc/sys/net/ipv4/conf/all/arp_ignore(修改为1)
    0:只要本地配置有相应的地址时,就给与相应
    1:仅在请求的目标地址配置请求到达的接口上的时侯,才给与响应

/proc/sys/net/ipv4/conf/all/arp_announce(修改为2)
    0:将本地任何接口的任何地址向外通告
    1:试图仅向目标网络通告与其网络匹配的地址
    2:仅与本地接口上地址匹配的网络

不同网段

如同网段的请求过程基本一样,不在赘述

需要注意:
lo网卡上的VIP10.0.0./32和局域网IP不在同一网络中却都属于私有网络,此时需要在路由器上做路由或者添加一个10.0.0.0/8网段的任意主机在eth1网卡即内网IP入口的网卡上
 
添加路由
ip route 10.0.0.0/8 via eth1
 
添加ip
ip a a 10.0.0.100/8 via eth1
自动生成到10.0.0.0/8 dev eth1的路由
从而通过eth1实现和不同主机上的lo网卡通信
``


三、LVS TUN类型: ip隧道(IPIP)转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP

1、RIP、DIP、VIP都是公网地址(也可以是私网,如内部专线)
    2、RS的网关不会指向也不可能指向DIP;
    3、请求报文经过Directory,但响应报文一定不经过DIrector
    4、适用于跨互联网转发

缺点
不支持端口映射
RS的OS必须得支持隧道功能

LVS-TUN实现原理
1、客户请求数据包,目标地址VIP发送到LB上。
2、LB接收到客户请求包,进行IPTunnel封装。即在原有的包头加上IP Tunnel的包头。然后发送出去。
3、RS节点服务器根据IP Tunnel包头信息(此时就又一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,然后解开IP Tunnel包头信息,得到客户的请求包并进行响应处理。
4、RS服务器响应处理完毕之后,RS服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源IP地址还是VIP地址,仍需经过路由(RS节点服务器需要在lo配置VIP)


LVS工作模式总结和比较

VS/NAT VS/TUN VS/DR
Server any Tunneing Non-arp device
server network private LAN/WAN LAN
server number low(10-20) High(100) High(100)
server gatway load balancer own router Own route

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章