首页 > 技术文章 > LVS的使用

zhangquan-yw 2021-05-10 10:56 原文

LVS的使用

制作人:全心全意

常见的硬件负载均衡
  F5,BIG IP
  A10

常见的软件负载均衡
  四层:
    LVS
  七层:(反向代理)
    nginx
    haproxy

 

LVS和iptables不能同时使用
LVS工作在INPUT链中
LVS分为两部分
  ipvsadm:管理集群的命令行工具
  ipvs:工作在内核

 

LVS三种类型
  NAT:地址转换

    多目标的DNAT(iptables):它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP地址实现转发
    1、RS应该和DIP应该使用私网地址,且RS的网关要指向DIP
    2、请求和响应报文都要经由director转发,极高负载的场景中,director可能会成为系统瓶颈
    3、支持端口映射
    4、RS可以使用任意OS
    5、RS的RIP和director的DIP必须在同一IP网络
  DR:直接路由

    通过修改请求报文的目标MAC地址进行转发
    1、保证前端路由器将目标IP为VIP的请求报文发送给director
      方法:
        静态绑定
        arptables
        修改RS主机内核的参数
    2、RS的RIP可以使用私有地址,也可以使用公网地址
    3、RS跟director必须在同一物理网络中
    4、请求报文经由director调度,但响应报文一定不能经由director
    5、不支持端口映射
    6、RS可以是大多数的OS
    7、RS的网关不能指定DIP

  TUN:隧道

    不修改请求报文的IP首部,而是通过在原有ip首部(CIP-->VIP)之外,再封装一个ip首部(DIP-->RIP)
    1、RIP、DIP、VIP全都是公网地址
    2、RS的网关不能指向DIP
    3、请求报文必须经由director调度,但响应报文必须不能经由director
    4、不支持端口映射
    5、RS的OS必须支持隧道功能

 

NAT模式

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

 

 

DR模式

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

 

TUN模式

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

 

LVS的调度方法
  固定调度:
    rr:轮询
    wrr:加权轮询
    sh:源地址hash(session绑定(若能实现session共享,可不使用sh))
    dh:目标地址hash(把同一个IP地址的请求,发送给同一个server)

 

  动态调度:

    lc:最少连接
      活动连接数*256+非活动连接数
    wlc:加权最少连接
      (活动连接数*256+非活动连接数)/权重
    sed:最短期望延迟(基于wlc算法)
      (活动连接数+1)*256/权重
    nq:永不排队
      如果有台服务器的连接数=0就直接分配过去(若多台为0,根据权重分配),不需要在进行sed运算。
    LBLC:基于本地的最少连接
    LBLCR:带复制的基于本地的最少链接

 

默认调度方法wlc

 

NAT:地址转换(类似于DNAT)
  1、集群点跟director必须工作在同一个IP的网络中
  2、RIP通常是私有地址,仅用于各集群节点间的的通信
  3、director位于client和real server之间,并负责处理进出的所有通道。
  4、realserver必须将网关执行DIP
  5、director支持端口映射
  6、realserver可以使用任何类型的操作系统(os)
  7、较大规模应用场景中,director易成为系统瓶颈

 

DR:直接路由(及用于作为源地址)
  1、各集群节点跟director必须在同一个物理网络中;
  2、RIP可以使用公网地址,实现便携的远程管理和监控;
  3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
  4、realserver不能将网关指向DIP,而是直接指向前端网关;
  5、director不支持端口映射
  6、大多数操作系统能够用在realserver
  7、director能够处理更多的realserver

 

TUN:隧道
  1、集群节点可以跨越Internet
  2、RIP必须是公网地址
  3、director仅负责处理入站请求,形影报文则有realserver直接发往客户端
  4、realserver网关不能指向director
  5、只有咫尺隧道功能的OS才能用于realserver
  6、不支持端口映射


ipvsadm的作用
  管理集群服务
    添加|修改:-A|-E -t|u|f service-address [-s scheduler]
      -t:TCP协议
        service-address:IP:PORT
      -u:UDP协议
        service-address:IP:PORT
      -f:防火墙标记
        service-address:Mark Number
    删除:-D -t|u|f service-address

 

  管理集群服务中的RS
    添加|修改:-a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
      -r:某RS的地址
      -g:DR(默认)
      -i:TUN
      -m:NAT
      -w:权重

    删除:-d -t|u|f service-address -r server-address

 

  查看
    -L|l [options]
    -n:数字格式显示主机地址和端口
    --stats:统计数据
    --rete:显示1秒的速率
    -c:显示当前的ipvs连接状况
    -C:清空ipvs规则
    -S:保存规则
    -S > 保存位置
    -R:载入规则
    -R < 保存的规则路径

 

推荐阅读