LVS(Linux Virtual Server,Linux虚拟服务器)是一个虚拟的服务器集群系统,从Linux 2.6开始成为了Linux内核的一部分,即LVS运行于操作系统层面。
LVS和Nginx在转发请求时的区别
- 代理:Nginx基于OSI七层(应用层)进行异步转发。会与客户端和业务服务器各建立一个连接,可以进行失败转移。
- 转发:LVS基于OSI四层(网络层)进行同步转发。修改数据包的地址信息,让下游服务器与客户端直接连接。
LVS免去了请求到应用层的层层解析工作,工作在操作系统层面,相比于Nginx有更高的性能。
1.LVS的四种转发模式
转发模式:客户端向DS公网VIP发起请求,然后DS负责将请求转发给RS的过程。
常用名词概念
- DR,Director Server,四层负载均衡器节点,运行LVS的服务器。DS和LVS作为角色是一个意思
- RS,Real Server,真实的工作服务器
- VIP,Virtual Server IP,客户端请求的目的IP地址
- DIP,Director Server IP,用于DS与RS通信的IP地址,实际指的是DS内网IP地址
- RIP,Real Server IP,后端服务器的IP地址
- CIP,Client IP,客户端IP地址
1.1 NAT模式
通过修改请求报文的目标IP地址和目标端口号实现DS到某个RS的请求转发。此模式下,网络报文的请求与响应都要经过DS的处理,DS是RS的网关。
要求:
- DS需要两块网卡,一块网卡面向公网提供VIP,一块网卡面向内部网络提供DIP
- DS需要和所有RS处于同一个局域网内,并将DS设置为局域网的网关,否则RS的响应数据将无法传输到DS
缺点:
客户端请求和服务器响应都会经过DS重写,而服务器响应数据的长度一般远大于客户端请求的长度,响应数据会对DS造成网络带宽压力,成为性能瓶颈。
1.2 FULLNAT模式
不要求DS与RS处于同一局域网且作为网关。DS在NAT模式基础上做了一次源IP地址转化,当RS返回响应时,根据IP地址可以正常路由到DS,不需要强行指定DS为网关。
缺点:
- 请求到达RS后丢失客户端IP地址
1.3 TUN(IP隧道)模式
原理:
- DS通过IP隧道加密技术将请求报文封装到一个新的数据包中,并选择一个RS的地址作为新数据包的目的IP地址,然后将它发送到RS
- RS基于IP隧道解密技术解析出原来的数据包内容,查看RS本地是否绑定了原数据包的目的IP地址,如果是,则处理请求并将响应结果通过网关返回给客户端
TUN模式的特点
- DIP和RIP不一定非要在同一个网络环境中,IP隧道技术可以根据IP地址找到RS
- RS和DS所在的网络环境必须支持IP隧道技术
- 除了DS,RS也需要配置VIP,只有这样,RS解析出原数据包内容后才能确认数据包的目的IP地址是自己。另外,需要将VIP绑定到RS的lo网卡,这样才能防止对ARP(地址解析协议)进行响应
- DS仅负责将请求转发到RS,但是RS的响应数据不通过DS转发,而是直接发往客户端,所以TUN模式的性能高于NAT模式
1.4 DR模式
与TUN模式类型(DS仅转发请求并不转发响应数据),DR模式通过改写请求报文的MAC地址将请求转发到RS,然后RS将响应数据通过网关返回给客户端。
DR模式特点:
- 由于DS经过数据链路层(OSI第二层),所以需要把RS的RIP和DS的DIP配置到同一个物理网络中
- 除了DS,RS也需要在lo网卡上配置VIP,理由与TUN模式的一致
- 所有的响应数据都不经过DS转发,与TUN模式一致,但是TUN模式涉及加解密IP隧道,性能不如DS模式
2.四种模式对比以及如何选择
NAT模式
- 优势:RS无需配置VIP
- 劣势:DS需要作为网关,性能一般
FULLNAT模式
- 优势:RS无需配置VIP,对网络环境要求较低
- 劣势:丢失客户端IP地址,性能一般
TUN
- 优势:性能好
- 劣势:服务器需要支持IP隧道协议,RS需要配置VIP
DR:
- 优势:性能好
- 劣势:DS和RS需要再同一个物理网络中,RS需要配置VIP
选择策略
- 如果希望LVS有更强的网络环境适应性,可选择FULLNAT模式
- 如果希望LVS有更高的性能,可以选择DR模式