`
nigelzeng
  • 浏览: 607391 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

【转】负载均衡 LVS 工作原理

阅读更多

 

一.LVS主从工作原理和网站架构

      LVS在基本的生产环境中,都会同时运行在二台硬件相近的服务器上:LVS Router(主 LVS ),一个作为备份LVS(备份 LVS ).
      主 LVS 服务器在网站的前端起二个作用:
            (1. 均衡负载压力到真实服务器(如apache)上.
            (2. 检查后面真实服务器提供的服务是否正常.
     备份LVS 用来监控主LVS和备份主服务器,在当故障出现时主LVS 死机 fail 掉了以后,就会启动自己来接管主 LVS 的工作.
基中有一个叫 Pulse (心跳服务) 运行在主LVS和备份LVS上.在备份 LVS 上,每秒 pulse 发送一个心跳(heartbeat)到主LVS的外网接口检查主LVS的服务是否正常.当然在主LVS上,也有pulse服务,它主要是响应备份LVS的心跳.
      LVS进程调用 ipvsadm工具(RedHat开发)去配置和维护 IPVS 路由表,它会为每一个在真实服务器上的虚拟服务启动一个nanny进程.每一个nanny进程去检查真实服务器上的服务状态,如果有异常.就会将故障情况通知LVS进程.当故障时,LVS进程通知 ipvsadm 在 IPVS 路由表中将此节点删除.当然,它发现故障的机器恢复时也能自动的加入到服务中来.

     如果备份LVS未收到来自于主LVS的响应,它将调用send_arp将虚拟IP地址再分配到备份LVS的公网接口上.并在公网接口和局域网接口上分别发送一个命令去关掉主LVS上的LVS进程.同时启动自己的LVS进程来调度客户端请求.

下面是一个大中型网站 LVS 架构的服务器:

象平时在大中型网站的服务器架构,基本就象上面一样.上面是一个服务器组提供同一种服务,如image的服务.

如上所示,最前面是一组主备LVS服务器,他们由心跳联系在一起 .接下来是一组功能相同的Real server服务器.有可能是Apache,nginx, squid之类的服务器.在接下来是一组应用服务器,应用服务器用的 Redhat Cluster 组成.最后,给所有的网站将数据放到一个网络文件系统NFS AND 分布文件系统GFS上做Shared Storage,用来提供所有的Real Server同时读写.当然,你也可以用SAN的存储服务器.

二. IP 负载均衡技术

在LVS上调度器的实现技术中,由VS/NAT、VS/TUN和VS/DR这三种方法来实现使用负载均衡. IP 负载均衡技术是效率最高的.在已有的 IP 负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如 Cisco 的 LocalDirector、F5 的 Big/IP 和 Alteon的ACEDirector.当然在分析 VS/NAT 的缺点和网络服务的非对称性的基础上,LVS 的作者提出通过 IP 隧道实现虚拟服务器的方法 VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法 VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性.

下面分别来介绍一下这三种方法.

1. 使用VS/NAT方法

客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法(下面会提到)从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address 改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器.同时,调度器在连接 Hash 表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务 器.当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户.
当使用VS/NAT方法时,如果有大量的响应数据经过调度器,调度器将成为整个集群的瓶颈.
这个很象 Nginx 的 7 层调度,所以大约能支持的后端机器只有 10 台的样子.因为这台调度器就成了瓶颈.

 

 2. 使用VS/TUN方法

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


3. 使用VS/DR方法
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过交换机或者高速的HUB相连.VIP地址为调度器和服务器 组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是 不可见的,只是用于处理目标地址为VIP的网络请求.在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文, 而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送.因为数据帧的MAC地址是选出的服务器,所以服务 器肯定可以收到这个数据帧,从中可以获得该IP报文.当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应 报文直接返回给客户.

VS/TUN相比,这种方法没有IP隧道的开销,但是要求负载调度器与实际服务器都有一块网卡连在同一物理网段上,服务器网络设备(或者设备别名)不作ARP响应,或者能将报文重定向(Redirect)到本地的Socket端口上.

三.负载调度算法

针对不同的网络服务需求和服务器配置,IPVS调度器实现了如下八种负载调度算法:

1. 轮调(Round Robin)
   调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载.
2.加权轮叫(Weighted Round Robin)
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求.这样可以保证处理能力强的服务器处理更多的访问流量.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值. 3.最少链接(Least Connections)
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上.如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载.
4.加权最少链接(Weighted Least Connections)
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载.调度器可以自动问询真实服务器的负载情况,并动态地调整其权值.
5.基于局部性的最少链接(Locality-Based Least Connections)
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统.该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器.
6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统.它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射.该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器.同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度. 7.目标地址散列(Destination Hashing)
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空.
8.源地址散列(Source Hashing)
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空.

总结
根据上面的分析,我们知道,在lvs中有VS/NAT、VS/TUN和VS/DR这三种方法来实现使用负载均衡,和8种调度的算法.下面我来针对不同的服务的实现方法如你是使用Web服务一般采用普通IP负载均衡技术,流媒体服务使用IPVS负载调度器一般使用直接路由方法(即VS/DR方法),对Cache服务如CDN之类技术的应用中一般使用IP隧道方法(即VS/TUN方法).

 

本文转自: 扶凯 http://www.php-oa.com/

http://www.php-oa.com/2008/08/28/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1lvs%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86.html

  • 大小: 58.3 KB
  • 大小: 20.6 KB
分享到:
评论

相关推荐

    LVS 负载均衡配置参考

    ### LVS负载均衡配置详解 #### 一、LVS简介 LVS(Linux Virtual Server)是一种先进的集群技术,主要用于构建高性能、高可用性的服务器集群。它通过IP负载均衡技术和基于内容请求分发技术来实现这一目标。具体而言...

    lvs负载均衡源码

    LVS(Linux Virtual Server)是基于Linux操作系统的高性能负载均衡解决方案,由章文嵩博士在1998年创建。它的设计目标是提供一个高可用、高性能的服务器集群系统,使得用户可以透明地访问服务器群集,而无需关心背后...

    lvs四层的负载均衡和七层负载均衡的区别

    ### LVS四层与七层负载均衡的区别 #### 基础概念 负载均衡技术是现代互联网架构中不可或缺的一部分,其主要目的是通过合理地分配网络请求到不同的服务器上来提高系统的可用性和扩展性。根据处理数据包的层次不同,...

    负载均衡的LVS服务器的设计与实现.pdf

    VS/NAT的工作原理是改变IP包的源和目的地址信息,使得请求和响应能够正确地在客户端、负载均衡器和服务器之间流转。 2.2 VS/TUN模式 VS/TUN(Virtual Server via Tunneling)利用隧道技术,负载均衡器创建一个IP...

    LVS+Keepalived实现高可用负载均衡

    ### LVS+Keepalived 实现高可用负载均衡 #### 一、原理 **1、概要介绍** 在现代互联网架构中,为了提高系统的稳定性和可靠性,常常采用高可用(High Availability, HA)架构设计。其中,LVS(Linux Virtual ...

    lvs实现负载均衡

    ### LVS 实现负载均衡详解 #### 一、LVS简介与重要性 LVS (Linux Virtual Server) 是一种在 Linux 平台上实现负载均衡的技术。它可以有效地将大量的网络请求分发到多个后端服务器上处理,从而提高系统的整体响应...

    Linux下的负载均衡集群LVS实现分析与测试.pdf

    ### Linux下的负载均衡集群LVS实现分析与测试 #### LVS结构与工作原理 Linux Virtual Server(LVS)是一种在Linux环境下实现的负载均衡技术,主要用于处理大规模并发访问的需求,通过将多台服务器组成集群来分担...

    英文版LVS负载均衡Tutor

    ### LVS负载均衡基础知识 #### 引言 Linux Virtual Server (LVS) 是一个开源项目,它通过在 Linux 内核中实现第四层交换技术来实现网络服务(如 Web 和邮件服务器)的负载均衡。LVS 的优势在于其能够处理数十万...

    linux负载均衡lvs原理详细讲解什么是lvs负载均衡技术

    均衡负载压力到真实服务器(如apache)上.(2.检查后面真实服务器提供的服务是否正常.备份LVS用来监控主LVS和备份主服务器,在当故障出现时主LVS死机fail掉了以后,就会启动自己来接管主LVS的工作。基中有一个叫Pulse...

    Linux负载均衡--LVS+Keepalived(终极文档).pdf

    Linux 负载均衡 -- LVS+Keepalived 终极指南 Linux 负载均衡是当前网站业务量增长面临的主要挑战之一。如何实现高性能高可用的负载均衡方案,降低成本,提高网站的可靠性和灵活性,是每个网站管理员和架构师所面临...

    负载均衡讲解,讲解负载均衡的基本原理

    相比之下,软件负载均衡更经济且具有良好的扩展性,例如Nginx、HAProxy和LVS。它们可以在各种硬件平台上运行,根据需要轻松扩展。软件负载均衡器分为四层和七层。四层负载均衡主要基于TCP/IP协议栈的第四层,即传输...

    搭建LVS+KEEPALIVED负载均衡.pdf

    1. LVS的工作原理:LVS可以将入站流量分发到多个Real Server,以实现负载均衡。 2. LVS的优点:LVS可以实现高可用性和高性能,且可以灵活地配置Real Server。 五、 KEEPALIVED的工作原理 1. KEEPALIVED的工作原理...

    虚拟机中Lvs的负载均衡实验

    LVS 的工作原理是使用 ipvsadm 工具来管理负载均衡的规则,并将网络服务请求分配到多个 real 服务器上。 二、实验环境 本实验使用三台虚拟机系统,分别安装了 Debian、CentOS 和 RHEL 操作系统。实验的目的是在...

    高并发负载均衡_LVS.rar

    本压缩包"高并发负载均衡_LVS.rar"包含了四个文件,分别关于Keepalived、LVS(Linux Virtual Server)、Nginx这三种关键的负载均衡解决方案。下面我们将详细探讨这些知识点。 1. **Keepalived**: Keepalived是一...

    LVS,piranha,Piranha负载均衡配置与管理

    **LVS(Linux Virtual Server)**是Linux操作系统下的一个高性能负载均衡器,它可以在不改变现有网络架构的情况下,实现对网络服务的负载均衡,提高系统的可用性和可扩展性。LVS通过三种工作模式:NAT(网络地址转换...

    LINUX集群LVS负载均衡配置.pdf

    - **LVS工作原理**:LVS作为一个前端的负载均衡器,通过接收客户端的请求并根据特定的算法将请求分发到后端的真实服务器上。这样,客户端只需要知道LVS的虚拟IP地址,而无需关心实际提供服务的具体服务器。 #### 二...

    Linux负载均衡软件LVS培训.zip

    Linux虚拟服务器(Linux Virtual Server,简称LVS)是一款开源的负载均衡软件,它为网络服务提供了高可用性和高性能的解决方案。LVS项目由章文嵩博士在1998年发起,至今已成为许多大型网站和企业后端架构的重要组成...

Global site tag (gtag.js) - Google Analytics