![c4be6f458c7f9f4ddd3ffdbde7601300.png](https://i-blog.csdnimg.cn/blog_migrate/4995d007e1ef16345367984774c5978c.jpeg)
为什么需要负载均衡
一个网站在创建初期,一般来说都是只有一台服务器对用户提供服务。
![80379fac38cf698c8285ef6371726abc.png](https://i-blog.csdnimg.cn/blog_migrate/57f774ff3af43d7313491c2d08326257.jpeg)
从图里可以看出,用户经过互联网直接连接了后端服务器,如果这台服务器什么时候突然 GG 了,用户将无法访问这个网站(单点故障)。
另外业务上升,用户增加,单台服务性能和稳定性都会受到很大的挑战。
![b24dc3dbe945a0136bddd851e8f0af67.png](https://i-blog.csdnimg.cn/blog_migrate/7b12fc62d0f04cd1c86288dd525c7590.jpeg)
那么要怎么办呢?加机器!扩容!不差钱!
加机器
既然一台服务器不够用,那么就两台,如果还不行,就三台。
![5352ac76e441b01dc709fc00dcf680dc.png](https://i-blog.csdnimg.cn/blog_migrate/654eb5b442c13e95c7b1be3e7191b3eb.jpeg)
这样我们就有了很多台机器了,足够应付用户的请求了。
在这里,我们把用户的访问流量称为负载,而根据转发策略(rules)将负载(访问流量)分配给后端机器的服务便是负载均衡
![fee8f2a3ed0a8d72096f9b7df61e323f.png](https://i-blog.csdnimg.cn/blog_migrate/e3aedf0f5bebf814c5a9307ff35a4685.jpeg)
怎么『均衡』
现在我们研究下怎么『均衡』地给服务器分配访问流量了
- DNS 负载均衡
因为用户在访问我们的服务的时候,需要通过 DNS 查询后端服务器的具体 IP,得益于智能 DNS 之类的新技术方案,我们可以在 DNS 解析的时候,通过线路、地域之类的规则针对性地返回不同的 IP。
![4e9c91732ac1bcadd70f294dbdf8bc8f.png](https://i-blog.csdnimg.cn/blog_migrate/da217ead123ad660351acecdf134366e.jpeg)
DNS 负载均衡通过用户 IP 进行判断,可以按规则返回一个离用户位置最近的一台服务器作为解析结果,一定程序上保证了服务的速度。所以,CDN 服务一般会使用这个作为第一层调度,保证用户请求的缓存节点一定是最近的。
BUT! 由于 DNS 服务一般是由第三方服务商提供,虽说我们可以配置规则,但我们实际上并不能获知用户拿到的 DNS 解析结果是否符合预期;而我们在增减服务器的时候,需要变更 DNS 配置,各级 DNS 服务器缓存及更新策略并不能达到及时变更的效果。
- 四层负载均衡
四层负载均衡工作在运输层,所以只支持 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
![e623a3e0d9ba349827780ae7744f6425.png](https://i-blog.csdnimg.cn/blog_migrate/ee76ea2cf04a38b04c8f5c028ce660c5.jpeg)
用户通过 DNS 查询得到 VIP 地址,将请求发送给 VIP, 流量就这么到了 LVS 集群0, 再根据 IP+Port 规则将流量打给对应的 RS。
上图中的 LVS 集群1 为 LVS 集群0 的灾备,在集群0故障的情况下,可以通过改变 VIP 映射将流量打到 集群1。
- 七层负载均衡
而在七层负载均衡中,和四层的区别在于,代理集群一般是 NGINX 集群或者 Tengine 集群,因为工作在应用层,负载均衡规则一般是根据请求域名、请求 URL 这类应用信息。
![0c33b8603be63c41c86b19dbc7ccd6c0.png](https://i-blog.csdnimg.cn/blog_migrate/d7f3c81d51c680c44ceca56aaf8f12c9.jpeg)
七层负载均衡和四层还有个重要区别是,因为需要得到数据报文的应用层信息,所以负载均衡设备需要和客户端建立连接,拿到规则需要的应用层信息后,再与后端真实机器建立连接,再进行请求。所以四层是只有一个独立连接,而七层是两个独立连接。
高可用负载均衡
对于大公司而言,单一的负载均衡方案已经满足不了需要了,基本都是通过DNS + 四层 + 七层三个全都要!
![4fddfd1912597352bcbdeb36b073a3ae.png](https://i-blog.csdnimg.cn/blog_migrate/00759cbc0918fe8e433350f2b6e544f3.jpeg)