实现虚拟网络服务的主要技术,指出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. python property(不动产)方法

    class Test(object): @property def test(self): return 100 @test.setter def test(self): return "修 ...

  2. 执行PDB的PITR恢复失败的说明

    Oracle 12.1版本中,UNDO表空间仅存在CDB级别(共享UNDO),来自于AskScuti博客园. Oracle 12.2版本开始,UNDO表空间同时可以存在每个PDB级别(本地UNDO). ...

  3. HTTP慢速攻击

    漏洞原理 HTTP慢速攻击也叫slow http attack,是一种DoS攻击的方式.由于HTTP请求底层使用TCP网络连接进行会话,因此如果中间件对会话超时时间设置不合理,并且HTTP在发送请求的 ...

  4. C++ 跨dll传递string类型参数执行出错问题

    今天遇到一个问题,在一个dll工程中定义了一个返回值为string,参数为string的函数,然后在一个测试工程中调用,Release模式下一切正常Debug模式下整个函数的执行到return之前都毫 ...

  5. C++分割string字符串(转)

    原文链接:https://blog.csdn.net/jirryzhang/article/details/80473032 或:https://www.cnblogs.com/dingxiaoqia ...

  6. Mysql5.6基础命令

    Centos7下mysql5.6数据库的操作 Mysql如何修改密码? 1.使用mysqladmin修改,这种修改方式需要知道mysql的原始密码 修改密码后我们测试下看看能不能登录成功 怎么才能不需 ...

  7. java.util.UUID工具类

    生成数据表的主键Id会用到此工具类 /** * <获取主鍵> * <获取32位UUID> * @return * @see [类.类#方法.类#成员] */ public st ...

  8. python之路之socket

    一.网络编程 1.socket介绍 import socket def handle_request(client): buf = client.recv(1024) client.sendall(b ...

  9. python夜记

    关于多行字符串(multi-line strings)的表现: Python列表是基于0索引的.(zero-indexed). 晌午起床来嘞,再来些笔记: Treasures 1: 列表方法rever ...

  10. Object.fromEntries

    //数组转换成对象 const arr = [['foo', 1],['bar', 2]] const obj = Object.fromEntries(arr) console.log(obj.ba ...