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模式特点
- Director和各RS都配置有VIP
- 确保前端路由器将目标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
- RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和Director要在同一个物理网络
- 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
- 不支持端口映射(端口不能修改)
- 应答报文不再经过LVS服务器,LVS服务器无需开启 ip_forward
- 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模式特点
- RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址
- RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
- Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
- 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
- 不支持端口映射
- 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模式特点
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系统
NAT模式应用场景
- 对并发不高的内部应用解决方案
- 例如服务器日志查询mysql负载均衡双机集群
- 小规模高可用集群应用
FULLNAT模式
- 源目标地址和目标地址都改了
- LVS服务器本身不支持,阿里改过内核实现
- 用的很少
FULLNAT转发方式
- 通过同时修改请求报文的源IP地址和目标IP地址进行转发
- CIP --> DIP
- VIP --> RIP
- 管你是啥,都改了就完事了
FULLNAT模式特点
- 此类型kernel默认不支持
- VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
- RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
- 请求和响应报文都经由Director
- 相对NAT模式,可以更好的实现LVS-RealServer间跨VLAN通讯
- 支持端口映射
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头实现转发,支持远距离通信
以上是关于Linux负载均衡集群LVS四种工作模式原理及比较的主要内容,如果未能解决你的问题,请参考以下文章