负载均衡是高可用网络基础架构的关键组件
通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。
一个没有负载均衡的 web 架构类似下面这样:
在这里用户是直连到 web 服务器,如果这个服务器宕机了,那么用户自然也就没办法访问了。另外,如果同时有很多用户试图访问服务器,超过了其能处理的极限,就会出现加载速度缓慢或根本无法连接的情况。
而通过在后端引入一个负载均衡器和至少一个额外的 web 服务器,可以缓解这个故障。通常情况下,所有的后端服务器会保证提供相同的内容,以便用户无论哪个服务器响应,都能收到一致的内容。
从图里可以看到,用户访问负载均衡器,再由负载均衡器将请求转发给后端服务器。在这种情况下,单点故障现在转移到负载均衡器上了。这里又可以通过引入第二个负载均衡器来缓解,但在讨论之前,我们先探讨下负载均衡器的工作方式。
负载均衡器可以处理什么样的请求?
负载均衡器的管理员能主要为下面四种主要类型的请求设置转发规则:
- HTTP
- HTTPS
- TCP
- UDP
负载均衡器如何选择要转发的后端服务器?
负载均衡器一般根据两个因素来决定要将请求转发到哪个服务器。首先,确保所选择的服务器能够对请求做出响应,然后根据预先配置的规则从健康服务器池(healthy pool)中进行选择。
因为,负载均衡器应当只选择能正常做出响应的后端服务器,因此就需要有一种判断后端服务器是否「健康」的方法。为了监视后台服务器的运行状况,运行状态检查服务会定期尝试使用转发规则定义的协议和端口去连接后端服务器。如果,服务器无法通过健康检查,就会从池中剔除,保证流量不会被转发到该服务器,直到其再次通过健康检查为止。
负载均衡算法
负载均衡算法决定了后端的哪些健康服务器会被选中。几个常用的算法:
- Round Robin(轮询):为第一个请求选择列表中的第一个服务器,然后按顺序向下移动列表直到结尾,然后循环。
- Least Connections(最小连接):优先选择连接数最少的服务器,在普遍会话较长的情况下推荐使用。
- Source:根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。
如果你的应用需要处理状态而要求用户能连接到和之前相同的服务器。可以通过 Source 算法基于客户端的 IP 信息创建关联,或者使用粘性会话(sticky sessions)。
最后,想要解决负载均衡器的单点故障问题,可以将第二个负载均衡器连接到第一个上,从而形成一个集群。
当主负载均衡器发生了故障,就需要将用户请求转到第二个负载均衡器。因为 DNS 更改通常会较长的时间才能生效,因此需要能灵活解决 IP 地址重新映射的方法,比如浮动 IP(floating IP)。这样域名可以保持和相同的 IP 相关联,而 IP 本身则能在服务器之间移动。
负载均衡的部署方式,简单的可分为串接,单臂,透明和服务器直接返回4类。
1. 串接路由模式 (Routed)
路由部署方式中,通常服务器的网关需要指向负载均衡设备,这种情况下的流量处理最简单,负载均衡只做一次目标地址NAT(选择服务器时)和一次源地址NAT(响应客户端报文时)
2. 单臂模式 (One-arm)
单臂模式中,通常服务器网关指向核心交换,为保证流量能够正常处理;负载均衡设备需要同时做源地址和目标地址NAT转换。也就是说,这种情况下服务器无法记录真实访问客户端的源地址。如果是http流量时,可以通过在报头中插入真实源地址,同时调整服务器日志记录的方式弥补。
3. 透明模式 (Transparent)
透明模式中,服务器和负载均衡设备同一网段;通过二层透传,服务器的流量需要经过负载均衡设备。
4. 服务器直接返回 (DSR)
服务器直接返回是较早的负载均衡常用方式,通过在服务器上的配置修改,负载均衡设备其实仅处理客户请求流量,所有服务器响应的流量直接返还给客户。早期在负载均衡性能较低时常用来作为一个避免性能瓶颈的手段。由于此种方式只能使用一些基本的4层负载,现在的高性能负载均衡设备通常不使用此类部署,但仍对延迟性要求高的语音类和视频类有应用。
部署方式 |
特点 |
优点 |
缺点 |
串联路由模式 |
负载均衡设备使用两个不同网段, 使用3层分配流量
比较常见的部署方式 |
•负载均衡设备将服务器有效隔离,安全考虑上最好
•服务器网关指向负载均衡设备, 功能实现更简单,有利于最大化负载均衡性能
•服务器可以直接接收到真实访问源客户IP地址
|
•对现有拓扑结构变动较大
•需要考虑内网服务器是否有对外访问需求,必要时需要设置静态NAT转换
|
单臂模式 One-arm |
VIP(提供服务的虚拟IP)和真实服务器在同一网段;
最常见的部署方式 |
•部署方便,对现有拓扑结构变动小
•和应用无关的流量不会通过负载均衡设备
•内部应用无影响,外部应用通常需要前端防火墙做NAT映射到应用VIP
|
•不能有效的屏蔽真实服务器,安全方面需要考虑
•服务器网关不是负载均衡设备时
1)负载均衡设备需要做源地址NAT后再转发流量,需要IP地址增多 2)服务器不能直接接收访问客户源地址,需要对应用做修改后才可以通过其他方式获得真实访问地址 |
透明模式 |
负载均衡设备和服务器之间部署在同一网段, 仅在有特殊需求时使用 |
•对现有拓扑结构变动最小
•服务器可以直接接收到真实访问源客户IP地址
|
部署不直观, 调试和故障分析时较繁琐 |
DSR |
服务器回程报文不通过负载均衡设备, 直接返回给客户端; 延迟短,适合流媒体等对延时要求较高应用 |
•性能高,可处理吞吐量高
•服务器可以直接接收到真实访问源客户IP地址
|
只能做4层的负载均衡,基于7层的服务无法实现 优化(例如压缩等)无法使用 需要在服务器上配置loopback地址 |