实现虚拟网络服务的主要技术,指出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. Mybaits的中的对象映射(包含仅有基本数据类型的属性的和对象类型的属性的)

    转:https://blog.csdn.net/cjt20100/article/details/46547617. 1 constructor – 用来将结果反射给一个实例化好的类的构造器    a ...

  2. python3练习100题——009

    今天的题目好像有点水... 原题链接:http://www.runoob.com/python/python-exercise-example9.html 题目:暂停一秒输出. 我的代码: impor ...

  3. MongoDB - String转换为Int,并更新到数据库中

    方法1 使用$convert, MongoDB版本 >= 4,速度快. 使用pymongo示范,原生mongo语句并没有尝试. # 假设{'age': '47'}, 转换后为{'age': 47 ...

  4. ansible笔记(6):常用模块之系统模块

    1.cron模块 cron命令是计划任务功能,与crontab功能类似. 示例:时间格式--->>>分  时  日  月 星期 10 12 27 * *  tar -cvzf log ...

  5. CentOS6.5-6.9安装 docker

    安装docker yum -y install docker-io 备注:查看内核版本uname -r ;卸载docker版本命令 yum remove docker 更改配置文件 vim /etc/ ...

  6. 网关集成Swagger出现404错误

    原因是忘了在需要生成api的类上加入注解  @EnableSwagger2Doc

  7. 【转载】Java反射机制详解

    转自:http://baike.xsoftlab.net/view/209.html#3_8 1反射机制是什么 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对 ...

  8. Vue 实现todolist的添加删除功能

    直接上代码 vm.$emit( eventName, [-args] ) 触发当前实例上的事件 可选附加参数 传给监听器回调. <style> #app{ margin: 100px; } ...

  9. 第二十七篇 玩转数据结构——集合(Set)与映射(Map)

          1.. 集合的应用 集合可以用来去重 集合可以用于进行客户的统计 集合可以用于文本词汇量的统计   2.. 集合的实现 定义集合的接口 Set<E> ·void add(E) ...

  10. Java-POJ1001-求高精度幂

    参考博客:https://www.cnblogs.com/downrainsun/p/11041960.html package poj.ProblemSet; import java.math.Bi ...