引言
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。[百度百科]
作用就是为了给后端服务器提供负载均衡的高可用集群
,它是集成在linux内核
中的功能
NAT 模式
NAT(Network Address Translation,网络地址转换)
,我们知道linux中能实现NAT
功能也可以用iptables
,但是iptables
无法实现负载均衡多台服务器。
原理简单的说就是它是在prerouting后
,input前
,加了一个拦截器去实现功能。
小白文理解工作流程
- LVS服务器
(Director 调度器)
,有一个VIP(Virtual IP)
和DIP(Director IP)
- 当用户访问
VIP
时,我们假定为TCP
协议80端口(HTTP协议
),那么IP头会存放IP,TCP头存放端口。
这个报文应该是这样的:Src:用户IP Dst:VIP srcPort:随机 DstPort:80
Director
会将报文修改后传给后端服务器(Real Server),后端服务器IP我们叫RIP,后端服务器监听的是8888端口
。
修改后的报文变成了这样:Src:用户IP Dst:RIP srcPort:随机 DstPort:8888
Real Server
要经过原路返回响应,因为Real Server
网关设置的是DIP(Director IP)
,最后响应包会经过Director
,数据包又会被替换回去,只是最开始报文的IP头的源地址和目标地址互换,TCP头的端口互换了而已。(因为是响应包)
Src:VIP Dst:用户IP srcPort:80 DstPort:随机
。
总结来说,NAT模式下,整个过程都要通过Director
,所以Director
的性能瓶颈会是问题。
DR模式
Direct Routing
直接路由模式,它和NAT最大的区别在于,返回响应包时,不会经过Director
,客户端访问VIP
,Director
会重新封装一个MAC
头,源MAC
是DIP
所在接口的MAC
,目的MAC
为RIP
所在MAC
,转发给Real Server
,响应时Real Server
直接返回给客户端。
注意:这样直接响应IP头
肯定不会是Real Server
自己的IP
,因为TCP
协议是安全的,无法在IP头部直接换个srcIP
去响应别的IP
的报文,所以Real Server
还绑了个VIP
(在lo环回接口,这样不会出现IP冲突问题)和Director
的VIP
相同,所以响应时可以直接用VIP
响应请求。
TUN模式
Tunneling模式
和DR模式
有点像,但又不同,响应包同样不会经过Director
,它通过将CIP
访问VIP
的IP报文
再加一层IP头
转发给Real Server
,当Real Server
接收到后,会将封装那层IP头去掉,然后使用VIP直接返回响应,它和DR模式
的区别在于,DR模式
是在2层修改,Tunneling模式
是在3层修改,优点在于可以对不同子网中的Real Server
进行负载。