实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。

在已有的IP负载均衡技术中:

1)有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。

2)在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling)

3)通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing)。

  它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术

第一种模式

VS/NAT技术(Virtual Server via Network Address Translation)

下面的这种nat模式的数据包传输模式不是很常用,因为存在两个弊端:
1、数据包大小传输有限制
2、网络服务的非对称性,具体的是用户的下载文件的速度的传输速度和上传的速度相差很大
3、数据包无论是从哪到哪都会走负载均衡服务器,导致了无用资源的浪费

 第二个模式:

VS/DR(Virtual Server via Direct Routing)

这个client-server-client数据包的传输模型才是用的最多的模型(弊端:由负载均衡服务器和realserver必须是在同一网段)
 

注意这个最为常用的通信的方式:其中的三个vip都是一样的,
 
在全中国的应用的实例:全国在杭州、北京等地有很多个数据中心(可以理解为我们所说的负载均衡服务器,)之后这个负载均衡服务器,他们的后面连接着很多的realserver(真实的服务器),具体的数据包的过程:见第二个图
图一:
 

图二:

 
 
a、b。。。代表的是数据中心(均衡服务器),里面的点代表的是客户端,周围的客户端都是向他们发出请求的,之后负载均衡服务器的做法是:见图三
 
 
 
图三:
其中右侧的那个长方形就是具体的负载均衡服务器,里面的横线代表的是一个个的realserver
具体realserver中的做法:见图四以及上面的解释

图四

client向负载均衡服务器发送一个CIP_VIP形式的数据包,之后发到一个负载均衡服务器,被负载均衡服务器查看自己的VIP和发过来的封装成的数据包CIP_VIP去判断是否接收,。之后被具体的负载均衡服务器接收之后,就会均衡服务器中的DIP中记录的realserver中的所有的mac地址(具体的这些mac地址是之前负载均衡服务器和realserver相互交互的时候记录保存下来的mac地址)之后均衡服务器会将CIP_VIP这个从客户端收到的数据包包装一个含有realserver的mac地址的层,之后就会将这个再次的包装一层的数据包发给相应的mac地址的realserver服务器,之后的过程,之后realserver端直接根据收到的CIP_VIP   在内存中建立一个realserver里面存在的socket(这个可以在linux中使用netstat -natp)去查看现阶段的这台服务器建立的所有的scoket连接,其中由于从客户端收到了CIP_VIP 的请求,所以会建立一个CIP:PORT     VIP:PORT的socket连接,之后这个服务器端包装好想要返回给客户端的数据包之后,就会直接的去根据以前建立的CIP:PORT     VIP:PORT的socket连接,直接走自己身上有的PIP(public ip)直接的发送数据包到之前发送请求给这个realserver的客户端,这样的话就会避免了比如客户端下载东西对应的服务器上传东西,上传的速度就会大大的提升

具体的图中三个VIP是完全的一样的,只是realserver中的vip是不会暴露在公共下的,只是自己知道,用于到时候realserver收到的包装有mac层的数据包拆开之后,见到里面的CIP_VIP中的vip是自己内部的vip,这时这个realserver才会真正的一次收到客户端发过来的CIP_VIP数据包,----------终于完成了一次数据包的client---->server的传输,之后

返回的数据包一般直接是之前建立的CIP:PORT     VIP:PORT的socket连接,直接走自己身上有的PIP(public ip)直接的发送数据包到之前发送请求给这个realserver的客户端,这样的话数据包中的很多的IO限制就会解除掉了。

realserver要建立一个对外隐藏的vip,这样的话,整个网络中对外暴露的只有负载均衡服务器上的VIP,而 RealServer上的存在的VIP只有自己知道,不会去暴露给外界,这样的话,realserver端也就有VIP了。之后等待客户端发数据包给负载均衡服务器的时候,直接不用D_NAT转换了,直接可以发给相应的Realserver(真实服务器),
 
 
 

第三模式:

VS/TUN (Virtual Server via IP Tunneling)

又称隧道模式

也就是由负载均衡服务器到realserver之间的传输变成了:

    负载均衡服务器将CIP_VIP这个包在外包一层DIP_RIP(这个是由负载均衡服务器到realserver的一个数据包)用这个去包装之前的那个CIP_VIP,直接走隧道到realserver

    之后realserver返回客户端可以走隧道返回或者走pip---->一个运营商----->client

具体的负载均衡的实现见下节----LVS

原创文章:转载请注明作者及出处!

具体的client-server通信模型以及最为常用的通信模式的更多相关文章

  1. 深入浅出 Redis client/server交互流程

    综述 最近笔者阅读并研究redis源码,在redis客户端与服务器端交互这个内容点上,需要参考网上一些文章,但是遗憾的是发现大部分文章都断断续续的非系统性的,不能给读者此交互流程的整体把握.所以这里我 ...

  2. LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

    一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...

  3. SQL Server中截取字符串常用函数

    SQL Server 中截取字符串常用的函数: .LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要截 ...

  4. Network client/server

    <Beginning Linux Programming_4th>  chapter 15 Sockets 1  A simple local client/server 1)  clie ...

  5. Client–server model

    Client–server model From Wikipedia, the free encyclopedia The client–server model of computing ] Oft ...

  6. AndroidAsync :异步Socket,http(client+server),websocket和socket.io的Android类库

    AndroidAsync是一个用于Android应用的异步Socket,http(client+server),websocket和socket.io的类库.基于NIO,没有线程.它使用java.ni ...

  7. Linux SocketCan client server demo hacking

    /*********************************************************************** * Linux SocketCan client se ...

  8. NetMQ(ZeroMQ)Client => Server => Client 模式的实现

    ØMQ (也拼写作ZeroMQ,0MQ或ZMQ)是一个为可伸缩的分布式或并发应用程序设计的高性能异步消息库.它提供一个消息队列, 但是与面向消息的中间件不同,ZeroMQ的运行不需要专门的消息代理(m ...

  9. SQL Server 中截取字符串常用的函数

    SQL Server 中截取字符串常用的函数: 1.LEFT ( character_expression , integer_expression ) 函数说明:LEFT ( '源字符串' , '要 ...

随机推荐

  1. css之float(浮动)的特性

    详解CSS float属性  float本身不脱离文档流,但是和 position:absolute;搭配使用会脱离文档流 阅读目录 基础知识 float的详细细节 float特殊情况 clear属性 ...

  2. Linux, Nginx - Deepin linux手动安装nginx和出现的问题

    安装步骤 切换至root su 安装依赖库 sudo apt-get install build-essential && sudo apt-get install libtool s ...

  3. JavaScript可视化运行工具推荐

    事件循环.执行栈和任务队列可视化 这个宏任务.微任务,自带例子,也可以自己编辑,不过超过5s的例子就不行 JavaScript Visualizer Tyler Mcginnis大佬的Advanced ...

  4. php设计模式之观察者模式实例代码

    php提供的两个接口,一个被观察者接口SplSubject,一个或多个观察者接口SPLObserver,和一个可以储存对象的类SplObjectStorage.被观察者有三个方法,需要实现这三个方法, ...

  5. BZOJ1034[ZJOI2008]泡泡堂

    一开始是不会的,不知道如何处理相等的情况,瞎贪心一直WA. 于是就递归处理是让相等的平局还是输掉,如下,拿到了50分. int solve(int *a,int *b,int i,int l,int ...

  6. poj 1611 :The Suspects经典的并查集题目

    Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, was recognized ...

  7. springboot @ComponentScan注解

    @ComponentScan 告诉Spring从哪里找到bean. 如果你的其他包都在@SpringBootApplication注解的启动类所在的包及其下级包,则你什么都不用做,SpringBoot ...

  8. 左偏树(p1456) 比较模板的一道题

    题意:有n只猴子,m个操作,每一个操作,会让这两堆猴子里的最大的两只打架,打完之后,自身权值减半,然后他们会成为朋友 也就是会属于同一棵树,细节:如果选出的猴子在同一堆,就输出-1,然后下一个操作,不 ...

  9. Spring - 周边设施 - H2 数据库启动时写入数据

    1. 概述 之前讲到了 H2 的引入 这下我想说说 H2 启动时的 数据导入 2. 场景 需求 启动项目后, H2 启动起来 环境数据会自动注入 H2 数据库 可以验证是否成功 3. 环境 os wi ...

  10. linux日常运维工作

    Linux的使用环境也日趋成熟,各种开源产品络绎不绝,大有百花齐放的盛景,那么当Linux落地企业,回归工作时,我们还要面对这Linux运维方面的诸多问题,今天我们特意组织一场有关Linux 在企业运 ...