LVS (Linux虚拟服务器)模型及算法
LVS(Linux Virtual Server)Linux虚拟服务器
LVS集群采用IP负载均衡技术和基于内容请求分发技术。
用户请求发给负载均衡调度器,由负载均衡调度器根据设定的调度算法将请求发给真实服务器。对用户而言,集群是透明的。
LVS集群采用三层结构,其主要组成部分为:
1、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
2、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
3、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
模型
1. Virtual Server via Network Address Translation(VS/NAT)
将用户请求报文的目的地址改写为由调度器根据调度算法计算得出的服务器ip。服务器响应报文同理在调度器将网络地址转换。缺点是所有报文都需要经过调度器,对调度器的压力较大。
2. Virtual Server via IP Tunneling(VS/TUN)
将用户请求报文进行封装并添加新的ip头,目的地址为由调度器根据调度算法计算得出的服务器ip。服务器响应直接返回给客户端,无需经过调度器。解决了NAT对调度器的压力。
3. Virtual Server via Direct Routing(VS/DR)
将用户请求的mac地址改写为真实服务器mac地址,直接通过mac寻址将请求转发到真实服务器。服务器将响应直接发给客户端。这种模型需要调度器和服务器在同一局域网,且服务器需要配置lo ip为vip,并且设置non-arp模式。前者为了服务器能够收到处理这个请求,后者是为了避免arp请求mac出错。这个模式优于上面两种,个人认为DR模式只对mac进行处理,上面均需要对网络层数据进行一定操作,开销上mac应该较少。
4. fullnat
与nat对比,fullnat 对目的ip、源ip都进行了地址转换(dnat,snat)。缺点是改变了源ip,获取不到客户端的真实信息。
调度算法
1 轮叫(Round Robin)简称RR
均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
2 加权轮叫(Weighted Round Robin) 简称WRR
处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
3 最少链接(Least Connections)简称LC
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。
4 加权最少链接(Weighted Least Connections)简称WLC
具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。最少链接的扩展,加上权值的最少链接。
5 基于局部性的最少链接(Locality-Based Least Connections)简称LBLC
主要用于Cache集群系统。该算法找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务器,将请求发送到该服务器。
6 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)简称LBLCR
它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按"最小连接"原则从服务器组中选出一台服务器。
7 目标地址散列调度(Destination Hashing)简称DH
一种静态映射算法,通过一个散列(Hash)函数将一个目标IP地址映射到一台服务器。
8 源地址散列调度(Source Hashing)简称SH
算法正好与目标地址散列调度算法相反,它根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。
9 最短的期望的延迟(shortest expected delay scheduling)简称sed
基于wlc算法
10 最少队列调度(never queue scheduling)简称nq
无需列队,如果有台realserver的连接数=0 就直接分配,不需要进行sed运算。
小结
问题
- 需要多次连接,缓存,数据保存在不同服务器上。
- TUN模式需要设置lo IP?怎么实现拆包后被自己处理而不是丢弃。
NAT 调度器如何知道服务器返回报文要发给哪个具体客户端。当请求数大于服务器数,如何判断。 (nat网络地址转换只将目标IP和端口修改为真实服务器IP端口,对源没有修改。)
- nat模型,是否可以直接在真实服务器中将响应报文修改为VIP?(直接使用隧道模型即可。若在服务器修改,增加服务器开销,只需使用隧道模型即可)
- 如何保证真实服务器可用
- 如何确定真实服务器的负载
- DR模式跨地区如何扩展(DNS + DR)
- ds对应多个网段
RS健康检测
keepalived
其他
QPS比Nginx提升60%,阿里Tengine负载均衡算法揭秘
参考链接
LB 简单比较 – F5、NetScaler、LVS、Nginx、Haproxy
https://www.cnblogs.com/gaoxu387/p/7941381.html
https://blog.csdn.net/libaineu2004/article/details/79062529
https://blog.csdn.net/sr_1114/article/details/80256626
https://blog.csdn.net/weixin_40470303/article/details/80541639
https://www.cnblogs.com/pigdragon/p/6564442.html
https://blog.csdn.net/weixin_33704234/article/details/86332145
https://www.xuebuyuan.com/3214658.html
https://www.cnblogs.com/Csir/p/6754077.html
https://blog.csdn.net/qq_41772936/article/details/80146464
https://www.cnblogs.com/yaboya/p/9109745.html
PPT
LVS (Linux虚拟服务器)模型及算法的更多相关文章
- LVS (Linux虚拟服务器)-不同的负载均衡方法
随着Internet用户的增长,基于Web的公司处理的通信量急剧增加.有各种解决方案来应对这种不断增长的流量. 一种解决方案是垂直扩展服务器(即:简单地向服务器添加更多的CPU和内存资源.)当然在一定 ...
- Linux虚拟服务器--LVS
LVS 百科名片 LVS是一个开源的软件,由毕业于国防科技大学的章文嵩博士于1998年5月创立,可以实现LINUX平台下的简单负载均衡.LVS是Linux Virtual Server的缩写,意思是L ...
- Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw
负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...
- 大数据 - hadoop三台linux虚拟服务器 - 初始化部署
搭建hadoop环境 1.解压Hadoop的安装包,解压到modules文件夹中.(安装包下载地址:http://archive.apache.org/dist/hadoop/core/hadoop- ...
- 搭建Linux虚拟服务器
1.搭建Linux虚拟机环境安装VMware Workstation 14下载地址:https://www.cr173.com/soft/68480.html密钥:FF31K-AHZD1-H8ETZ- ...
- LVS (Linux Virtual Server) 负载均衡
[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡 一.负载均衡:必不可少的基础手段 1.1 找更多的牛来拉车吧 当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服 ...
- LVS : Linux Virtual Server 负载均衡,集群,高并发,robust
1 LVS : Linux Virtual Server http://www.linuxvirtualserver.org/ http://www.linuxvirtualserver.org/zh ...
- LVS(Linux Virtual Server)
LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器.它是我国的章文嵩博士的一个开源项目.在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需 ...
- [Linux] LVS虚拟服务器四层负载均衡
随着互联网的爆炸性增长及其在我们生活中日益重要的作用,互联网上的流量急剧增加,并且每年以超过100%的速度增长.服务器上的工作负载正在迅速增加,因此服务器很容易在短时间内过载,尤其是对于流行的网站.为 ...
随机推荐
- [LeetCode] 892. Surface Area of 3D Shapes 三维物体的表面积
On a N * N grid, we place some 1 * 1 * 1 cubes. Each value v = grid[i][j] represents a tower of v cu ...
- Elasticsearch由浅入深(四)ES并发冲突、悲观锁与乐观锁、_version乐观锁并发
ES并发冲突 举个例子,比如是电商场景下,假设说,我们有个程序,工作的流程是这样子的: 读取商品信息(包含了商品库存) 用户下单购买 更新商品信息(主要是将库存减1) 我们比如咱们的程序就是多线程的, ...
- Nodejs操作MySQL数据库
https://github.com/mysqljs/mysql 如何用nodejs操作MySql数据呢,其实写法还是简单的, 1.开始在你的node项目中 npm install mysql - ...
- 【转】python实现Telnet操作
# -*- coding: utf-8 -*- import logging import telnetlib import time import sys import os host_ip = ' ...
- mysql 基本操作 四
1.临时表 当绘画结束时,临时表会自动销毁,无法用show tables 查看 临时表. MariaDB [jason]> create temporary table tmp(pro ),ci ...
- 【模板整合计划】NB数论
[模板整合计划]NB数论 一:[质数] 1.[暴力判] 素数.コンテスト.素数 \(\text{[AT807]}\) #include<cstdio> #include<cmath& ...
- excel中使用统计列中的值在其他列出现的次数
excel中使用统计一列的中值在其他列出现的次数 =COUNTIFS($J$:$J$,K2) 解释下 $J$2 J列中的第二行到 $J$373 J列的373行 范围内 查找 k列的第二行的值 出现的 ...
- [转].NET Core前后端分离快速开发框架(Core.3.0+AntdVue)
[转].NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员 ...
- 我是如何一步步编码完成万仓网ERP系统的(十三)库存 2.加权平均价
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- 1-Consul系列文章
使用Consul做服务发现的若干姿势 Consul的反熵 [Consul]Consul架构-简介