LVS负载均衡(一) LVS详解

1、LVS是什么

       LVS(Linux Virtual Server,Linux虚拟服务器)是一个虚拟的服务器集群,与Nginx工作在网络体系第七层不同,LVS工作在网络体系第四层,采用IP负载均衡技术和基于内容请求分发技术。

2、LVS 集群分为三层结构

2-1、负载调度器(load balancer)

它是整个LVS 集群对外的前端机器,负责将client请求发送到一组服务器[多台LB IP]上执行,而client端认为是返回来一个同一个IP(通常把这个IP称为虚拟IP/VIP)。

2-2、服务器池(server pool)

一组真正执行client请求的服务器,一般是我们的web服务器;除了web,还有FTP,MAIL,DNS。

2-3、共享存储(shared stored)

为所有Real Server提供共享存储空间和一致的数据内容。

下面我们简化结构,忽略共享存储,用Director表示负载调度器,Real Server表示实际后台服务器。

3、LVS的三种工作方式

3-1、NAT:地址转换

客户通过VIP(Virtual IP Address,虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址VIP改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。

当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。

3-2、DR: 直接路由

在VS/DR中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。

当服务器发现报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。

3-3、TUN:隧道

IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。

利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户

3-4、三种方式对比

3-4-1、NAT

集群节点跟director必须在同一个IP网络中;

RIP通常是私有地址,仅用于各集群节点间的通信;

director位于client和real server之间,并负责处理进出的所有通信;

realserver必须将网关指向DIP;

支持端口映射;

realserver可以使用任意OS;

较大规模应该场景中,director易成为系统瓶颈;

3-4-2、DR

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

RIP可以使用公网地址,实现便捷的远程管理和监控;

director仅负责处理入站请求,响应报文则由realserver直接发往客户端;

realserver不能将网关指向DIP;

不支持端口映射;

3-4-3、TUN

集群节点可以跨越Internet;

RIP必须是公网地址;

director仅负责处理入站请求,响应报文则由realserver直接发往客户端;

realserver网关不能指向director;

只有支持隧道功能的OS才能用于realserver;

不支持端口映射;

4、LVS调度策略

4-1、四种静态调度

无状态调度,不管realserver上实际的连接数和系统负载。

4-1-1、RR(Round-Robin Scheduling,轮询调度)

最简轮询,调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器。

4-1-2、WRR(Weighted Round-Robin Scheduling, 加权轮询调度)

加权轮调,它将依据不同RS的权值分配任务。权值较高的RS将优先获得任务,并且分配到的连接数将比权值较低的RS更多。

4-1-3、DH(Destination Hashing Scheduling,目标地址散列调度)

调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。

4-1-1、SH(Source Hashing Scheduling,源地址散列调度)

根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。

4-2、动态调度方法

考虑各realserver上实际的连接数和系统负载。

4-2-1、LC(Least-Connection Scheduling,最小连接调度)

计算:active*256+inactive;

请求会被分配到这台目前连接数最少的Real Server上面。

4-2-2、WLC(Weighted Least-Connection Scheduling,加权最小连接调度)

计算:(active*256+inactive)/weight;

具有较高权值的服务器将承受较大比例的活动连接负载。

4-2-3、SED(Shortest Expected Delay Scheduling,最短预期延时调度)

计算:(active+1)*256/weight;

4-2-4、NQ(Never Queue Scheduling,不排队调度)

4-2-5、LBLC(Locality-Based Least Connections Scheduling,基于局部性的最少链接)

先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于其一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。

4-2-6、LBLCR(Locality-Based Least Connections with Replication Scheduling,带复制的基于局部性最少链接)

先根据请求的目标IP地址找出该目标IP地址对应的服务器组;按"最小连接"原则从该服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载;则按"最小连接"原则从整个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

默认方法:WLC;持久连接可以用SH来实现,不过ipvs实现不基于调度算法的持久连接方法,后面将会较为详细的了解;

5、其他关注点

5-1、ipvs与ipvsadm

5-1-1、ipvs(IP Virtual Server)

ipvs是运行在linux内核空间的提供负载平衡功能的一种技术,2.4.2.3及其后版本内核内置ipvs,代码直接就可以在内核代码中找到;

5-1-2、ipvsadm

ipvsadm是ipvs的用户层命令行管理工具,安装后才能使用其配置ipvs规则,命令如下:

管理集群服务

添加:-A -t|u|f service-address [-s scheduler]

-t: TCP协议的集群

-u: UDP协议的集群

Service-address: IP:PORT

-f: FWM: 防火墙标记

service-address: Mark Number

修改:-E

删除:-D -t|u|f service-address

管理集群服务中的RS

添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]

-t|u|f service-address:事先定义好的某集群服务

-r server-address:某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;

[-g|i|m]: LVS类型

-g: DR

-i: TUN

-m: NAT

[-w weight]: 定义服务器权重

修改:-e

删除:-d -t|u|f service-address -r server-address

查看:

-L|l

-n: 数字格式显示主机地址和端口

--stats:统计数据

--rate: 速率

--timeout: 显示tcp、tcpfin和udp的会话超时时长

-c: 显示当前的ipvs连接状况

删除所有集群服务

-C:清空ipvs规则

保存规则

-S

# ipvsadm -S > /path/to/somefile

载入此前的规则:

-R

ipvsadm -R < /path/form/somefile

5-1-3、两者关系

两者关系相当于iptables和netfilter的关系,工作在LVS的Director,以实现负载平衡功能。

5-2、ipvs与netfilter

5-2-1、netfilter

netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤、NAT等,甚至可以是用户自定义的功能)。

5-2-2、ipvs

ipvs的代码就挂载在/net/netfilter/ipvs中, Ipvs是基于Netfilter框架实现的内核模块。

5-2-3、两者关系

如上图ipvs源码中,ipvs通过注册netfilter钩子和我们用ipvsadm工具创建的Ipvs规则表使得Director可以改变数据包命运的能力,这个能力使得Director可以分发集群服务请求给多个真实服务器(集群节点)。

当数据包命中LOCAL_IN钩子后,运行在内核内的ipvs根据我们用ipvsadm配置的规则,可以判断出数据包是一个请求集群服务的数据包;如果是VIP地址的数据包,ipvs通知内核不应该将该数据包到传递给本地的守护进程,而应该传递给集群节点来实现,这样数据包就会发送到POST_ROUTING钩子,数据包从连接DIP网络的网卡发送出去。

下一篇将会分别配置NAT和DR方式的集群……

【参考资料】

  1. 官方参考资料: http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/
  2. 官方中文参考资料: http://www.linuxvirtualserver.org/zh/index.html
  3. 三种工作方式:《LVS 参考手册 可伸缩网络服务的设计与实现1.0版》
  4. 调度策略:http://www.linuxvirtualserver.org/docs/scheduling.html
  5. Netfilter: http://baike.baidu.com/link?url=3gAwQegkjTiH_EfSgCYBgSrFiAbpdokbpdrVm0jHANt05LLizLwJy1BhR3U0kafjz01R7QPp6VeLutMdNUbpsa

LVS均衡负载(一) LVS详解相关推荐

  1. IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上)...

    IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡(上) 在前两篇文章中,我们已经讲述如何配置与安装ARR,从本篇文章开始,我们将重点的 ...

  2. IIS负载均衡-Application Request Route详解第一篇: ARR介绍

    IIS负载均衡-Application Request Route详解第一篇: ARR介绍   说到负载均衡,相信大家已经不再陌生了,本系列主要介绍在IIS中可以采用的负载均衡的软件:微软的Appli ...

  3. IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR

    失败请求跟踪规则(FailedRequest Tracing Rules)是IIS7中对请求处理进行诊断的强大的工具.我们本篇文章将会带领大家一步步的来配置失败请求跟踪规则,并且告诉大家如何使用这些信 ...

  4. IIS负载均衡-Application Request Route详解第五篇:使用ARR来配置试点项目

    看到本篇的题目,大家可能感到有点奇怪!下面,我们就来看看这到底是什么意思. 大家可能遇到过这样的一种情况:希望根据某些请求用户的特性,将用户的请求导向不同的站点(请大家这里区分"亲缘性&qu ...

  5. IIS负载均衡-Application Request Route详解第四篇:使用ARR实现三层部署架构

    本篇的主要目的是带领大家一起来使用ARR来实现一个三层部署架构.这里的三层部署架构主要是由:服务层,应用程序服务器层已经数据层实现.如下图所示: 每次一提到"层"这个字的时候,似乎 ...

  6. IIS负载均衡-Application Request Route详解第三篇:使用ARR进行Http请求的负载均衡

    在前两篇文章中,我们已经讲述如何配置与安装ARR,从本篇文章开始,我们将重点的来讲述如何在使用ARR进行负载均衡. 本篇文章的目的主要是一步步的带领大家如何配置和使用ARR来进行Http请求的负载均衡 ...

  7. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm

    自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问题是一些比较基本的问题,由于时间的缘故,不会一一的为大家回复,如果有不明白的,希望大家勤自学!本系列虽然不难,但 ...

  8. IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm(转载)

    IIS负载均衡-Application Request Route详解第二篇:创建与配置Server Farm 自从本系列发布之后,收到了很多的朋友的回复!非常感谢,同时很多朋友问到了一些问题,有些问 ...

  9. 负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础

    负载均衡原理与实践详解 第三篇 服务器负载均衡的基本概念-网络基础 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负 ...

  10. 负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解

    负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解 系列文章: 负载均衡详解第一篇:负载均衡的需求 负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础 负载均衡详解第三篇:服务器负载均衡的基 ...

最新文章

  1. CVPR 2020录用率十年最低,商汤官宣62篇入选
  2. python主成分分析实验报告_python进行主成分分析
  3. mysql 5.74安装教程_MySQL数据库作为关系型数据库中的佼佼者,因其体积小,速度快,成本低,不仅受到了市场的极大追捧,也受到了广大程序员的青睐。接下来,就给大家说一下,MySQL的...
  4. python后端教程_Python学习教程(技术干货):关于前后端分离开发入门
  5. 超大图像的二值化方法
  6. r library car_R 语言教程:方差分析与多重比较
  7. 云原生安全构筑下一代企业安全架构
  8. 区块链软件搭建,区块链平台搭建
  9. 转发 :QQ游戏百万人同时在线服务器架构实现
  10. List 常用的 Lambda 操作
  11. android.view.ContextThemeWrapper cannot be cast to android.app.Activity
  12. java操作跨页的word cell_Java 操作Word表格——创建嵌套表格、添加/复制表格行或列、设置表格是否禁止跨页断行...
  13. im2col矩阵卷积原理
  14. Ubuntu 18.04 安装RealSense D435教程
  15. 月下独酌(作者:李白li bai)
  16. 用VISP+Opencv做相机到机械臂的标定
  17. thinkpad卡在logo界面_windows7开机卡在开机Thinkpad LOGO画面如何解决
  18. android安全学习之2—android中.pem和.pk8是什么文件?
  19. Jenkins构建项目时报错“message“:“Error processing tar file(exit status 1): write/xxx/no space left on device
  20. 系统集成项目管理工程师_【精】系统集成项目管理工程师常见问题汇总

热门文章

  1. 使用mybatis-plus时,报错500
  2. html中tabindex属性是啥意思
  3. 反序列化漏洞-JAVA
  4. 1、登录——邮件发送激活链接
  5. 第三方开源项目名称_开源名称中有什么?
  6. 如何计算冲突域和广播域-图解分析
  7. 【matlab】Matlab中产生正态分布随机数的函数normrnd
  8. 6.10 通过屏幕截图功能快速插入网页图片 [原创Excel教程]
  9. L1 操作系统的启动
  10. mysql 集合 思想_面向集合的思维编写SQL(第九篇 --- “我说的是:苹果柿子李子栗子梨的那个橘子啊”)...