伪程序员互联网架构路途IT课程分享

漫谈 LVS (Linux虚拟服务器)

2016-10-24  本文已影响664人  蓝桥云课

说明:文章内容全部摘选自由用户“Richardwei” 发布在实验楼上的课程——【LVS 集群负载均衡实战】,未经允许,禁止转载;

想要学习该教程的可以点击【LVS 集群负载均衡实战】查看更多LVS的介绍以及如何在实际开发中应用,而且最后会用 LVS 与 keepalived 搭建一个高可用的负载均衡服务器群。

前言:LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

文章从以下六个方面来简单介绍LVS:

一、负载均衡的方式

我们知道服务器集群的重要性以及必要性,而实现服务器集群主要就是为了负载均衡(Load Balance),负载均衡就是有两台或者以上的服务器或者站点为我们提供服务,我们将来自客户端的请求靠某种算法尽量平均分摊到这些集群中,从而避免一台服务器因为负载太高而出现故障。

简而言之便是将所有的负载均分到多台服务器中,即使其中某个出现故障,用户也能正常访问,得到服务。

而从早期到现在出现的负载均衡方式有这样的两种:

其中硬件负载均衡解决方案是直接在服务器和外部网络间安装负载均衡设备,由专门的设备完成专门的任务,独立于操作系统,整体性能得到大量提高,加上多样化的负载均衡策略,智能化的流量管理,但是相对来说成本较高。

而常用的负载均衡器有这样一些:

F5-Big-IPF5-Big-IP

受到了用户的广泛认可,基于简单的Web管理界面,实现4-7层负载均衡、通用持续性、响应错误处理、SSL加速、智能HTTP压缩、TCP优化、第7层速率整形、内容缓冲、应用攻击过滤、拒绝服务(DoS)攻击和SYN Flood保护等等强大的功能

而更加广泛的则是使用软件的方式来实现负载均衡,实现效果不错,并且不需要成本是很多企业选择的方式。其中常用的方式有:

其中 LVS 主要工作与网络模型中的第四层,而 Nginx 主要工作于第七层,而 HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机。

其中 LVS 抗负载能力强只是工作在网络4层之上仅作分发之用,没有流量的产生,并且工作稳定,自身有完整的双机热备方案,如LVS+Keepalived和LVS+Heartbeat,在项目实施中用得最多的还是LVS/DR+Keepalived。

二、LVS 的集群特点

LVS 集群有这样的一些特点:

1、在功能上:

2、在适用性上:

3、在性能上:

LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。

三、LVS 的工作框架

Linux Virtual Server 项目的目标:使用集群技术和 Linux 操作系统实现一个高性能、高可用的服务器,它具有很好的可伸缩性(Scalability)、可靠性(Reliability)和可管理性(Manageability)。

LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架:

LVS_frameworkLVS_framework

在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件:

四、LVS 的组成部分

LVS集群采用三层结构,三层主要组成部分为:

LVS_structLVS_struct

五、以软件实现的负载均衡的方式:

有两种方式:

基于应用层负载均衡:多台服务器通过高速的互联网络连接成一个集群系统,在前端有一个基于应用层的负载调度器。当用户访问请求到达调度器时,请求会提交给作负载均衡调度的应用程序,分析请求,根据各个服务器的负载情况,选出一台服务器,重写请求并向选出的服务器访问,取得结果后,再返回给用户。

典型的代表有 Nginx 以及 Apache 的 Rewrite 模块。

应用层的负载均衡实现这样强大的功能也会付出一定的代价:

基于 IP 层负载均衡:用户通过虚拟 IP 地址(Virtual IP Address)访问服务时,访问请求的报文会到达负载调度器,由它进行负载均衡调度,从一组真实服务器选出一个,将报文处理并转发给选定服务器的地址。实服务器的回应报文经过负载调度器时,将报文的源地址和源端口改为 Virtual IP Address 和相应的端口,再把报文发给用户。

而 IP 的负载技术有以下三种模式:

并且在调度器上配置了 8 种调度算法:

六、LVS 所提供的 IP 负载均衡的三种技术

1、VS/NAT 实现虚拟服务器

由于 IPv4 中 IP 地址空间的日益紧张和安全方面的原因,很多网络使用保留 IP 地址(10.0.0.0/255.0.0.0172.16.0.0/255.128.0.0192.168.0.0/255.255.0.0)。这些地址不在 Internet 上使用,而是专门为内部网络预留的。

当内部网络中的主机要访问 Internet 或被 Internet 访问时,就需要采用网络地址转换(Network Address Translation, 以下简称NAT),将内部地址转化为 Internet 上可用的外部地址。

NAT 的工作原理是报文头(目标地址、源地址和端口等)被正确改写后,客户相信 它们连接一个 IP 地址,而不同 IP 地址的服务器组也认为它们是与客户直接相连的。由此,可以用 NAT 方法将不同 IP 地址的并行网络服务变成在一个IP地址上的一个虚拟服务。

VS/NAT(Virtual Server via Network Address Translation)实现的虚拟服务器是这样的一个结构,主要经过这样的一些步骤:

LVS-NATLVS-NAT

这样,客户所看到的只是在 Virtual IP Address 上提供的服务,而服务器集群的结构对用户是透明的。

下面,举个例子来进一步说明VS/NAT,如图所示:

NAT-egNAT-eg

VS/NAT 的配置如下表所示,所有到IP地址为205.100.106.2和端口为80的流量都被负载均衡地调度的真实服务器172.16.1.3:80和 172.16.1.4:8080上。目标地址为205.100.106.2:21的报文被转移到172.16.1.3:21上。而到其他端口的报文将被拒绝。

Protocol Virtual IP Address Port Real IP Address Port
TCP 205.100.106.2 80 172.16.1.3 80
172.16.1.4 8080
TCP 205.100.106.2 21 172.16.1.3 21

当客户端访问Web服务的时候,报文中可能有以下的源地址和目标地址:

SOURCE DEST
203.100.106.1:3456 205.100.106.2:80

报文到达调度器之后,调度器从调度列表中选出一台服务器,例如是172.16.1.4:8080。该报文会被改写为如下地址,并将它发送给选出的服务器。

SOURCE DEST
203.100.106.1:3456 172.16.1.4:8080

Real Server 收到修改后的报文之后,做出响应,然后将响应报文返回到调度器,报文如下:

SOURCE DEST
172.16.1.4:8080 203.100.106.1:3456

响应报文的源地址会被 Load Balacer 改写为虚拟服务的地址,再将报文发送给客户:

SOURCE DEST
205.100.106.2:80 203.100.106.1:3456

这样,客户认为是从202.103.106.5:80服务得到正确的响应,而不会知道该请求是 Real Server1 还是 Real Server2 处理的。

这便是 VS/NAT 的处理数据包的整个过程,它有这样的一些特点:

VS/NAT 的优势在于可以做到端口映射,但是 Load Balancer 将可能成为集群的瓶颈。因为所有的出入报文都需要 Load Balancer 处理,请求报文较小不是问题,但是响应报文往往较大,都需要 NAT 转换的话,大流量的时候,Load Balancer 将会处理不过来。一般使用 VS/NAT 的话,处理 Real Server 数量达到 10~20 台左右将是极限,并且效率往往不高。

2、VS/DR 实现虚拟服务器

在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数 Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。

既然同时处理进出报文会大大的影响效率,增加机器的负载,那么若是仅仅处理进来的报文,即在负载调度器中只负责调度请求,而出去的报文由 Real Server 直接发给客户端这样岂不是高效许多。

VS/DR(Virtual Server via Direct Routing)利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群 系统的吞吐量。

VS/DR 实现的虚拟服务器是这样的一个结构,主要经过这样的一些步骤:

DR-sturctDR-sturct change-MACchange-MAC

在VS/DR中,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。

这便是 VS/DR 的处理数据包的整个过程,它有这样的一些特点:

3、VS/TUN 实现虚拟服务器

VS/DR 限制 Real Server 与 Load Balancer 必须在同一个物理网络中,那若是分散在各地岂不是无法使用?所以有了 VS/TUN(Virtual Server via IP Tunneling)的诞生。

IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择 一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。 VS/TUN的体系结构如图所示,各个服务器将VIP地址配置在自己的IP隧道设备上。

Tunnel-sturctTunnel-sturct

它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个 IP 报文中,再将封装后的 IP 报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为 VI P的报文,服务器发现VIP地址被配置在本地的 IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

这便是 VS/TUN 的处理数据包的整个过程,它有这样的一些特点:

这便是 LVS 所提供的 IP 负载均衡的三种技术,我们可以根据自己的情况做出不同的选择。

以上内容全部摘选自实验楼课程——【LVS 集群负载均衡实战】,可以点击查看更多LVS的介绍以及如何在实际开发中应用,而且最后会用 LVS 与 keepalived 搭建一个高可用的负载均衡服务器群。

上一篇 下一篇

猜你喜欢

热点阅读