Linux负载均衡集群LVS四种工作模式原理及比较

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux负载均衡集群LVS四种工作模式原理及比较相关的知识,希望对你有一定的参考价值。

LVS

  • Linux Virtual Server
  • 1995 中国 章文嵩
  • Linux内核默认组件
  • 接受用户请求并转发给后端服务器由后端服务器响应请求

LVS集群四种工作模型

DR模式

  • DR 直接路由 默认模式
  • 速度最快,效率最高
  • DR模式LVS和后端服务器使用MAC地址判断,不能跨路由
  • 解决VIP冲突可以在路由器上写IP和MAC绑定(不建议使用)
  • 关闭免费ARP,虽然请求单不应答ignore,对外发布announce。Gratuitous ARP也称为免费ARP,无故ARP
  • RS服务器默默拥有VIP却不发布
  • 把VIP绑在LO回环网卡上,并在回环网卡上关闭免费ARP
  • 解决了NAT模式请求报文和应答报文都要走LVS服务器的瓶颈问题

DR转发方式

  • 通过为请求报文重新封装一个MAC首部进行转发,
  • 源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
  • 源IP/PORT,以及目标IP/PORT均保持不变
  • 每个RS上不仅有RIP同时也配VIP
  • 直接配VIP会产生地址冲突
  • 在内核里修改了数据包的数据链路层目标MAC地址
  • 后端RS回应时直接返回VIP

DR模式特点

  1. Director和各RS都配置有VIP
  2. 确保前端路由器将目标IP为VIP的请求报文发往Director
    – 在前端网关做静态绑定VIP和Director的MAC地址
    – 在RS上使用arptables工具
    arptables -A IN -d $VIP -j DROP
    arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
    – 在RS上修改内核参数以限制arp通告及应答级别
    /proc/sys/net/ipv4/conf/all/arp_ignore
    /proc/sys/net/ipv4/conf/all/arp_announce
  3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
  4. RS和Director要在同一个物理网络
  5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
  6. 不支持端口映射(端口不能修改)
  7. 应答报文不再经过LVS服务器,LVS服务器无需开启 ip_forward
  8. RS可使用大多数OS系统

DR模式应用场景

  • 不需要跨路由的普适场景
  • 基于4层,高性能大并发需求的各种应用服务通吃
  • 无法解决动态应用

TUN模式

  • TUN 隧道模式
  • 和DR很像,加了新IP头
  • 用的不多,跨网段的DR模式
  • 需要通过特殊的命令来生成隧道
  • 通常用来做缓存服务器
  • 真正的广域网使用haproxy、nginx等更好

TUN转发方式

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

TUN模式特点

  1. RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址
  2. RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
  3. Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
  4. 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
  5. 不支持端口映射
  6. RS的OS须支持隧道功能

TUN模式应用场景

  • 一般来说,TUN模式常会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同的网络环境,可以就近折返给客户端。
  • 在请求对象不在Cache服务器本地命中的情况下,Cache服务器要向源服务器发送请求,将结果取回,最后将结果返回给用户。
  • LAN环境一般多采用DR模式,WAN环境虽然可以用TUN模式,但是一般在WAN环境下,请求转发更多的被haproxy/nginx/DNS等实现。
  • 因此,TUN模式实际应用的很少,跨机房的应用一般专线光纤连接或DNS调度。

NAT模式

  • lvs-nat:本质是多目标IP的DNAT
  • -过去的时候不开启ip_forward也能过去
  • 回来的时候不开启ip_forward就回不来
  • 因为本质是DNAT,LVS服务器必须开启ip_forward

NAT转发方式

  • 通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发
  • 在五表五链的时候在input前添加CIP掰弯了往postrouting转发出去

NAT模式特点

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

NAT模式应用场景

  • 对并发不高的内部应用解决方案
  • 例如服务器日志查询mysql负载均衡双机集群
  • 小规模高可用集群应用

FULLNAT模式

  • 源目标地址和目标地址都改了
  • LVS服务器本身不支持,阿里改过内核实现
  • 用的很少

FULLNAT转发方式

  • 通过同时修改请求报文的源IP地址和目标IP地址进行转发
  • CIP --> DIP
  • VIP --> RIP
  • 管你是啥,都改了就完事了

FULLNAT模式特点

  1. 此类型kernel默认不支持
  2. VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
  3. RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
  4. 请求和响应报文都经由Director
  5. 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
  6. 支持端口映射

FULLNAT模式应用场景

  • 需要跨VLAN实现集群的场景
  • 例如生产服务器已部署,不改变现有网络环境组建FULLNAT集群

LVS四种过工作模式比较

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头实现转发,支持远距离通信
    LVS工作模式比较

以上是关于Linux负载均衡集群LVS四种工作模式原理及比较的主要内容,如果未能解决你的问题,请参考以下文章

Linux 集群总结 + LVS(负载均衡器)原理及配置

Linux负载均衡集群LVS十二种调度算法

lvs集群原理及部署实例

LVS负载均衡群集部署——DR模式的介绍及搭建步骤

LVS负载均衡群集部署之——DR模式的介绍及搭建步骤

linux之集群LVS