服务器集群负载均衡原理?

在分布式集群环境中,如何把众多并发请求分布到不同的服务器上的呢?是通过DNS手段还是通过别的软件手段呢(比如web服务器软件nginx、apache)…
关注者
568
被浏览
131,233

19 个回答

负载均衡有硬件和软件两种.

硬件层的比较牛逼,将4-7层负载均衡功能做到一个硬件里面,如F5,梭子鱼,据说yahoo中国!早些时候只用了两台F5做双活.

目前主流的软件负载均衡分为四层和七层

LVS属于四层负载均衡,工作在tcp/ip协议栈上,通过修改网络包的ip地址和端口来转发, 由于效率比七层高,一般放在架构的前端.

七层的负载均衡有nginx, haproxy, apache等, 工作在应用层,因此可以将HTTP请求等应用数据发送到具体的应用服务器,如将图片请求转发到特定的服务器上,总之可以做到更智能的负载均衡,这些功能在四层负载均衡上不好实现,一般放在架构的后面位置,布置在应用服务器前面.

建议查看:

《构建高性能Web站点》第12章 web负载均衡

《大型网站技术架构:核心原理与案例分析》 6.2 应用服务器集群的伸缩性设计

写的比较详细~

---------------------------------------------

下面的内容摘录自以上两书:

12.2 HTTP重定向

Web服务器可通过Http响应头信息中的Location标记来返回一个新的URL,浏览器自动去访问这个新的URL。

实现:可以通过Web应用程序代码实现你想到的调度策略,如可根据请求的URL的不同来进行合理的过滤和转移。



12.3 DNS负载均衡

DNS负责将用户请求的域名映射为实际的IP地址,这种映射可以是一对多的( DNS的A记录,用来指定域名对应的IP地址),这样DNS服务器便充当负载均衡调度器。

DNS节省了所谓的主站点,DNS服务器已经充当了主站点的职能。常见的策略是对多个A记录进行RR(轮询)



12.4 反向代理负载均衡

反向代理服务器的核心工作是转发HTTP,它工作在HTTP层面,因此,基于反向代理的负载均衡也称为七层负载均衡。

任何对于实际服务器的HTTP请求都必须经过调度器;调度器必须等待实际服务器的HTTP响应,并将它反馈给用户。



12.5 IP负载均衡

网络地址转换(NAT)负载均衡工作在传输层,对数据包中的IP地址和端口进行修改,从而达到转发的目的,称为四层负载均衡。

NAT服务器(前端服务器)必须作为实际服务器(后端服务器)的网关,否则数据包被转发后将一去不返。



12.6 直接路由

这种方式工作在数据链路层。它修改数据包的目标MAC地址,并没有修改目标IP(因为这种转发工作在数据链路层,它对上层端口无能为力),然后发给实际的服务器,实际服务器的响应数据直接发回给用户,而不用经过调度器。但实际服务器必须接入外网,而且不能将调度器作为默认网关,要给实际服务器添加和调度器IP地址相同的IP别名。



12.7 IP隧道

基于IP隧道的负载均衡系统也可以使用LVS来实现,称为LVS-TUN。与LVS-DR不同的是,实际服务器和调度器可以不在同一个WAN网段,调度器通过IP隧道技术来转发请求到实际服务器,所以实际服务器必须有合法的IP地址。

基于IP隧道的请求转发机制,是将调度器收到的IP数据包封装在一个新的IP数据包中,转交给实际服务器,然后实际服务器的响应数据包可以直接到达用户端。

基于IP隧道的独特方式,可以将实际服务器部署在不同的地域并根据就近原则转移请求,比如一些CDN服务器就是基于IP隧道技术实现的。