实现虚拟网络服务的主要技术,指出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. (转)单例模式(Singleton)的常见应用场景

    转自:http://blog.csdn.net/likika2012/article/details/11483167 单例模式(Singleton)也叫单态模式,是设计模式中最为简单的一种模式,甚至 ...

  2. pygame 浅解

    import pygame from first_pygame.plane_spirit import * # 调用重载的精灵类 # 初始化 pygame.init() # 初始化所有所需游戏模块 s ...

  3. C short类型的内存分析

    #include<stdio.h> #include<limits.h> void main(){ //printf("short%d, int%d, long%d ...

  4. QT离线安装包

    各个版本下载链接http://mirrors.ustc.edu.cn/qtproject/archive/qt http://www.qtcn.org/bbs/i.php

  5. ajax post

    前端 $.post("url",JSON.stringify({ a:a, ... }), function(data){ }, 'json'); 后端 @PostMapping( ...

  6. nuxt导入css样式

    全局导入,适用于所有组件 在nuxt.config.js文件引 css:["~样式path"], 如:css:["~assets/css/main.css"], ...

  7. B. Game with string 思维问题转化

    B. Game with string 思维问题转化 题意 有一个字符串 每次可以删去连续的两个同样的字符,两个人轮流删,问最后谁能赢 思路 初看有点蒙蔽,仔细看看样例就会发现其实就是一个括号匹配问题 ...

  8. python 多线程,多进程,高效爬虫

    1.多线程from concurrent.futures import ThreadPoolExecutor import requests def fetch_async(url): respons ...

  9. Oracle的表空间、用户和表的区别和联系

    Oracle的表空间.用户和表的区别和联系 Oracle数据库是通过表空间来存储实际存在的那些表.索引.视图的, 表空间分类: 临时表空间:   用于存储数据库中单持久性模型对象,如表.索引.视图等, ...

  10. Modelsim, Debussy联合仿真Xilinx

    http://wenku.baidu.com/view/8363d40003d8ce2f006623e9.html  另外一个博客 生成Xilinx库 先调用ISE的simulation librar ...