Linux服务器集群系统(二)—— LVS的IP负载均衡技术
一、通过NAT实现虚拟服务器(VS/NAT)
1.客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址 Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器
2.同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户
所有到IP地址为202.103.106.5和端口为80的流量都被负载均衡地调度的真实服务器172.16.0.2:80和 172.16.0.3:8000上。目标地址为202.103.106.5:21的报文被转移到172.16.0.3:21上。而到其他端口的报文将被拒绝
二、通过IP隧道实现虚拟服务器(VS/TUN)
通过NAT实现虚拟服务器的一点弊端:
- 在VS/NAT 的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。
- 大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。
IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。
IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。
VS/TUN的体系结构
我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。各个服务器将VIP地址配置在自己的IP隧道设备上。
VS/TUN的工作流程
VS/TUN 的工作流程如图所示。它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器, 将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发 现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。
三、通过直接路由实现虚拟服务器(VS/DR)
跟VS/TUN方法相同,VS/DR利用大多数Internet服务的非对称特点,负载调度器中只负责调度请求,而服务器直接将响应返回给客户,可以极大地提高整个集群系统的吞吐量
VS/TUN的体系结构
调度器和服务器组都必须在物理上有一个网卡通过不分断的局域网相连,如通过高速的交换机或者HUB相连。VIP地址为调度器和服务器组共享,调度器配置的VIP地址是对外可见的,用于接收虚拟服务的请求报文;所有的服务器把VIP地址配置在各自的Non-ARP网络设备上,它对外面是不可见的,只是用于处理目标地址为VIP的网络请求。
VS/DR 的工作流程
VS/DR 的工作流程如上所示:它的连接调度和管理与VS/NAT和VS/TUN中的一样,它的报文转发方法又有不同,将报文直接路由给目标服务器。在VS/DR 中,调度器根据各个服务器的负载情况,动态地选择一台服务器,不修改也不封装IP报文,而是将数据帧的MAC地址改为选出服务器的MAC地址,再将修改后 的数据帧在与服务器组的局域网上发送。因为数据帧的MAC地址是选出的服务器,所以服务器肯定可以收到这个数据帧,从中可以获得该IP报文。当服务器发现 报文的目标地址VIP是在本地的网络设备上,服务器处理这个报文,然后根据路由表将响应报文直接返回给客户。
在VS/DR中,根据缺省的TCP/IP协议栈处理,请求报文的目标地址为VIP,响应报文的源地址肯定也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。
VS/DR负载调度器跟VS/TUN一样只处于从客户到服务器的半连接中,按照半连接的TCP有限状态机进行状态迁移。
Linux服务器集群系统(二)—— LVS的IP负载均衡技术相关推荐
- Linux服务器集群系统(三)——LVS集群中的IP负载均衡技术
原文地址:http://www.linuxvirtualserver.org/zh/lvs3.html 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载 ...
- Linux服务器集群系统(LVS)
from:http://www.linuxvirtualserver.org/zh/lvs1.html#5 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目 ...
- Linux服务器集群系统(四)——LVS集群的负载调度
原文地址: http://www.linuxvirtualserver.org/zh/lvs4.html 本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法.针对请 ...
- Linux服务器集群系统(三)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs3.html LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 2002 ...
- Linux服务器集群系统(三)
LVS集群中的IP负载均衡技术 章文嵩 (wensong@linux-vs.org) 2002 年 4 月 本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载 ...
- LVS Linux服务器集群系统
Linux服务器集群系统(一) LVS项目介绍 章文嵩 (wensong@linux-vs.org) 2002 年 3 月 本文介绍了Linux服务器集群系统--LVS(Linux Virtual S ...
- Linux服务器集群系统(一)lvs项目介绍
转自:http://www.linuxvirtualserver.org/zh/lvs1.html 本文介绍了Linux服务器集群系统--LVS(Linux VirtualServer)项目的产生背景 ...
- Linux服务器集群系统(一)--转
引用地址:http://www.linuxvirtualserver.org/zh/lvs1.html LVS项目介绍 章文嵩 (wensong@linux-vs.org) 2002 年 3 月 本文 ...
- Linux服务器集群系统--作者
本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标,并描述了LVS服务器集群框架及目前提供的软件,列举LVS集群系统的特点和一些实际应用,最后 ...
- Linux服务器集群系统(二)——LVS集群的体系结构
原文地址: http://www.linuxvirtualserver.org/zh/lvs2.html 本文主要介绍了LVS集群的体系结构.先给出LVS集群的通用体系结构,并讨论了其的设计原则 ...
最新文章
- h5在手机端实现简单复制
- 广东蓝桥杯c语言编译器_小软访谈之榜样充电站 千里之行,始于足下——“蓝桥杯”获奖者采访...
- IIS部署ArcGIS JS API4.10后,字体未加载加载字体跨域
- 艾伟_转载:WPF/Silverlight陷阱:XAML自定义控件的嵌套内容无法通过名称访问
- c#用canny算子做边缘提取_【图像处理】边缘检测
- vscode python单步调试_调试期间VSCode python“未验证断点”?
- Redis运维和开发学习笔记-全书思维导图
- php如何判断文件的内容,php 判断文件内容是否存在的方法
- C++primer 13.6.2节练习
- PageHelper使用说明
- 2013 ACM/ICPC Asia Regional Online —— Warmup1 1005 Balls Rearrangement
- 学习 Message(13): 解析 TWMMouse.Keys 参数
- Golang go 命令
- 爸爸和儿子的故事带你理解java线程
- a标签如何链接php文件路径,HTML的a标签href属性指定相对路径与绝对路径的用法讲解...
- 2022版保姆级Idea调试jdk源码
- 小白分分钟学会,简单四步,直接把sql直接转换成接口服务java
- KVM虚拟机迁移具体步骤
- 我的世界电脑正版怎么开服务器,我的世界手机版开服器怎么用 开服务器方法...
- 《IDEO,设计改变一切》(Change By Design)- 读书笔记
热门文章
- word里的多级列表和项目编号是什么区别?
- 什么是“可证伪性”?
- 【深度学习的数学】初始权重和偏置参数对模型训练非常重要!(预训练模型、预训练文件、初始权重)
- Python__数据结构与算法——树、二叉树(实现先、中、后序遍历)
- Ubuntu 安装 Docker 容器
- html5 loader,7种基于GSAP的SVG Loader加载动画特效
- c语言4x4矩形转置,最快的转置4x4字节矩阵的方法。
- 这次让我们从字节码文件来重新认识String,文末有两个小小面试题,一起来试一试
- hypermill后处理构造器安装_UG NX后处理安装方法(新手入门)
- python高性能服务器编写,Tornado的高性能服务器开发常用方法