LVS(Linux Virtual Server),即 Linux 虚拟服务器,是一个虚拟的服务器集群系统。
一般来说,LVS 集群采用三层结构,其主要组成部分为:
- 负载调度器(load balancer),它是整个集群对外的前端机,负责将客户的请求转发到一组服务器上。
- 服务器池(server pool),是一组真正处理用户请求的服务器,如WEB、MAIL、FTP和DNS等。
- 共享存储(shared storage),它为服务器池提供一个共享的存储区,使得服务器池拥有相同的内容,提供相同的服务。
负载调度器是服务器集群系统的唯一入口,它可以采用 IP负载均衡技术、基于内容请求分发技术或者两者相结合。
1. 三种IP负载均衡技术
(1)Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目的地址,根据预设的调度算法,将请求分发给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给用户,完成整个负载调度过程。
(2)Virtual Server via IP Tunneling(VS/TUN)
采用 VS/NAT 技术时,由于请求和响应报文都必须经过调度器,当服务器结点数目为10~20时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给用户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN 技术后,集群系统的最大吞吐量可以提高10倍。
(3)Virtual Server via Direct Routing(VS/DR)
VS/DR 通过调度器改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户,可以极大地提高整个集群系统的伸缩性。但是要求调度器与真实服务器都有一块网卡连在同一物理网段上。
2. LVS四层负载均衡
四层负载均衡工作在传输层,调度器接受到客户端请求后,通过修改数据包的地址信息,将请求转发到后端服务器,由客户端和后端服务器直接建立TCP连接。负载性能高、支持各种网络协议,但是对网络依赖较大。
3. 负载调度算法
轮询、加权轮询、最小连接、加权最小连接等。
4. Keepalived
- 网络层是以服务器的IP地址是否有效作为服务器工作正常与否的标准。(ICMP数据包,即ping命令)
- 传输层主要以TCP端口的状态来决定服务器工作正常与否。
- 应用层是对指定的URL执行HTTP GET,然后使用MD5算法对HTTP GET结果进行求和。用这个结果与预期值比较,检查应用程序服务器是否正常工作。
5. 高可用架构
高可用web架构:LVS+keepalived+nginx+应用服务器