ZPY博客

负载均衡的几种方式

Http重定向负载均衡

缺点是需要再次请求才能完成一次访问。使用http302响应码重定向,有可能使搜索引擎判断为作弊。

DNS域名解析负载均衡

在DNS服务器中配置多个A记录,如:

www.mysite.com IN A 114.100.80.1

www.mysite.com IN A 114.100.80.2

www.mysite.com IN A 114.100.80.3

每次域名解析请求会根据负载均衡算法来返回其中一个Ip地址。

优点是将负载均衡的工作交给DNS服务器,省掉了自己维护负载均衡服务器的麻烦

缺点是DNS是多级解析,每一级DNS都可能缓存A记录,当下线某台服务后,即使修改了DNS的A记录,要使其生效也得很长时间,这段时间内,DNS依然会将域名解析到已下线的服务器。而且DNS负载均衡的控制权在域名服务商那里,我们无法对其做更多的改善和管理。

事实上,一般使用DNS域名解析不是直接解析到某台具体的应用服务器,而是解析到内部负载均衡服务器。

反向代理负载均衡

用的最多的就是反向代理负载均衡了。

反向代理服务器有一个外网Ip和一个内网ip,而内网ip与web服务器集群属于同一个网段,而web服务器集群都不需要连外网。外部请求过来时,反向代理服务器通过负载均衡算法计算出一个物理服务器的ip,然后转发请求给该服务器,该服务器将结果响应给反向代理服务器,反向代理服务器再将结果返回给用户。

由于反向代理转发请求在HTTP协议层面,因此也叫应用层负载均衡。缺点是反向代理服务器可能成为性能瓶颈。

IP负载均衡

这个是ip负载均衡是比较难理解的。至少我自己是反复看了几遍才弄懂是怎么回事。

用户请求数据包到达负载均衡服务器时,根据负载均衡算法计算得出一台真实的web服务器10.0.0.1,然后将目的Ip地址改为10.0.0.1,真实的web服务器将数据响应给负载均衡服务器,负载均衡服务器再将数据返回给用户。

这里的问题是,真实的web服务器如何将数据返回给负载均衡服务器。因为是通过改Ip的方式访问的10.0.0.1,这里如果要返回给负载均衡服务器,有两种方式,一种是将目的ip地址改为负载均衡服务器的地址,源地址改为自身ip即10.0.0.1。这样数据就会回到负载均衡服务器。第二种是负载均衡服务器作为真实物理服务器集群的网关,因为所有请求都要经过网关。

数据链路层负载均衡

这个模式感觉和上面的修改ip的方式有点像,不同的是这个是修改mac地址,而负载均衡服务器的ip和web服务器集群的ip全部设成一样的,这样数据可以正常的传输到这台mac地址的web服务器,而这台web服务器也可以直接返回数据给用户,而不需要再经过负载均衡服务器了。

这种数据传输方式也称为三角传输模式,是目前大型网站使用最广的一种负载均衡手段。在Linux平台上最好的链路层负载均衡开源产品是LVS(Liunx Virtual Server)。