一文理清负载均衡(nginx,LVS)的工作原理

2023-06-16 0 658

依照体量的提高在相同的期须要选用相同的控制技术和构架,具体内容的市场需求须要对症下药,假如是较小型的 Web 应用领域。

日活耀大于 1000 万,选用 nginx就能全然满足用户了;小型中文网站或关键的服务项目,因此服务项目较为多时,就能考量选用LVS

Nginx

Nginx (“engine x”) 是两个高效能的 HTTP 和 逆向代理 服务项目器,也是两个 IMAP/POP3/SMTP 服务项目器端。

Nginx 特征是占据缓存少,mammalian潜能强,nginx 的mammalian潜能在同类型的页面服务项目器中整体表现良好。

Nginx 的单纯构架:

一文理清负载均衡(nginx,LVS)的工作原理

Nginx 的体系结构

Nginx 的体系结构选用的是模组化的,如前所述设计模式、触发器、Renderscript且非堵塞(epoll 数学模型)

Nginx 选用数据通信和该事件通告,Nginx 开启后,在前台以 daemon 的形式在控制系统中运转,当中会主要就包括两个主(master)民主化,n(n≥1)个组织工作(worker)民主化。

大部份的民主化都是Renderscript(即多于两个主旋律程)的,民主化协同组织工作主要就选用K47A的形式。

当中,master 民主化用作转交内部的允诺,推送讯号给 worker 民主化,与此同时监视 worker 民主化的组织工作状况。

worker 民主化用以处置内部允诺关键信息,允诺根本无法在两个 worker 民主化中被处置,两个 worker 民主化多于两个主旋律程,与此同时根本无法处置两个允诺。

Nginx 阻抗平衡

Nginx 阻抗平衡是对七层网络通信数学模型中的应用领域层(HTTP,HTTPS)进行的。

Nginx 是以逆向代理的形式进行阻抗平衡

逆向代理:是以服务项目器端来转交用户的允诺,然后将允诺发给内部网络上的服务项目器,并将服务项目器上的结果返回给允诺的客户端,此时服务项目器端就是两个服务项目器。阻抗平衡:就是将这些客户端的允诺按照某种策略分摊到前台多台服务项目器上面,进行处置。

Nginx 的 upstream 目前支持 6 种算法分配形式:

一文理清负载均衡(nginx,LVS)的工作原理

轮询

最基本的配置方法,它是 upstream 模块默认的阻抗平衡默认策略。每个允诺会按时间顺序逐一分配到相同的后端服务项目器。

有如下参数:

一文理清负载均衡(nginx,LVS)的工作原理

在 30 秒内错误次数超过 2 次,就认为服务项目器已经不能访问了,下次就不会访问该机器

server 10.168.226.1:8080 max_fails=2 fail_timeout=30s;

server 10.168.226.2:8080 max_fails=2 fail_timeout=30s;

weight

权重形式,在轮询策略的基础上指定轮询的几率

server 10.168.226.1:8080 weight=1 ;

server 10.168.226.2:8080 weight=2;

注意:

权重越高分配到须要处置的允诺越多。此策略较为适合服务项目器的硬件配置差别较为大的情况。

ip_hash

指定阻抗平衡器按照如前所述客户端 IP 的分配形式,这个方法确保了相同的客户端的允诺一直推送到相同的服务项目器,以保证 session 会话。

这样每个访客都固定访问两个后端服务项目器,能解决 session 不能跨服务项目器的问题。

ip_hash; # 保证每个访客固定访问两个后端服务项目器

server 10.168.226.1:8080 weight=1 ;

server 10.168.226.2:8080 weight=2;

注意:

ip_hash在nginx1.3版本之后才有的 ip_hash不能与backup与此同时选用这种策略适合有状况服务项目,比如session 当有服务项目器须要剔除,必须手动down掉。

least_conn

把允诺转发给连接数较少的后端服务项目器,轮询算法是把允诺平均的转发给各个后端服,使它们的阻抗大致相同。

但是,有些允诺占用的时间很长,会导致所在的后端阻抗较高,这种情况下,least_conn这种形式就能达到更好的阻抗平衡效果least_conn;

server 10.168.226.1:8080 weight=1;

server 10.168.226.2:8080 weight=2;

注意:

这种阻抗平衡策略适合允诺处置时间长短不一致造成服务项目器过载的情况

第三方策略

第三方的阻抗平衡策略的实现须要安装第三方插件(upstream_fair)

fair安装服务项目器端响应时间来分配允诺,响应时间段的优先分配fair;server 10.168.226.1:8080 weight=1;

server 10.168.226.2:8080 weight=2;url_hash按访问 URL 的 hash 结果来分配允诺,是每个 URL 定向知道同两个后端服务项目器,要配合缓冲命中来选用同两个资源多次求,可能会到达相同的服务项目器上,导致不必要的多次下载,缓存命中率不高以及一些资源时间的浪费。而选用 url_hash,能使得同两个 URL 会到达同一台服务项目器,一段缓存了资源,再次允诺的时候,就能从缓存中读取,须要 hash 软件包hash $request_uri; # 实现每个 URL 定向到同两个后端服务项目器server 10.168.226.1:8080 weight=1;

server 10.168.226.2:8080 weight=2;

Nginx 的优点

跨平台:Nginx 能在 Linux 上编译运转,也能在 window 上运转配置单纯:直接能通过单纯修改配置文件,容易上手非堵塞、高mammalian:官网理论可以支持 5 万mammalian连接,在实际生产环境也能跑到 2-3 万的mammalian设计模式:选用 epoll 数学模型,支持更多的mammalian连接缓存消耗小:缓存和 CPU 占用率低。(为 Apache 的 1/5-1/10)内置健康检查:Nginx 代理的后端的某台服务项目器宕机了,会自动不访问该机器

Nginx 的缺点

Nginx 仅能支持 HTTP,HTTPS,tcp,email 等协议不支持直接保存 session,能通过 ip_hash 来支持

LVS

LVS 就是 Linux 虚拟(Virtual Server)服务项目器。从 Linux 内核 2.4 之后,内置了 LVS 的各个功能模块,就能直接 选用 LVS 提供的功能。

LVS 的体系构架

一文理清负载均衡(nginx,LVS)的工作原理

LVS 构架 的服务项目器集群控制系统有三个部分 组成:

最前端的阻抗平衡层,用 Load Balancer 表示中间的服务项目器集群层,用 Server Array 表示最底层的数据共享层,Shard storage 表示

阻抗平衡机制

LVS 是四层阻抗平衡,建立在 OSI 数学模型的第四层——传输层之上,传输层有 TCP/UDP,相对于其它高层阻抗平衡的方法,比如 DNS 域名轮询解析,应用层阻抗的调度,客户端的调度等,它的效率都非常高。

四层阻抗平衡:主要就通过报文中的目标地址和端口七层阻抗平衡:也称为“内容交换”,主要就通过报文中的 真正有意义的应用领域层内容。

LVS 的转发主要就通过修改 IP 地址(NAT 模式,分为源地址修改 SNAT 和目标地址修改 DNAT)、修改目标 MAC(DR 模式)来实现

LVS 相关术语

DS:Director Server。指的是前端阻抗平衡器节点。

RS:Real Server。后端真实的组织工作服务项目器。

VIP:向内部直接面向用户允诺,作为用户允诺的目标的 IP 地址。

DIP:Director Server IP,主要就用作和内部主机通讯的 IP 地址。

RIP:Real Server IP,后端服务项目器的 IP 地址。

CIP:Client IP,访问客户端的 IP 地址

NAT 模式:网络地址转换

NAT(network address transaction)是外网和内网地址映射的控制技术。

NAT 模式下,网络数据的进出都要经过 LVS 处置,LVS 须要作为真实服务项目器的网关。

一文理清负载均衡(nginx,LVS)的工作原理
当包允诺到 LVS 时,LVS 做目标地址转换(DNAT),将目标 IP 改为 RS 的 IP。RS 处置完,返回响应时,源 IP 是 RS IP,目标 IP 是客户端的 IP。RS 的包通过网关(LVS)中转,LVS 做源地址转换(SNAT),将包的源地址改为 VIP,这样,这个包对客户端来说就像是 LVS 直接返回给它的。

DR 模式:直接路由

DR 模式下须要 LVS 和 RS 集群绑定同两个 VIP,与 NAT 的相同点在于:

允诺由 LVS 接受,由真实提供服务项目的服务项目器(RS)直接发放给用户,返回的时候不经过 LVS。

一文理清负载均衡(nginx,LVS)的工作原理

两个允诺过程中,LVS 只须要将网络帧的 Mac 地址修改为某一台 RS 的 MAC,该允诺就去会被转发到响应的 RS 处置,此时的源 IP 和目标 IP 都没有变。

RS 收到 LVS 转发来的允诺时,链路层发现 Mac 地址是自己的,当上面的网络层,也发现 IP 是自己的,于是这个包被合法的接受,RS 感知不到前面有 RS 的存在。当 RS 返回响应时,只要直接向源 IP 返回即可,不再经过 LVS。

DR 阻抗平衡模式数据分发过程中不修改 IP 地址,只修改 Mac 地址,由于实际处置允诺的真实物理 IP 地址和 数据允诺目的 IP 地址一致,所以不须要通过阻抗平衡服务项目器进行地址转换,就能将响应数据直接返回给浏览器,避免服务项目器网卡带宽成为瓶颈。

DR 模式具有良好的性能,也是目前小型中文网站选用最广泛的一种阻抗平衡。

LVS 的优点

阻抗潜能强,工作在传输层上仅作为分发的作用,没有流量的产生,对缓存和 CPU 资源消耗较为低配置单纯,很容易上手组织工作稳定,有完整的双机热备方案,如:LVS+Keepalived无流量,LVS 只分发允诺应用领域范围较为广,LVS 组织工作在传输层,几乎能对大部份应用领域做阻抗平衡,主要就包括 HTTP,数据库

LVS 的缺点

软件本身不支持正则表达式,不能做动静方法分离中文网站应用领域较为庞大的话,LVS 实施起来较为复杂

本文作者:柠檬班软件

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务