[转载]负载均衡之IP均衡

首先让我们来看看下面这张大家都非常熟悉的TCP/IP协议族的分层图:

\4.jpg
\4.jpg

关于每层在网络数据包传输过程中所起到的作用不是本文的重点,本文主要是讲解如何在网络层中使用IP来做服务器集群的负载均衡,为什么可以在这一层来做负载均衡。下面在来看IP协议的报头格式:

\5.jpg
\5.jpg

内红色框内的源地址和目的地址是IP负载均衡功能的关键所在,IP负载均衡又可以称之为网络层负载均衡,其核心原理就是通过内核驱动更改IP的目的地址来完成数据负载均衡的,如下图:

\6.jpg
\6.jpg

如上图所示,用户请求数据包(源地址为200.10.10.1)到达负载均衡服务器114.100.80.10后,负载均衡服务器在内核进程获取网络数据包,根据一定的负载均衡算法得到一台内部的真实服务器10.0.0.1,然后将数据包的目的IP修改为10.0.0.1,此后数据包将会被发往10.0.0.1的服务器上,服务器处理完后,将向负载均衡服务器返回相应的数据包,负载均衡服务器在把源地址修改为200.10.10.1后将数据包传输给用户浏览器。在这一整个过程中,数据包没有通过用户的应用进程,因此该负载均衡的性能是非常之高的。

根据以上的图和上文的讲解,大家可能会觉得这很容易实现,其实不然,在这里需要处理关键的地方就是如何将集群内部服务器处理完后的数据返回给负载均衡服务器。因为,用户请求的数据包到达负载均衡服务器前的目的地址是114.100.80.10,源地址是200.10.10.1,通过负载均衡服务器修改后的目的地址是10.0.0.1,源地址还是200.10.10.1,所以处理后返回的数据包目的地址将是200.10.10.1,源地址是10.0.0.1,最终返回的数据包要回到负载均衡服务器就成了问题。

解决的办法大概有如下两种:

一、负载均衡服务器使用双网卡,一个对内一个对外,在修改请求数据包的目的IP的同时也修改源地址,将源地址设为自身的IP,即源地址转换(SNAT),这样内部集群服务器响应会再回到负载均衡服务器;

二、将负载均衡服务器作为真实物理服务器集群的网关服务器,这样所有的响应都将通过负载均衡服务器。

IP负载均衡在内核进程完成数据分发,处理性能得到了很好的提高。但是由于所有请求和响应都要经过负载均衡服务器,集群的最大响应数据吞吐量将受到负载均衡服务器网卡带宽的限制,对于提供下载服务或者视频服务等需要大量传输数据的站点而言,这是难以满足需求的。要是能让响应数据包绕过负载均衡服务器直接发往用户机器上就好了,有什么办法可以做到呢?当然有,那就是链路层的负载均衡。


参考网站:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【摘要】 面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器...
    静修佛缘阅读 10,139评论 0 24
  • 摘要:面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采...
    layjoy阅读 14,713评论 3 93
  • 一、什么是负载均衡 首先我们先介绍一下什么是负载均衡:负载平衡(Load balancing)是一种计算机网络技术...
    小流江海阅读 4,617评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,095评论 19 139
  • Daisy果阅读 1,679评论 0 0

友情链接更多精彩内容