LVS基本原理
LVS基本原理
简介
负载调度器、真实服务器群节点一起被称为LVS。LVS负载调度器(有时也称为负载平衡器),接收所服务的所有接入服务集群的请求,并决定集群中的哪个节点应该回复其请求。
1)负载调度器(Director):作为整个集群的前端,主要将用户请求分发至真实服务器中进行处理。
2)真实服务器池:由多个功能相同的真实服务器组成,为用户提供真正的网络服务,如Web服务、邮件服务等。且虚拟服务器集群作为一个可伸缩的集群,可自由添加或删除真实服务器而并不影响整个集群的正常工作。
3)共享存储:作用就是让每一个用户访问的资源都是一样的。服务器支持写操作,才建议使用。
一、LVS集群架构
用户(CIP,源IP)通过层层路由的Internet网络与负载均衡器(VIP,服务客户端的IP)联系,负载均衡器通过(DIP,与后端通信的IP)经过交换机(局域网)或路由器(Internet)连接。
在数据的传递过程中,发向真实服务器的入站数据先到达VIP,经过负载均衡器及到达DIP,最后到达真实服务器的RIP。
二、LVS在内核中的过程
1、当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
2、PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
3、IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
4、POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器
三、lvs的组成
lvs有两段代码组成,ipvsadm和ipvs
ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)。
四、lvs集群的类型
在LVS集群中,集群作为一个整体,通常使用负载均衡器(Director)作为 与外部通讯的中介,因此把如何将数据从外部请求经由负载均衡器转发至内部真实服务器的方式作为对LVS集群分类的依据。目前LVS数据转发主要有三种方式:网络地址转换(LVS-NAT),直接路由(LVS-DR)和IP隧道(LVS-TUN)。即使在一个负载均衡器上可以实现多种转发方法,一般在实际的使用中我们只选择其中一种转发方式。
在实除的集群部署中,我们发现与LVS配合使用的最佳的转发方法是LVS-DR,而其中最容易构建的方式是LVS-NAT。然而一般情况下,在使用LVS集群处理关键的数据转发时,我们不会用到LVS-TUN,因为LVS-TUN的转发方法允许真实服务器和负载均衡器在不同的物理网段中,这使得只要断开了负载均衡器和真实服务器之间的连接,客户端计算机发出的请求兢会丢失,从而增加整个集群发生崩溃的可能性。
1)直接路由(LVS-DR)
①、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
②、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
③、IPVS比对数据包请求的服务是否为集群服务,若是则将请求报文中的源MAC地址[CIP]修改为DIP的MAC地址,将目标MAC地址[VIP]修改RIP的MAC地址,然后将数据包发至POSTROUTING链[LVS]。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
④、由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址[ARP广播],那么此时数据包将会发至Real Server。
⑤、RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过自己的lo接口传送给eth0网卡然后向外发出[ARP广播]。
此时的源IP地址为VIP,目标IP为CIP.
注意:如果没有给RS设置外网IP,RS将ARP广播查找CIP,内网没有就提交给网关,网关直接外网发送出去,会有可能提高网关压力
⑥、响应报文最终送达至客户端
特点:多了一个mac地址,作用是让rs可以找到客户端,直接发送响应报文,并且整个过程的客户端ip(cip)和负载均衡器的ip都没有改变,只是mac地址变了,目的是让客户知道,你发送请求的报文,和响应你报文的是一个人。
2)网络地址转换(LVS-NAT)
①、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
②、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
③、IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP ④、POSTROUTING链通过选路,将数据包发送给Real Server
⑤、Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
⑥、Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP
3)IP隧道(LVS-TUN)
①、当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
②、PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
③、IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP ④、POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
⑤、RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
⑥、响应报文最终送达至客户端
三种类型比较
五、LVS的调度方法
在讨论了将数据包转发给集群内部的节点的王种方式后,来看一下如何在集群节点么间分配工作负荷。当有用户访问负载均衡器上的VIP请求集群服务时,负载均衡器需要从真实服务器池中选择一台真实服务器为其提供服务。负载均衡器可用于作出该决定的调度方法分成两个基本的类别;静态调度和动态调度。
静态:仅根据调度算法本身,不考虑背后服务器的负载
(1)rr:round robin,轮流,轮询
调度器通过“轮询”的调度算法,按照顺序将请求分配到后端的真实服务器上,无论后端服务器的负载状态如何,都会平均“轮询”调度。
(2)WRR:weightd round robin,带权重的轮序
指的是能者多劳,服务器性能强的,就会分配的比较多。所以根据后端真实服务器的性能来进行调度,根据后端真实服务器负载情况,修改权重值来实现动态的调度
(3)sh:source hashing 源地址hash
源地址与挑选地址绑定,将来自于同一个源IP的请求将始终被定向至同一个RS,这个目的是为了session持久功能,仅实现session的绑定.
(4)dh:destination hashing,目标地址hash,主要用于实现当你的内部主机上有多个防火墙出口时有用。 (仅作了解)
动态:根据算法及各RS当前的负载状况进行调度
(1)lc:least connection,最少连接,通过监控后端RS的连接数,根据TCP协议中的某些计数器来判断。将请求调度到已建立的连接数最少后端的真实服务器上。
计算方法:Overhead=Active*256+Inactive,Overhead越小,表示负载越低
(2)wlc:weight lc,加权的lc
计算方法:Overhead=(Active*256+Inactive)/weight
(3)sed:shortest expertion delay最短期望延迟
Overhead = (ACTIVE+1)*256/加权,数目最小的,接受下次请求
(4)nq:Never Queue,永不排队
无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。
(5)lblc:Locality-Based Least connection基于本地的最小连接
该算法根据请求的目标IP地址找出该目标IP地址最近使用的Real Server,若该服务器是可用的且没有超载,就会使用“最少链接”来挑选一台可用的服务器,将请求发送到该服务器
(6)lblcr:Replicated lblc带复制功能的lblc,是dh算法的一种改进
该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
转载:linux运维部落
LVS基本原理的更多相关文章
- LVS负载均衡原理
一.LVS基本原理概述 LB集群的实现,LB即负载均衡集群 硬件:F5 BIG-IP,Citrix NetScaler,A10,Array,Redware 软件:Lvs,nginx,haproxy,a ...
- LVS原理详解以及部署
linux virtual server简称LVS,Internet的快速增长使多媒体网络服务器面对的访问数量快速增加,服务器需要具备提供大量并发访问服务的能力,因此对于大负载的服务器来讲, CPU. ...
- LVS负载均衡NAT模式原理介绍以及配置实战
LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...
- LVS负载均衡之DR模式原理介绍
LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...
- 一次 Keepalived 高可用的事故,让我重学了一遍它!
原文首发: 你好,我是悟空. 前言 上次我们遇到了一个 MySQL 故障的事故,这次我又遇到了另外一个奇葩的问题: Keepalived 高可用组件的虚拟 IP 持续漂移,导致 MySQL 主从不断切 ...
- 负载均衡基本原理与lvs
前言: 之前在山西的项目上使用的是lvs下的NAT模式,但另外两个模式并没有涉及,今天系统的整理下关于负载均衡的相关理论与lvs各模式的相关优点与不足,知其然与所以然,而后能针对性的应用: 基本介绍 ...
- LVS负载均衡基本原理
负载均衡基本原理与lvs 基本介绍 1.1 负载均衡的由来 在业务初期,我们一般会先使用单台服务器对外提供服务.随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单 ...
- CDN的基本原理和基础架构
CDN基本原理 最简单的CDN网络由一个DNS服务器和几台缓存服务器组成: ①当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析权交给CNAME指向的CDN专用DN ...
- 搞懂分布式技术10:LVS实现负载均衡的原理与实践
搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...
随机推荐
- 论文列表——text classification
https://blog.csdn.net/BitCs_zt/article/details/82938086 列出自己阅读的text classification论文的列表,以后有时间再整理相应的笔 ...
- Uniform and Interpolator Packing的作用
All of the packing that is done is completely transparent to the user of the OpenGL ES Shading Langu ...
- windows vs2017环境下编译webkit 2
WebKit在Windows上 内容 安装开发工具 设置Git存储库 设置支持工具 构建WebKit 安装Cygwin(可选) 得到一个崩溃日志 本指南提供了用于构建WebKit的指令在Windows ...
- GPUImage API文档之GLProgram类
GLProgram是GPUImage中代表openGL ES 中的program,具有glprogram功能. 属性 @property(readwrite, nonatomic) BOOL init ...
- ASP输出JSON数据及客户端jQuery处理方法
首先ASP处理JSON需要json官方提供的JSON For ASP 封装类文件,下载地址:http://code.google.com/p/aspjson/downloads/list 下载最新的J ...
- 一起talk C栗子吧(第一百三十三回:C语言实例--创建进程时的内存细节)
各位看官们.大家好,上一回中咱们说的是从内存角度看进程和线程的样例.这一回咱们说的样例是:创建进程时的内存细节.闲话休提,言归正转.让我们一起talk C栗子吧! 看官们.我们都知道使用fork函数能 ...
- 编码GBK的不可映射字符
1.错误描写叙述 [ERROR] /E:/Eclipse/workspace/huxs/src/test/java/com/you/huxs/utils/SpringTestBase.java:[14 ...
- Windows Service 之 Bug 记录
1.未能将“obj\x86\Debug\**.exe”复制到“bin\Debug\**.exe”.超出了重试计数 10.失败. 解决方案:关闭 VS 程序,到上述下,把 **.exe 删掉,然后重新打 ...
- 使用Spring框架入门一:基于XML配置的IOC/DI的使用
一.Spring框架 1.方法一:逐项导入基础依赖包: spring-core.spring-beans.spring-context.spring-expression 2.方法二:最简洁的导入,直 ...
- POSTGRESQL 支持正则表达式
昨天遇到了一个奇葩的问题,需要在WHERE条件里面添加正则表达式,抱着试试看的态度,查看了一下postgresql,发现确实可以支持正则,例如: select * from user where em ...