LVS+Keepalived+Nginx高可用负载均衡方案

版权声明:原创文章,转载请保留此声明,谢绝商业用途Copy。 https://blog.csdn.net/prufeng/article/details/80952464

负载均衡的基本思想是把单台服务器的访问分流到多台服务器,避免系统崩溃。以下是几种常见的解决方案。

1. Nginx反向代理

Nginx通过反向代理技术实现分流,可以按照设定的访问规则将请求转发给相应的后台服务器。
反向代理是指当用户访问网络上某个服务的时候,访问到的实际上是代理服务器,代理服务器转发用户请求到真正处理该业务的后台服务器,最后转发结果回来给用户。后台服务器被代理了,对用户不可见。
相比较的,正向代理则是指我们通常的翻墙过程。用户访问代理服务器,代理服务器转发请求给目标服务器,目标服务器返回结果给代理服务器,再转发回给用户。用户被代理了,对目标服务器不可见。
Nginx支持几种常见的负载调度算法:轮询、加权轮询、ip hash、fair、url hash。一致性哈希算法可保证同一个IP的请求落在同一台后端服务器,其他算法须解决不同服务器的Session共享问题。
Nginx支持健康检查,实现后端服务器的自动上下线,可以提高系统的请求成功率。如果一个服务器请求失败,可立即切换到其他服务器,直到请求成功或者最后一台服务器失败为止。

2. Keepalived+Nginx实现双机热备

当使用一台Nginx作为反向代理服务器时,这台服务器就变得异常重要,须避免出现单点故障。Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障。
使用Keepalived可以轻量级地实现Nginx的双机热备。即前端使用两台服务器,当其中一台服务器发生故障时,另一台服务器接管故障机的公网虚拟IP,继续提供负载均衡服务。

3. LVS+Keepalived+Nginx增加吞吐量和稳定性

Nginx的请求转发是基于HTTP层的,所有流量都要经过Nginx。当后端服务器规模庞大时,Nginx的网络带宽就会成为一个瓶颈。
这时可引入LVS负责第一层负载,通过LVS将请求路由到后端若干台Nginx上,Nginx再转发给内部其中一台应用服务器进行处理,最后Nginx直接将结果转发给用户,无需再经过LVS服务器。
以上过程实际上用到的是LVS/DR(Linux Virtual Server via Direct Routing)技术,它通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。
LVS还提供的另外两种IP负载均衡技术是:VS/NAT(Virtual Server via Network Address Translation)和VS/TUN(Virtual Server via IP Tunneling)。
LVS通过MAC地址改写和网络地址转换等方式来同步转发请求,主要是基于网络层和链路层,因而效率非常高。
引入LVS后,Nginx变成了集群,Keepalived主要用来保证LVS的高可用,建立LVS双机热备。LVS 可以对后端Nginx进行健康检查(不能重新发送请求)。LVS也支持多种负载调度算法,如:RR, WRR, LC, WLC, LBLC, LBLCR, DH, SH。

4. DNS和CDN网络优化

DNS(Domain Name System)中一个域名可对应多个IP,因而可通过DNS轮询来实现负载均衡。同时DNS智能解释可保证返回给用户的IP离用户尽可能的近。
还可以进一步按照业务系统拆分二级域名,对于每一个业务系统建立独立的负载均衡层。
CDN(Content Delivery Network)主要用于缓存图片、多媒体文件等各种静态文件资源。将这些静态资源保存到离用户更近的各个网络节点,可以大大提高用户访问效率和节省服务器外网出口带宽。

猜你喜欢

转载自blog.csdn.net/prufeng/article/details/80952464