1. 负载均衡技术介绍
- HTTP 重定向负载均衡
- DNS 域名解析负载均衡
- 反向代理负载均衡
- IP 负载均衡
- 数据链路层负载均衡
1.1 HTTP 重定向负载均衡
介绍:在网站机房有一台名为“HTTP 重定向负载均衡”的服务器 A。
步骤:
- 浏览器请求 DNS 解析域名,拿到服务器 A 的IP地址并访问;
- 服务器 A 利用某种负载均衡算法获得一台实际物理服务器 B 的地址,重定向响应返回给浏览器;
- 浏览器自动重新请求该实际物理服务器的 IP 地址,完成访问。
评价:
- 简单、但需要浏览器两次访问服务器;
- 使用 HTTP302 响应码重定向,可能使搜索引擎判断为 SEO 作弊,降低搜索排名。
1.2 DNS 域名解析负载均衡
介绍:DNS 服务器不仅进行域名解析,而且同时进行负载均衡。
步骤:
- 在 DNS 服务器中配置多个 A 记录;
- 每次域名解析请求时会根据负载均衡算法计算一个不同的 IP 地址返回。
评价:
- 省去了网站维护负载均衡服务器的麻烦;
- DNS 可以基于地理位置的域名解析(离用户较劲的服务器地址),可以加快用户访问速度;
- DNS 服务器中的 A 记录修改较麻烦,生效慢;
- 控制器不在网站方,网站管理较麻烦。
- 大型网站中,会将 DNS 负载均衡放在第一级,域名解析得到的 IP 地址是下一级负载均衡服务器(非实际物理服务器),在下一级负载均衡服务器上会进行再次负载均衡。
1.3 反向代理负载均衡
介绍:在 Web 应用服务器前的反向代理服务器,不仅缓存 Web 响应资源,而且提供负载均衡的功能。
步骤:
- Web 服务器不直接对外提供访问,所以只需要内部 IP 地址即可;
- 反向代理服务器需要同时具有外部 IP 地址和内部 IP 地址两套 IP 地址;
评价:
- 反向代理服务器转发请求在 HTTP 协议层(在应用程序中分发),即应用层负载均衡;
- 优点是部署简单,缺点是反向代理服务器的重要性提升,需要关注其性能。
1.4 IP 负载均衡
介绍:在网络层通过修改请求目标实现负载均衡。
方案一:
- 用户请求数据包到达负载均衡服务器,负载均衡服务器在 OS 的内核进程获取网络数据包,计算出一台真实的 Web 服务器,然后将数据包的目的 IP 地址修改(同时修改源 IP 地址为负载均衡服务器的地址);
- Web 服务器响应时的数据包回到负载均衡服务器,服务器将数据包的源地址修改为自身的 IP 地址发送给浏览器。
方案二:
- 相比方案一,将负载均衡服务器同时当作网关服务器。那么不需要同时修改数据包的源 IP 地址,就可以让 Web 服务器将响应返还给负载均衡服务器了。
评价:
- IP 负载均衡服务器是在内核进程完成数据分发,比在应用层的反向代理服务器性能更好;
- 但是所有的请求响应都必须经过负载均衡服务器,那么此负载均衡服务器的网卡带宽容易成为性能的瓶颈。
1.5 数据链路层负载均衡
介绍:在通信协议的数据链路层修改 mac 地址进行负载均衡。
步骤:
- 负载均衡服务器(实际 IP)与 Web 服务器集群(虚拟 IP)具有同一个 IP 地址;
- 负载均衡服务器拿到数据包后,不修改 IP 地址,而是修改目的 mac 地址,数据包就会传输到该 Web 服务器上;
- Web 服务器的响应信息可以不经过负载均衡服务器,直接发送回用户浏览器。
评价:
- 以上负载均衡方式称为直接路由方式(DR),模式称为三角模式;
- 是目前大型网站应用最广的一种负载均衡手段;
- Linux 平台上最好的链路层负载均衡开源产品是 LVS。
2. 负载均衡算法
主要有:轮询、加权轮询、随机、最少连接、原地址散列:
- 轮询:所有请求依次分发到每台服务器上,平均分配。
- 加权轮询:在轮询基础上,考虑不同服务器硬件性能的差异,按权重分发。
- 随机:请求被随机分配。
- 最少连接:将新进请求发给当前请求数最少的服务器。
- 源地址散列:将请求来源的 IP 地址进行 Hash,使得来自同一个 IP 地址的请求总在同一个服务器上处理,从而实现会话粘滞。
推荐阅读:四层、七层负载均衡的比较