一、LVS简介

LVS(Linux Virtual Server)即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,目前 LVS 是 Linux 内核标准的一部分。

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

LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

二、LVS详细介绍

1、宗旨

使用集群技术和Linux操作系统实现一个高性能、高可用的服务器。

很好的可伸缩性(Scalability);

很好的可靠性(Reliability);

很好的可管理性(Manageability)。

2、LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

1)ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

2)ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。

3、LVS相关术语

1)DS:(Director Server)指的是前端负载均衡器节点。

2)RS:(Real Server)后端真实的工作服务器。

3) VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址。

4) DIP:(Director Server IP)主要用于和内部主机通讯的IP地址。

5) RIP:(Real Server IP)后端服务器的IP地址。

6) CIP:(Client IP)访问客户端的IP地址。

4、LVS的优点

LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。

1)开源,免费,可把许多低性能的服务器组合在一起形成一个超级服务器。

2)在网上能找到一些相关技术资源。

3)易用,配置非常简单,且有多种负载均衡的方法。

4)稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

5、LVS的缺点

1)最核心的就是没有可靠的支持服务,没有人对其结果负责;

2)功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等;

3)开启隧道方式需重编译内核;

4)配置复杂;

5)主要应用于LINUX,目前没有专门用于WINDOWS的版本,不过可以通过配置,使windows成为LVS集群中的real server。

6、LVS的工作原理

LVS可分为三部分:

1)Load Balancer:是LVS的核心部分。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。

另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。

2)Server Array:该层负责具体业务。可有WEB Server、mail Server、FTP Server、DNS Server等组成。

注意,其实上层的Director Server也可以当Real server用的。

3)Shared Storage:主要是提高上一层数据和为上一层保持数据一致。

7、LVS的十种调度算法

静态调度方法:

1)rr(轮询调度):最简单

按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

2)wrr (加权轮询)

比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 – 100。主要是对rr算法的一种优化和补充。

LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A的2倍。权值越高的服务器,处理的请求越多。

3)sh (源地址散列调度算法)

与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

4)dh (目标地址散列调度算法)

根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

动态调度方法:

1)  lc    (最少链接)

这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1.

2)   wlc  (加权最少链接)

这个算法比 lc 多了一个权重的概念。

3)  sed  (最短预期延时调度)

4)   nq(不排队调度)

3)   lblc  (基于局部性的最少连接调度算法)

这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器.

4)  lblcr  (复杂的基于局部性最少的连接算法)

记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

三、负载均衡机制

LVS工作在网络层,通过控制IP来实现负载均衡。

IPVS是其具体的实现模块。IPVS的主要作用:安装在DS(前端负载均衡器节点)上面,在DS虚拟一个对外访问的IP(VIP)。用户访问VIP,到达DS,DS根据一定的规则选择一个RS(后端真实的工作服务器),处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如果返回给客户端数据等等。IPVS为此有三种机制:

1、VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器

当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。

注:

1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP;

2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈;

3)支持端口映射,可修改请求报文的目标PORT;

4)VS必须是Linux系统,RS可以是任意OS系统。

2、VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器

Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。

注:

1 ) Director和各RS都配置有VIP。

2 ) 确保前端路由器将目标IP为VIP的请求报文发往Director。

在前端网关做静态绑定VIP和Director的MAC地址;

在RS上使用arptables工具;arptables -A IN -d $VIP -j DROP

arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

在RS上修改内核参数以限制arp通告及应答级别;/proc/sys/net/ipv4/conf/all/arp_ignore

/proc/sys/net/ipv4/conf/all/arp_announce

3 )RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director。

4 )RS和Director要在同一个物理网络。

5 )请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client。

6 )不支持端口映射(端口不能修败)。

7 )RS可使用大多数OS系统。

3、VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器

和VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。

转发方式:不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP)。

注:

1 ) DIP, VIP, RIP都应该是公网地址;

2 ) RS的网关一般不能指向DIP;

3 ) 请求报文要经由Director,但响应不经由Director;

4 ) 不支持端口映射;

5 ) RS的OS须支持隧道功能。

扩展:

LVS-FULLNAT:通过同时修改请求报文的源IP地址和目标IP地址进行转发。(此类型kernel默认不支持)

CIP --> DIP

VIP --> RIP

注:

1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP。

2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client。

3) 请求和响应报文都经由Director。

4)支持端口映射。

四、小总结

1、LVS 工作模式总结

2、相似与差别

LVS-NAT与LVS-FULLNAT:请求和响应报文都经由Director。

LVS-NAT:RIP的网关要指向DIP。

LVS-FULLNAT:RIP和DIP未必在同一IP网络,但要能通信。

LVS-DR与LVS-TUN:请求报文要经由Director,但响应报文由RS直接发往Client。

LVS-DR:通过封装新的MAC首部实现,通过MAC网络转发。

LVS-TUN:通过在原IP报文外封装新IP头实现转发,支持远距离通信。

3、三大流向

流入:PREROUTING --> INPUT

流出:OUTPUT --> POSTROUTING

转发:PREROUTING --> FORWARD --> POSTROUTING

linux内核 lvs,Linux中 LVS 的介绍相关推荐

  1. 【Linux 内核】Linux 操作系统结构 ( Linux 内核在操作系统中的层级 | Linux 内核子系统及关系 | 进程调度 | 内存管理 | 虚拟文件系统 | 网络管理 | 进程间通信 )

    文章目录 一.Linux 内核在操作系统中的层级 二.Linux 内核子系统 三.Linux 内核子系统之间的关系 一.Linux 内核在操作系统中的层级 Linux 内核 所在层级 : 整个计算机系 ...

  2. Linux内核源码中使用宏定义的若干技巧

    在C中,宏定义的概念虽然简单,但是真要用好却并不那么容易,下面从Linux源码中抽取一些宏定义的使用方法,希望能从中得到点启发: 1. 类型检查 比如module_init的宏定义: 点击(此处)折叠 ...

  3. CVE-2021-20226:详解 Linux 内核 IO_URING 子系统中的引用计数漏洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士 趋势科技 ZDI 发布文章,详细描述了2020年6月收到的最近引入的 io_uring 子系统的引用计数漏洞情况.该漏洞导致在任意 fil ...

  4. 解析Linux内核源码中数据同步问题丨C++后端开发丨Linux服务器开发丨Linux内核开发丨驱动开发丨嵌入式开发丨内核操作系统

    剖析Linux内核源码数据同步 1.pdflush机制原理 2.超级块同步/inode同步 3.拥塞及强制回写技术 视频讲解如下,点击观看: 解析Linux内核源码中数据同步问题丨C++后端开发丨Li ...

  5. linux问号符号,调试linux内核时gdb中的问号符号4.10

    我想从linux内核中的函数start_kernel()调试linux内核.调试linux内核时gdb中的问号符号4.10 这基本上就是我已经做了 从kernel.org 下载4.10内核源提取源后: ...

  6. linux内核完全注释百度网盘,LINUX内核完全注释中.pdf

    LINUX内核完全注释中 6.8 floppy.c 程序 122 } 123 printk ("\010\010\010\010\010done \n"); 124 ROOT_DE ...

  7. Linux内核基础——Linux内核基础编程

    任务一.模块编程 子任务1.编写最简单的内核模块,并将其加载到内核中 hello.c #include<linux/module.h> #include<linux/kernel.h ...

  8. 深度:一文看懂Linux内核!Linux内核架构和工作原理详解

    简介 作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址.目前支持模块的动态装卸(裁剪).Linux内核就是基于这个策略实现的.Linux进程1.采用层次结构,每个 ...

  9. 【Linux 内核】Linux 内核源码目录说明 ① ( arch 目录 | block 目录 | certs 目录 | crypto 目录 | Documentation 目录 )

    文章目录 一.arch 目录 二.block 目录 三.certs 目录 四.crypto 目录 五.Documentation 目录 在上一篇博客 [Linux 内核]Linux 内核源码结构 ( ...

  10. 【Linux 内核】Linux 内核特性 ( 组织形式 | 进程调度 | 内核线程 | 多平台虚拟内存管理 | 虚拟文件系统 | 内核模块机制 | 定制系统调用 | 网络模块架构 )

    文章目录 一.Linux 内核特性 1.Linux 内核组织形式 2.Linux 进程调度 3.Linux 内核线程 4.Linux 内核多平台虚拟内存管理 5.Linux 虚拟文件系统 6.Linu ...

最新文章

  1. 文件的特殊权限:suid sgid sticky
  2. LDA基本介绍以及LDA源码分析(BLEI)
  3. mysql检查备份数据脚本并在zabbix上告警
  4. C# WPF 之 遍历子控件
  5. in的绑定 mysql_MySQL IN语句的PDO绑定值
  6. 【JZOJ3636】【BOI2012】Mobile(mobile)
  7. 【CentOS7配置】如何设置:启动后自动获取网络连接、配置固定IP
  8. 29/100. Counting Bits
  9. SAP Spartacus OrganizationState
  10. HTTP 协议报文解析
  11. 什么计算机保护,什么是分级保护!!
  12. Dubbo(七)使用SpringBoot搭建dubbo消费者工程
  13. VDI序曲四 个人独享虚拟桌面
  14. np.stack() | 数组堆叠
  15. 积木赛尔号机器人_【点映观影】赛尔号大电影7:疯狂机器城赛尔宇宙探险迎人类首秀...
  16. python实现千图成像
  17. android toast 带图片,Android 带图片的Toast
  18. NameNode中Fslmage镜像和Edits编辑日志详解
  19. 树梅派应用25:宅男必备:配备电子纸屏幕的抽纸盒
  20. STM32 学习笔记 expected a type specifier

热门文章

  1. 移动硬盘打不开,里面的数据如何恢复?
  2. 戴尔服务器启动和raid设置(以dell r420为例)
  3. Ubuntu14.04 Y460闪屏问题解决方案
  4. 数据挖掘实例(基于基站定位数据的商圈分析)
  5. 石头剪刀布python代码_Python之石头剪刀布小游戏(史上最详细步骤)
  6. 在ipad上查看c语言文件夹,ipad文件夹在哪里 文件夹的位置介绍【图文】
  7. 手与大脑的距离决定了现实与理想的相似度
  8. Eclipse 如何调整java和xml文件字体大小
  9. 探寻C++读取文件最快的方式
  10. JavaScript中 bind函数的实现