LB集群的架构和原理很简单,就是当用户的请求过来时,会直接分发到Director Server上,然后它把用户的请求根据设置好的调度算法,智能均衡地分发到后端真正服务器(real server)上。为了避免不同机器上用户请求得到的数据不一样,需要用到了共享存储,这样保证所有用户请求的数据是一样的。
LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。
是一个虚拟的服务器集群系统。其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。一般来说,LVS集群采用三层结构,其体系结构如图所示:
LVS集群的通用体系结构:
LVS集群采用三层结构,其体系结构如图1所示,三层主要组成部分为:
keepalived是集群管理中保证集群高可用的一个服务软件,简而言之,它的主要功能检查后端服务器 ( real server)的健康情况,如后端服务器出现故障,则将它隔离,恢复后将它加入。keepalived运行在 LVS之上,提高系统的可用性。
LVS由两部分程序组成,包括 ipvs 和 ipvsadm。
VS:Virtual Server,Director,Dispatcher,Balancer #调试器,分发器、负载均衡器
DS:Director Server #前端负载均衡器节点。
RS:Real Server #后端请求处理服务器。
CIP:Client IP #客户端的IP
VIP:Director Virtual IP #负载均衡器虚拟IP,向外部直接面向用户请求,作为用户请求的目标的IP地址。
DIP:Director Server IP #负载均衡器真实IP,主要用于和内部主机通讯的IP地址。
RIP:Real Server IP #后端服务器的内网IP
sip: source ip,源IP
dip: destination ip,目的IP
LB: Load Balance 负载均衡器
LVS: Linux Virtual Server
NAT: Network Address Translation,网络地址转换
SNAT: Source Network Address Translation,源地址转换
DNAT: Destination Network Address Translation,目的地址转换
LVS四种工作模式:
NAT:路由转发模式
DR:直接路由模式
TUN:隧道模式
FULLNAT: 双向转换模式
LVS的nat集群会将请求报文中的目标地址和目标端口修改为选定到的真实服务器的IP和端口,从而实现报文的转发。
LVS-NAT模型的特性
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
LVS-Tun模型特性
企业中最常用的是 DR 实现方式,而 NAT 配置上比较简单和方便。
LVS-DR集群是LVS的默认模式,将请求报文的目标MAC地址设定为挑选出的RS的MAC地址
LVS-DR模型的特性
特点1的解决方案:
修改RS上内核参数(arp_ignore和arp_announce)将RS上的VIP配置在lo接口的别名上,并限制其不能响应对VIP地址解析请求。
在RS上修改内核参数以限制arp通告及应答级别
arp_ignore = 1 #表示系统只响应目的IP为本地IP的ARP请求。
arp_announce = 2 #表示系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。
Full-NAT模式,即通过同时修改请求报文的源IP地址和目标IP地址进行转发的模式。此类型的模式,默认Kernel不支持。
原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,又内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP
请求使用DNAT,响应使用SNAT
lvs-fullnat(双向转换)
通过请求报文的源地址为DIP,目标为RIP来实现转发:对于响应报文而言,修改源地址为VIP,目标地址为CIP来实现转发:
CIP --> DIP VIP --> RIP
RIP --> VIP DIP–>CIP
FULLNAT模式下,LB会对请求包和响应包都做SNAT+DNAT。
无论是DR还是NAT模式,不可避免的都有一个问题:LVS和RS必须在同一个VLAN下,否则LVS无法作为RS的网关。
LVS-FullNat模式:
1.客户端将访问vip报文发送给LVS服务器;
2.LVS服务器将请求报文的目的地址修改为后端真实服务器(DNAT),源地址改为自己的ip地址(SNAT),发送给后端真实服务器;
3.后端服务器在处理完之后要将响应的报文返回给lvs;
4.LVS将返回的数据包源地址改为自己(SNAT),目的地址改为客户端(DNAT),发送给客户端。
fullnat模式和nat模式相似,但是与nat不同的是nat模式只做了两次地址转换,fullnat模式却做了四次。
LVS FULLNAT模型的特性:
FULLNAT模式也不需要DIP和RIP在同一网段
FULLNAT和NAT相比的话:会保证RS的回包一定可到达LVS
FULLNAT需要更新源IP,所以性能正常比NAT模式下降10%
优点:
解决了NAT对LVS和RS要求在同一个vlan的问题,适用更复杂的部署形式
不要求配置LVS为网关(LVS与RS可以通过三层通讯)
缺点:
RS看不到cip(NAT模式下可以看到)
进出流量还是都走的lvs,容易成为瓶颈(跟NAT一样都有这个问题)
VS/DR的工作流程
VS/DR的工作流程:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
NAT:
SNAT: 修改源地址
DNAT: 修改目标地址
DR:修改目标MAC
TUN:在原请求IP报文之外新加一个IP首部
FULLNAT:修改请求报文的源IP和目标IP
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:双向转换
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
1.轮叫(Round Robin)
2.加权轮叫(Weighted Round Robin)
3.最少链接(Least Connections)
4.加权最少链接(Weighted Least Connections)
5.基于局部性的最少链接(Locality-Based Least Connections)
6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
7.目标地址散列(Destination Hashing)
8.源地址散列(Source Hashing)
9.最短期望延迟(Shortest Expected Delay)
10.无须队列等待(Never Queue)
VS/NAT | VS/TUN | VS/DR | |
---|---|---|---|
服务器操作系统 | 任意 | 支持隧道 | 多数(支持Non-arp) |
服务器网络 | 私有网络 | 局域网/广域网 | 局域网 |
服务器数目(100M网络) | 10~20 | 100 | 大于100 |
服务器网关 | 负载均衡器 | 自己的路由 | 自己的路由 |
效率 | 一般 | 高 | 最高 |
The LVS/NAT working principle and configuration instructions.
The LVS/TUN working principle and configuration instructions.
The LVS/DR working principle and configuration instructions.
Virtual Server via NAT
Virtual Server via IP Tunneling
Virtual Server via Direct Routing