负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解

负载均衡原理与实践详解 第五篇 负载均衡时数据包流程详解

系列文章:

负载均衡详解第一篇:负载均衡的需求

负载均衡详解第二篇:服务器负载均衡的基本概念-网络基础

负载均衡详解第三篇:服务器负载均衡的基本概念-使用负载均衡器的服务器群

负载均衡详解第四篇:服务器负载均衡的基本概念-负载均衡时数据包流程

负载均衡详解第五篇:服务器负载均衡的基本概念-健康检查

负载均衡详解第六篇:服务器负载均衡的基本概念-网络地址转换(NAT)

负载均衡详解第七篇:服务器负载均衡的基本概念-服务器直接返回

负载均衡详解第八篇:服务器负载均衡技术进阶-会话保持(上)

负载均衡详解第九篇:服务器负载均衡技术进阶-会话保持(中)

负载均衡详解第十篇:服务器负载均衡技术进阶-会话保持(下)

 

我们以下图为例,讨论采用负载均衡器后数据包的流程。

 

 

        如图所示,有三台服务器,RS1到RS3,还包含三种应用:Web(HTTP),FTP,和SMTP,分别在三台服务器上运行。在这个例子中,所有的应用都运行在TCP之上,而且每个应用都使用不同的TCP端口。WEB应用在80端口上运行,FTP在21端口上运行,而SMTP在端口25上运行。负载均衡器根据接收的TCP数据包中的目的端口号识别客户端需要访问的应用,并为每个客户请求选择合适的服务器。

 

       选择服务的过程分两步,第一,负载均衡器必须判断哪些服务器上面的应用是可用的。服务器和应用是否可用由健康检查决定,我们将会在后面的章节中详细讨论。第二,负载均衡器采用一种负载均衡算法来选择服务器。常用的复杂均衡算法有轮循、最小连接数、权重、最快响应时间等,负载均衡算法将会在后面的章节详细讨论。

 

负载均衡器的配置包括以下几个步骤:

1.定义一个VIP:VIP=123.122.121.1;

 

2.确定哪些应用需要负载均衡:Web、FTP和SMTP;

 

3.对每个应用,绑定VIP到相应的真实服务器:把RS1和RS2绑定到Web的VIP;把RS1绑定到FTP的VIP;把RS2和RS3绑定到SMTP的VIP。也就是说,VIP的80端口绑定到RS1和RS2的80端口;VIP的21端口绑定到RS1的21端口,依此类推,如上图所示;

 

4.设置健康检查,用来检查服务器和应用的健康状态;

 

5.设置负载均衡算法。 通过把VIP绑定到真实服务器的不同TCP端口,我们把服务器和应用分离开,提供了强大的灵活性。举例来说,如果FTP应用的访问量增加,只需要把另外一台服务器绑定到VIP的21端口就可以增加FTP服务的处理能力。如果RS2需要下线维护,我们可以利用负载均衡器实现RS2的无缝停机,也就是停止向RS2发送任何新的请求,并等待所有的在线连接关闭,然后将RS2停机。

 

       注意示例中所有的真实服务器都使用私有IP地址,这样做有两个好处:首先,只用一个公网IP地址,也就是VIP,来表示所有的服务器群可以节省IP地址空间;第二,提高了安全性,任何客户的请求都不能绕过负载均衡器直接访问到服务器。

 

对于负载均衡器能够做什么,现在我们都了解了,下面看一下采用负载均衡器后数据包的转发流程。

 

       我们用一个简单例子,如下图所示,来了解请求响应过程中数据包的转发流程。

20120405095922.png

 

 

        客户端首先建立一个TCP连接,发送HTTP请求,接收服务器响应,并关闭这个TCP连结。建立TCP连接需要三次握手,负载均衡器接收到的TCP SYN请求包含以下信息:

源IP地址:客户端的IP地址;

源端口:客户端用于此TCP连接的端口号码;

目的IP地址:VIP地址;

目的端口:由于请求访问的是WEB应用,所以目的端口是80。

 

       上述四个因素唯一标识了一个TCP会话,当负载均衡器接收到第一个TCP SYN数据包后,假定选择RS2处理这个请求,并将请求发送到RS2。为了让RS2接收TCP SYN数据包并进行处理,必须把数据包的目的地址修改为RS2的私有IP地址,而不是VIP的IP地址。因此,负载均衡器在转发数据包之前会把目的地址修改为RS2的IP地址,这个IP地址转换的过程称为网络地址转换(NAT)。更确切的讲,由于负载均衡器修改的是目的地址,所以也称为目的地址NAT。

 

       当用户敲入www.agilesharp.com之后,浏览器会产生一个DNS查询请求,获取www.agilesharp.com对应的IP地址,也就是VIP。然后客户端的浏览器发送TCP SYN数据包以建立一个新的TCP联接。当负载均衡器接收TCP SYN数据包后,它先确认这个请求是需要做负载均衡的数据包,因为数据包的目的地址是VIP。由于这是一个新的连接,负载均衡器无法在会话表中通过源IP地址、目的IP地址、源端口地址、目的端口地址查到这一个会话。根据负载均衡设置和健康检查的结果,负载均衡器确认RS1和RS2可以接收新建连接。根据预先定义的负载均衡算法,负载均衡器选择RS2来处理这个会话请求。服务器选定之后,负载均衡器在它的会话表中建立一个新的记录,并把数据包的目的IP地址和目的MAC地址修改为服务器RS2的IP地址和MAC地址,然后把数据包发送到RS2。

 

       当接收到TCP SYN包之后,RS2会应答TCP SYN ACK包,数据包的源地址是RS2的IP地址,而目的地址就是客户端的IP地址。负载均衡器接收到这个数据包之后,再把RS2的IP地址修改为VIP的IP地址,并把数据包发送到路由器,最终路由到客户端。这个TCP会话后续所有的请求和回应数据包都是经过同样的流程。最终,当通过FIN或RESET结束或终止这个连接时,负载均衡器在其会话表中删除这个会话记录。

 

       现在我们来跟踪数据包的流程,看一下IP地址和MAC地址是如何改变的。当路由器接收到数据包时,数据包的目的IP地址是VIP,而目的MAC地址是M1,也就是路由器的MAC地址。

 

       第一步,如上图中所示,路由器把目的MAC地址修改为M2并把数据包发送到负载均衡器,M2是负载均衡器的MAC地址。

 

       第二步,负载均衡器把目的IP地址和目的MAC地址修改为RS2的IP地址和MAC地址,并发送到RS2。

 

       第三步,RS2响应客户端的请求。因此,源IP和源MAC都是RS2的地址,而目的IP地址是客户端的IP地址。RS1和RS2的缺省网关是负载均衡器的IP地址。因此,目的MAC地址是负载均衡器的MAC地址。

 

       第四步,负载均衡器接收数据包之后,把源IP地址修改为VIP的地址,使得回应看起来跟VIP发出的一样。这一点非常重要,TCP连接是建立在客户端和VIP之间的,并不是真实服务器,所以回应的数据包必须看起来象是从VIP发出的一样。为了数据包能够正常到达客户端,负载均衡器需要把数据包转发给它的下一跳,也就是路由器。负载均衡器把源MAC地址修改为自己的MAC地址M2,目的MAC地址修改为路由器的MAC地址M1,然后把数据包转发至路由器。

 

       在这个例子中,负载均衡器作为真实服务器的缺省网关。其实,也可以用路由器作为服务器的缺省网关。那样的话,从真实服务器返回的数据包的目的MAC地址为M1,也就是路由器的MAC地址,而负载均衡器对源MAC和目的MAC不做任何改动。对于其他的二、三层交换机和主机而言,负载均衡器就相当于一个二层交换机。

 

本篇就讨论到这里!下一篇,我们继续!

posted @ 2012-04-05 10:08  小洋(燕洋天)  阅读(5465)  评论(5编辑  收藏  举报