说一说负载均衡

2020-05-25 00:00:00 用户 集群 服务器 后端 负载均衡

为什么需要负载均衡

一个网站在创建初期,一般来说都是只有一台服务器对用户提供服务。



从图里可以看出,用户经过互联网直接连接了后端服务器,如果这台服务器什么时候突然 GG 了,用户将无法访问这个网站(单点故障)。

另外业务上升,用户增加,单台服务性能和稳定性都会受到很大的挑战。



那么要怎么办呢?加机器!扩容!不差钱!

加机器

既然一台服务器不够用,那么就两台,如果还不行,就三台。



这样我们就有了很多台机器了,足够应付用户的请求了。

在这里,我们把用户的访问流量称为负载,而根据转发策略(rules)将负载(访问流量)分配给后端机器的服务便是负载均衡



怎么『均衡』

现在我们研究下怎么『均衡』地给服务器分配访问流量了

  1. DNS 负载均衡
    因为用户在访问我们的服务的时候,需要通过 DNS 查询后端服务器的具体 IP,得益于智能 DNS 之类的新技术方案,我们可以在 DNS 解析的时候,通过线路、地域之类的规则针对性地返回不同的 IP。


DNS 负载均衡通过用户 IP 进行判断,可以按规则返回一个离用户位置近的一台服务器作为解析结果,一定程序上保证了服务的速度。所以,CDN 服务一般会使用这个作为层调度,保证用户请求的缓存节点一定是近的。
BUT! 由于 DNS 服务一般是由第三方服务商提供,虽说我们可以配置规则,但我们实际上并不能获知用户拿到的 DNS 解析结果是否符合预期;而我们在增减服务器的时候,需要变更 DNS 配置,各级 DNS 服务器缓存及更新策略并不能达到及时变更的效果。

  1. 四层负载均衡
    四层负载均衡工作在运输层,所以只支持 TCP/UDP 协议,负载均衡设备会将用户请求的 IP 和 PORT 地址进行修改为后端服务器的某一台,同样为了隐藏真实的后端机器信息,会对提出后端服务器返回的数据报文进行修改。在第四层负载均衡时,客户端是直接与后端真实机器建立连接。
    在阿里云或者其他提供 SLB (Server Load Balancer) 服务的平台上面,会出现一些特殊名词:
    i. LVS(Linux Virtual Server Linux虚拟服务器):负载均衡开源软件,主要用于四层负载均衡的搭建。
    ii. VIP(Virtual IP 虚拟 IP):相对于直接与物理网卡绑定的 IP,VIP 是在内网通过 ARP 协议动态映射到某个 MAC 地址上,可以映射到不同的机器上
    iii. RS(Real Server) 后端真实机器,RSIP 则是真实机器的 IP


用户通过 DNS 查询得到 VIP 地址,将请求发送给 VIP, 流量就这么到了 LVS 集群0, 再根据 IP+Port 规则将流量打给对应的 RS。
上图中的 LVS 集群1 为 LVS 集群0 的灾备,在集群0故障的情况下,可以通过改变 VIP 映射将流量打到 集群1。

  1. 七层负载均衡
    而在七层负载均衡中,和四层的区别在于,代理集群一般是 NGINX 集群或者 Tengine 集群,因为工作在应用层,负载均衡规则一般是根据请求域名、请求 URL 这类应用信息。


七层负载均衡和四层还有个重要区别是,因为需要得到数据报文的应用层信息,所以负载均衡设备需要和客户端建立连接,拿到规则需要的应用层信息后,再与后端真实机器建立连接,再进行请求。所以四层是只有一个独立连接,而七层是两个独立连接。

高可用负载均衡

对于大公司而言,单一的负载均衡方案已经满足不了需要了,基本都是通过DNS + 四层 + 七层三个全都要!


相关文章