LVS原理解析

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:
  1. LVS简介

LVS是Linux Virtual Server的简写,即Linux虚拟服务器,是一个虚拟的服务器集群系统。该项目由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

       使用LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

       负载均衡技术有很多实现方案,如基于DNS域名轮流解析的方法、基于客户端调度访问的方法、基于应用层系统负载的调度方法,还有基于IP地址的调度方法,在这些负载调度算法中,执行效率最高的就是IP负载均衡技术。

       LVS的IP负载均衡技术是通过ipvs内核模块来实现的,ipvs是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问集群服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是ipvs实现的重点技术,ipvs实现负载均衡机制有四种,分别是NAT、TUN和DR以及后来经淘宝开发的FullNat。


  1. LVS的工作机制

   lvs分为两个部件:ipvs和ipvsadm

ipvs:工作于内核空间,主要用于使用户定义的策略生效

ipvsadm:工作于用户空间,管理集群服务的命令行

wKiom1nMU47A1Ob-AADfUCedsu8567.png-wh_50

如上图所示,ipvs工作于内核空间的INPUT链上,当收到用户的请求为某集群服务时,通过PREROUTING链,经检查本机路由表,送往INPUT链;在进入netfilter的INPUT链时,ipvs强行将请求报文通过ipvsadm定义的集群服务策略的路径改为FORWORD链,将报文转发至后端真实提供服务的主机。


  1. LVS的三种工作类型

LVS有三种工作类型:

NAT:地址转换

DR:直接路由

TUN:隧道

各类术语介绍:CIP为客户端IP,VIP为虚拟ip,DIP为Director的ip,RIP为后端服务器的ip


  1. LVS的NAT模型

wKiom1nMU8iD2eaSAAFs8CCQjaw396.png-wh_50

此模型中,DR需要配置两个网卡分别为vip(公网地址:114.100.80.10)和Dip(私网地址:101.0.0.10),VIP只需要配置到DR上,而DIP需设置为后端服务器的网关地址。

它的工作机制:

①用户发出访问请求,此时源地址:CIP(200.10.10.1),目标地址为VIP(114.100.80.10);

②当DR收到用户的请求,并发现该请求为集群服务请求,则运用LVS调度算法选择后端一台服务器进行响应,并将请求报文目标地址(vip:114.100.80.10)转换成经调度算法计算得出的后端主机IP(RIP:10.0.0.1)地址。此时源地址为CIP(200.10.10.1),目标地址转换为RIP(10.0.0.1);

③后端主机(RIP:10.0.0.1)收到请求后,对该请求进行响应,并发送报文至DR,此时源地址为RIP(10.0.0.1),目标地址为CIP(200.10.10.1);

④由于响应的目标地址为CIP(200.10.10.1),后端服务器无法直接响应client,需要DR将源地址(RIP:10.0.0.1)转换成VIP(114.100.80.10)的地址进行发送响应报文,转换后源地址为VIP(114.100.80.10),目标地址为CIP(200.10.10.1);

NAT的特性:

  1> RS应该使用私有地址;

  2> RS的网关的必须指向DIP;

  3> RIP和DIP必须在同一网段内;

  4> 请求和响应的报文都得经过Director;在高负载场景中,Director很可能成为系统性能瓶颈;

  5> 支持端口映射;

  6> RS可以使用任意支持集群服务的OS;


  1. LVS的DR模型

wKioL1nMU-bysB-cAADcs2cZqL8880.png-wh_50

该类型中,DR上依旧配置有DIP和VIP,VIP配置在网卡别名上。每个RS都有自己的RIP以及在回环别名网卡中配置VIP,但是RS的vip隐藏起来,并不接收任何请求,只有在响应客户端请求时作为源地址使用。

   1)client(200.10.10.1)向目标VIP(114.100.80.10)发出请求,通过ARP协议进行广播,找到DR,Director接收。此时源地址为CIP(200.10.10.1),目标地址为VIP(114.100.80.10);

    2)DR接受请求后,发现该请求为集群服务,LVS根据负载均衡算法选择一台active的RS,并通过ARP协议进行广播获取RS的MAC(00:0c:29:d2),而后将原来的MAC首部拆除重新封装,将选中的RS的网卡的mac地址作为目标mac地址。此时源地址为CIP,目标地址VIP,但VIP的MAC地址已经更改为RS的MAC地址。

    3)RS在局域网中收到这个帧,拆开后发现目标IP(VIP)与本地匹配,于是处理这个报文.随后重新封装报文,发送给客户端.此时源地址为RS中的VIP,目标地址为CIP。

当我们分析上面两个网络模型的数据报时会发现一些问题:

        1)由于vip需要在每台主机中配置,如何保证ARP请求报文不会被交换机或其它网络设备知道?

        2)如何保证ARP通告报文不被交换机或其它网络设备知道?

        3)由于RS只有一个网络接口,而linux内核默认情况下包封装时是从哪个网口出去那个网口就是源地址,如何确保RS转发出来的报文源IP是VIP,而不是RIP?

        4)因为DR与RS都配置有相同的VIP,如何避免各主机VIP广播,造成无法通信?

    解决办法:

        1)Linux内核有两个关于ARP对待请回报文与通告报文的参数(arp_announce/arp_ignore),可以设定相应的级别来规避上述问题中的1、2两点;

        2)对于问题3,我们可以在数据报封装后指定路由经lo别名上的接口发送出去然后再通过eth0网卡转发出去;

        3)对于问题4,我们只需要设定vip的广播地址为它自己即可;

DR的特性:

  1> 集群节点跟Director必须在同一个物理网络中;

  2> RIP可以为公网地址,实现远程管理;

  3> DR只负责入站请求,响应报文由RS直接发送给客户端;

  4> RS不能将网关指向DIP;

  5> 不支持端口映射;

  6> RS可以使用任意支持集群服务的OS;


  1. LVS-TUN

在数据包必须传递到另一个网络或因特网上时,可以使用ip隧道,ip隧道能够将数据包从一个子网或虚拟局域网(VLAN)转发到另一个子网或虚拟局域网(VLAN),建立ip隧道是Linux内核功能的一部分,LVS-TUN转发方法允许你将集群节点放在与Director不同的网络上。

wKioL1nMVA7zHTC2AAErFjBwmlk329.png-wh_50

    请留意DR将数据包转发给RS时的IP数据报文;由于DR,RS都不在同一局域网内,而DR要将client请求报文转发给RS时,DR是直接在数据包中直接添加IP首部(源IP:DR和目标IP:RS),这样就是隧道技术了。

    同样,该模型下RS都将配置VIP地址,且不能被外界所获知VIP存在于RS上;


参考:http://junwang.blog.51cto.com/5050337/1439428



本文转自 IT_外卖小哥  51CTO博客,原文链接:http://blog.51cto.com/jinlong/1969320
相关文章
|
21天前
|
负载均衡 网络协议 关系型数据库
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
一口把LVS、Nginx及HAProxy工作原理讲清楚了。(附图)
|
10天前
|
vr&ar
简单易懂的 全景图高清下载方法以及原理简要解析(支持下载建E、720yun、酷雷曼、景站、酷家乐、百度街景原图)
这篇文章介绍了一种简单易懂的全景图高清下载方法,使用在线网站全景管家,支持下载包括建E、720yun、酷雷曼等多个平台的全景图原图,并简要解析了全景图的原理和制作方法。
简单易懂的 全景图高清下载方法以及原理简要解析(支持下载建E、720yun、酷雷曼、景站、酷家乐、百度街景原图)
|
4天前
|
域名解析 网络协议
DNS服务工作原理
文章详细介绍了DNS服务的工作原理,包括FQDN的概念、名称解析过程、DNS域名分级策略、根服务器的作用、DNS解析流程中的递归查询和迭代查询,以及为何有时基于IP能访问而基于域名不能访问的原因。
13 2
|
1月前
|
Java
Future原理解析
介绍了Java多线程中Future类的原理
Future原理解析
|
12天前
|
JavaScript 前端开发 安全
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
JS 混淆解析:JS 压缩混淆原理、OB 混淆特性、OB 混淆JS、混淆突破实战
24 2
|
12天前
|
缓存 前端开发 JavaScript
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
Webpack 模块解析:打包原理、构造形式、扣代码补参数和全局导出
19 1
|
15天前
|
设计模式 JavaScript 前端开发
Vue响应式原理全解析
Vue的响应式系统是其核心特性之一,它使得Vue能够以高效的方式响应数据的变化。通过对对象属性的getter和setter进行劫持,Vue实现了对数据变化的侦测和依赖收集,当数据变化时能够自动派发更新。Vue3中,响应式系统得到了进一步的加强和优化,使用Proxy替代了 `Object.defineProperty`,带来了更好的性能和更强大的拦截能力。理解Vue的响应式原理,对于深入理解Vue的工作机制和进行高效的Vue开发都具有重要意义。
32 1
|
18天前
|
缓存 监控 网络协议
DNS缓存中毒原理
【8月更文挑战第17天】
50 1
|
22天前
|
域名解析 缓存 网络协议
DNS解析过程原理!
DNS解析过程原理!
|
7天前
|
前端开发 Java UED
瞬间变身高手!JSF 与 Ajax 强强联手,打造极致用户体验的富客户端应用,让你的应用焕然一新!
【8月更文挑战第31天】JavaServer Faces (JSF) 是 Java EE 标准的一部分,常用于构建企业级 Web 应用。传统 JSF 应用采用全页面刷新方式,可能影响用户体验。通过集成 Ajax 技术,可以显著提升应用的响应速度和交互性。本文详细介绍如何在 JSF 应用中使用 Ajax 构建富客户端应用,并通过具体示例展示 Ajax 在 JSF 中的应用。首先,确保安装 JDK 和支持 Java EE 的应用服务器(如 Apache Tomcat 或 WildFly)。
17 0

推荐镜像

更多
下一篇
DDNS