读书笔记-LVS简介、工作模式介绍

目录

 

LVS负载均衡简介

LVS相关术语介绍

LVS依赖的内核模块

LVS负载均衡调度算法

LVS基本工作原理​

LVS的组成

LVS的工作模式

基于DR的LVS负载均衡

VS/DR的数据包转发过程

VS/DR的特点

基于NAT的LVS负载均衡

VS/NAT数据包转发过程

VS/NAT的特点

基于TUN的LVS负载均衡

VS/TUN的数据包转发过程

VS/TUN的特点

基于FULLNAT的LVS负载均衡

VS/FULLNAT的数据包转发过程

VS/FULLNAT的特点


LVS负载均衡简介

    LVS(Linux Virtual Server)即Linux虚拟服务器,目前LVS已经被集成到Linux内核模块中。在Linux内核中实现了基于IP的数据请求负载均衡调度方案。
     终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实服务器,但如果真实服务器连接的是相同的存储,提供的服务也都是相同的服务,最终用户不管是访问哪台真实的服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。

LVS相关术语介绍

  • LB(load Balancer 负载均衡)
  • LVS(Linux Virtual Server  Linux 虚拟服务器)
  • DS(Director Server,前端负载均衡调度器节点)
  • RS(Real Server,后端真实的工作服务器)
  • VIP(Virtual IP,虚拟的IP地址,向外部直接面向用户请求,作为用户请求的目标IP地址)
  • DIP(Director IP,用于和内部主机通信的IP地址)
  • RIP(Real Server IP,后端服务器的IP地址)
  • CIP(Client IP,访问客户端的IP地址。

LVS依赖的内核模块

# lsmod | grep ip_vs
Module                  Size  Used by
ip_vs_wlc              12519  8
ip_vs                 136701  10 ip_vs_wlc
libcrc32c              12644  1 ip_vs
nf_conntrack           96976  7 ip_vs,xt_CT,nf_nat,nf_nat_ipv4,xt_conntrack,iptable_nat,nf_conntrack_ipv4

LVS负载均衡调度算法

  • 轮询调度(RR)
    按一次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器
  • 加权轮询调度(WRR)
    对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
  • 最小连接调度(LC)
    将请求调度到连接数量最小的服务器上
  • 加权最小连接调度(WLC)
    给每个服务器一个权值,调度器会尽可能保持服务器连接数量与权值之间的平衡
  • 基于局部性最少的连接(lblc)
    请求数据包的目标IP地址的一种调度算法,该算法先根据请求的目标IP地址寻找最近该目标IP地址所使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其他可行的服务器。
  • 带复制的基于局部性最少连接(lblcr)
    记录的不是一个IP与一台服务器之间连接记录,它会维护一个目标IP到一组服务器之间的映射关系,防止单点服务器负载过高。
  • 目标地址散列调度(DH)
    根据目标IP地址通过散列函数将目标IP与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标IP的请求会固定发给该服务器
  • 源地址散列调度(SH)
    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

LVS基本工作原理

1.当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2.PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3.IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链。
4.POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器。

LVS的组成

lvs有两部分程序组成,包括ipvs和ipvsadm。

  1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码
  2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

LVS的工作模式

LVS常见的工作模式包括:

  1. DR模式(https://wsgzao.github.io/post/lvs-dr/
  2. NAT模式(https://wsgzao.github.io/post/lvs-nat/
  3. TUN模式(https://wsgzao.github.io/post/lvs-tun/
  4. FULLNAT模式(https://blog.csdn.net/sj349781478/article/details/106121218

基于DR的LVS负载均衡

VS/DR的数据包转发过程

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包发送至INPUT链
  3. IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改为RIP的MAC地址
  4. 由于DS和RS在同一个网络中,所以是通过二层来传输,POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server
  5. RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文,处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。此时的源IP地址为VIP,目标IP为CIP
  6. 响应报文最终送至客户端。

VS/DR的特点

  1. 数据包在LB转发过程中,源/目的IP端口都不会变化
    LB只是将数据包的MAC地址改写为RS的MAC地址,然后转发给相应的RS。
  2. 每台RS上都必须在环回网卡上绑定LB的虚拟服务IP
    因为LB转发时并不会改写数据包的目的IP,所以RS收到的数据包的目的IP仍是LB的VIP,为了保证RS能够正确处理数据包,而不是丢弃,必须在RS的环回网卡上绑定LB的VIP,这样RS会认为这个VIP是自己的IP,自己是能够处理这个数据包的,否则RS会直接丢弃改数据包
  3. RS上的业务进程必须监听在环回网卡的VIP上,切端口必须和LB上的VIP端口一致。
    因为LB不会改写数据包的目的端口,所以RS服务的监听端口必须和VIP端口一致,否则RS会直接拒绝该数据包。
  4. RS处理完请求后,响应直接回给客户端,不再经过LB
    因为RS收到的请求数据包的源IP是客户端的IP,所以理所当然RS的响应会直接回给客户端,而不会在经过LB。这时候要求RS和客户端之间的网络是可达的。
  5. LB和RS须位于同一个子网
    因为LB在转发过程中需要改写数据包的MAC为RS的MAC地址,所以要能够查询到RS的MAC地址,而要获取到RS的MAC地址,则需要保证二者位于一个子网,否则LB只能获取到RS网关的MAC地址。

基于NAT的LVS负载均衡

VS/NAT数据包转发过程

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP
  2. PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
  3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。此时报文的源IP为CIP,目标IP为RIP
  4. POSTROUTING链通过选路,将数据包发送给Real Server
  5. Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。此时报文的源IP为RIP,目标IP为CIP
  6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP。

VS/NAT的特点

  1. LB会修改数据包的地址
    对于请求包,会进行DNAT;对于响应包,会进行SNAT
  2. LB会透传客户端IP到RS(DR模式也会透传)
    虽然LB在转发过程中做了NAT转换,但是因为只是做了部分地址转发,所以RS收到的请求包里是能看到客户端IP的。
  3. 需要将RS的默认网关地址配置为LB的浮动IP地址
    因为RS收到的请求包源IP是客户端的IP,为了保证响应包在返回时能走到LB上面,所以需要将RS的默认网关地址配置为LB的VIP地址。当然,如果客户端的IP是固定的,也可以在RS上添加明细路由指向LB的VIP,不用改默认网关。
  4. LB和RS须位于同一个子网,并且客户端不能和LB/RS位于同一子网
    因为需要将RS的默认网关配置为LB的VIP地址,所以需要保证LB和RS位于同一子网。
    又因为需要保证RS的响应包能走回到LB上,则客户端不能和RS位于同一子网。否则RS直接就能获取到客户端的MAC,响应包就直接回给客户端了,不会走网关,也就走不到LB上面了。这时候由于没有LB做SNAT,客户端收到的响应包源IP是RS的IP,而客户端的请求包目的IP是LB的虚拟服务IP,这时候客户端无法识别响应包,会直接丢弃。

基于TUN的LVS负载均衡

VS/TUN的数据包转发过程

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。
  2. PREROUTING检查发送的数据包的目标是本机,将数据包发送至INPUT链
  3. IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP。
  4. POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP
  5. RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
  6. 响应报文最终送达至客户端。

VS/TUN的特点

()

基于FULLNAT的LVS负载均衡

VS/FULLNAT的数据包转发过程

  1. 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链,此时报文的源IP为CIP,目标IP为VIP。

  2. PREROUTING检查发送的数据包的目标是本机,将数据包发送至INPUT链

  3. IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,修改源IP为DS的内网IP,然后将数据包发送至POSTROUTING链,此时报文的源IP为DS的内网DIP(内网Local IP),目标IP为RIP

  4. POSTROUTING链通过选路,将数据包发送给Real Server。

  5. Real Server比对目标为自己的IP,开始构建响应报文发回给Director Server。此时源IP为RIP,目的IP为DS的DIP(内网Local IP)。

  6. Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP,目的IP修改为CIP,然后响应给客户端。此时报文的源IP为VIP,目标IP为CIP。

VS/FULLNAT的特点

  1. LB完全作为一个代理服务器
    FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到LB,此种模式和七层负载均衡有点相似,只不过不会去解析应用层协议,而是在TCP层将消息转发
  2. LB和RS对于组网结构没有要求
    不同于NAT和DR要求的LB和Rs位于一个子网,FULLNAT对于组网结构没有要求。只需要保证客户端和LB、LB和RS之间网络互通即可。
  3. 可扩展性强
    由于没有组网要求,可以通过增加更多的LB节点,提升系统整体的负载均衡能力。
     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值