白金会娱乐

一文详解 LVS、Nginx 及 HAProxy 工作原理( 附大图 )

白金会bjh88

目前,大多数Internet系统使用服务器集群技术。群集在多个服务器上部署相同的服务以形成群集以提供外部服务。这些群集可以是Web应用程序服务器群集或数据库服务器群集是分布式缓存服务器集群等。

86d82b186aec481d96bfd73595a16168

在实际应用中,Web服务器集群之前总会有一个负载均衡服务器。负载均衡设备的任务是充当Web服务器流量的门户,选择最合适的Web服务器,并将客户端的请求转发给它进行处理。从客户端到真实服务器的透明转发。

近年来,非常流行的“云计算”和分布式架构本质上使用后端服务器作为计算资源和存储资源,并且由管理服务器封装到服务中。客户不需要关心真正的服务。它是哪台机器,它似乎面临着几乎无限能力的服务器,实质上,真正的服务是后端集群。

LVS,Nginx和HAProxy是三种使用最广泛的软件负载平衡软件。

负载均衡的一般用途是随着网站规模的增加,根据不同的阶段使用不同的技术。必须具体分析具体的应用要求。如果它是一个中小型的Web应用程序,例如每日PV小于1000万,可以完全使用Nginx;如果有很多机器,可以使用DNS轮询,LVS会消耗更多的机器。如果您有大型网站或重要服务,并且您拥有大量服务器,则可以考虑使用LVS。

目前,架构方案通常合理且流行:网络前端采用Nginx/HAProxy + Keepalived作为负载均衡器;后端采用MySQ L数据库,与主读/写和读写分开,采用LVS + Keepalived架构。

LVS

LVS是Linux Virtual Server的缩写,Linux Virtual Server是一个Linux虚拟服务器。现在LVS已经是Linux标准内核的一部分。从Linux 2.4内核开始,LVS的各种功能模块已经完全内置。无需修补任何内核,可以直接使用LVS提供的各种功能。

自1998年以来,LVS已发展成为一个相对成熟的技术项目。

LVS架构

877bc3b599724178982851824a50c150

LVS构建的服务器集群系统由三部分组成:

(1)前端负载均衡层,由Load Balancer

表示

(2)中间服务器集群层,由服务器阵列

表示

(3)最下面的数据共享存储层,由Shared Storage

表示

LVS负载均衡机制

LVS不适用于像HAProxy这样的七层软加载等HTTP数据包,因此七层加载可以进行URL解析等等,LVS无法完成。

LVS是一个四层负载均衡,它建立在OSI模型的第四层传输层上。我们在传输层上有熟悉的TCP/UDP。 LVS支持TCP/UDP负载平衡。由于LVS是一种四层负载均衡解决方案,因此与其他高级负载均衡解决方案相比,它非常有效,例如DNS域名轮换解析,应用层负载调度,客户端调度等。

所谓的四层负载均衡,即主要通过消息中的目标地址和端口。七层负载平衡,也称为“内容交换”,主要是通过在消息中应用真正有意义的应用层内容。

52790e154f71459283d767ea86c4f8bd

LVS转发主要通过修改IP地址(NAT模式,通过修改SNAT和目的地址来修改DNAT来定义)和修改目标MAC(DR模式)来实现。

NAT模式:网络地址转换

NAT(网络地址转换)是一种用于映射外部网络和内部网地址的技术。

在NAT模式下,传入和传出网络数据报由LVS处理。 LVS需要成为RS(真实服务器)的网关。

当分组到达LVS时,LVS执行目的地地址转换(DNAT)并将目的地IP改变为RS的IP。 RS收到数据包后,似乎是由客户端直接发送给它的。处理RS后,当返回响应时,源IP是RS IP,目标IP是客户端的IP。此时,RS分组通过网关(LVS)转换。 LVS将执行源地址转换(SNAT)并将数据包的源地址更改为VIP。因此,数据包会向客户端查找,就像LVS直接返回它一样。

b5238d36d4c54c7c8ae59357f6753389

DR模式:直接路由

在DR模式下,LVS和RS群集需要绑定到同一个VIP(RS必须通过VIP环回),但与NAT的区别在于LVS接受请求并且直接由服务器(RealServer,RS)接受提供服务。返回给用户,不经过LVS返回。

详细地,当请求进入时,LVS仅需要将网络帧的MAC地址修改为某个RS的MAC,并且该分组将被转发到相应的RS处理。请注意,此时不存在源IP和目标IP。改变,LVS刚刚采取行动。当RS接收到LVS转发的分组时,链路层发现MAC是它自己的。在上面的网络层,它发现IP也是它自己的。因此,该分组是合法接受的,并且RS不会感知到LVS的存在。当RS返回响应时,它可以简单地返回到源IP(即用户的IP)并且不再通过LVS。

f166e097d5da46da99763dc5e350808a

在DR负载均衡模式的数据分发过程中,不修改IP地址。仅修改了mac地址。由于实际物理IP地址和数据请求目标IP地址相同,因此不需要通过负载平衡服务器进行地址转换。该软件包直接返回给用户的浏览器,避免了负载均衡服务器NIC带宽成为瓶颈。因此,DR模式具有更好的性能,并且是目前用于大型网站的最广泛使用的负载平衡方法。

LVS的优点

它具有很强的抗负载能力,仅用于传输层的分配,没有流量。此功能还决定了其在负载平衡软件和低内存和CPU资源方面的最强性能。可配置性差,这是一个缺点和优势,因为没有太多的配置,所以不需要太多的联系,大大减少了人为错误的机会。工作稳定,因为它非常耐负载,并且具有完整的双系统热备份解决方案,例如LVS + Keepalived。没有流量,LVS仅分发请求,流量不会自行消失,这可确保均衡器IO的性能不受大流量的影响。应用程序范围很广,因为LVS在传输层工作,因此它几乎可以对所有应用程序进行负载平衡,包括http,数据库,在线聊天室等。

LVS的缺点

软件本身不支持正则表达式处理,也不能进行静态分离。现在很多网站都在这方面有很强的需求。这是Nginx,HAProxy + Keepalived的优势。如果网站应用程序相对较大,则LVS/DR + Keepalived实施起来会更加复杂。相对而言,Nginx/HAProxy + Keepalived更简单。

nginx的

Nginx是一个功能强大的Web服务器软件,用于处理高度并发的HTTP请求并将负载平衡作为反向代理服务器。高性能,轻量级,低内存消耗和强大的负载平衡功能。

977f0f1a0ab6469a94000731cbf8e9f7

Nignx的建筑设计

与传统流程或基于线程的模型(Apache使用此模型)相比,在处理并发连接时会为每个连接创建单独的流程或线程,并在网络或输入/输出操作期间阻塞。这将导致大量内存和CPU消耗,因为新进程或线程需要准备新的运行时环境,包括堆和堆栈内存的分配,以及新的执行上下文。当然,这些也会导致冗余的CPU。高架。最终,由于过多的上下文切换,服务器性能将降低。

反过来,Nginx的架构设计是模块化的,事件驱动的,异步的,单线程的和非阻塞的。

Nginx广泛使用多路复用和事件通知。在Nginx启动后,它作为系统中的守护程序在后台运行,包括主进程,n(n>=1)个工作进程。所有进程都是单线程的(即只有一个主线程),进程间通信主要使用共享内存。

主进程用于接收来自外界的信号,并在监视工作进程的工作状态的同时向工作进程发送信号。工作进程是外部请求的真实处理器,每个工作者请求都是独立的,并且与客户端的请求相同。请求只能在一个工作进程中处理,而一个工作进程只有一个主线程,因此一次只能处理一个请求。 (原理与Netty非常相似)

e7c5d9b1aac84963b632a7493d8e6cce

Nginx负载平衡

Nginx负载均衡主要支持七层网络通信模型中第七层应用层的http和https。

Nginx以反向代理方式进行负载平衡。反向代理方法是指代理服务器在因特网上接受连接请求,然后将请求转发到内部网络上的服务器,并将从服务器获得的结果返回给请求在因特网上连接的客户端。此时,代理服务器在外部充当服务器。

Nginx有很多负载均衡分配策略。 Nginx的上游目前支持以下方法:

轮询(默认):按时间顺序逐个将每个请求分配给不同的后端服务器。如果后端服务器已关闭,则可以自动将其剔除。权重:指定轮询概率。权重与访问比率成比例,用于后端服务器的性能。 Ip_hash:每个请求都由access ip的哈希结果分配,这样每个访问者都可以固定访问后端服务器,这可以解决会话的问题。公平(第三方):根据后端服务器的响应时间分配请求,并且很快分配响应时间。 Url_hash(第三方):通过访问URL的哈希结果分配请求,将每个URL指向同一后端服务器,这对缓存更有效。

Nginx的优点

跨平台:Nginx可以在大多数类似操作系统的Unix上编译和运行,并且还有一些移植版本的Windows配置非常简单:非常易于使用。配置样式与程序开发相同。一般配置是非阻塞和高并发连接:官方测试可以支持50,000个并发连接,并在实际生产环境中运行20,000到30,000个并发连接事件。通信机制采用epoll模型。支持与Master/Worker结构的更大并发连接:生成一个或多个具有低内存消耗的工作进程的主进程:处理大型并发请求的内存消耗的内存非常少。在30,000个并发连接下,打开的10个Nginx进程消耗150M内存(15M * 10=150M)。内置运行状况检查功能:如果Nginx代理后端的Web服务器关闭,则不会影响前端访问保存。带宽:支持GZIP压缩,可以添加到浏览器本地缓存的标头非常稳定:对于反向代理,停机的可能性很小

Nginx的缺点

Nginx只能支持http,https和Email协议,因此范围较小。这是它的缺点。它检查后端服务器的运行状况。它仅支持通过端口进行检测。它不支持你的检测。不支持直接保持Session,但可以通过ip_hash

解决

HAProxy的

HAProxy支持两种代理模式,TCP(四层)和HTTP(七层),它们也支持虚拟主机。

HAProxy的优点可以补充Nginx的一些缺点,例如支持会话持久性,cookie启动以及通过获取指定的URL来检测后端服务器状态的支持。

与LVS类似,HAProxy只是一个负载均衡软件;在效率方面,HAProxy将具有比Nginx更好的负载平衡速度,并且在并发处理方面优于Nginx。

HAProxy支持TCP协议的负载均衡和转发。它可以负载平衡MySQL读取和检测并负载平衡后端MySQL节点。您可以使用LVS + Keepalived来平衡MySQL主服务器和从服务器。

有许多HAProxy负载平衡策略:循环,权重循环,源(原始地址保持),RI(请求URL)和rdp-cookie(基于cookie)。

参考:

钟武

https://zhongwuzw.github.io

王晨春

http://www.importnew.com/11229.html

周旭龙

http://edisonchou.cnblogs.com

原文:http://www.sohu.com/a/233936157_262549