首页 > 系统相关 >LVS/Nginx/HAProxy原理及应用场景介绍

LVS/Nginx/HAProxy原理及应用场景介绍

时间:2023-04-13 10:32:43浏览次数:42  
标签:HAProxy 负载 LVS Nginx 均衡 服务器 数据包

负载均衡已经发展成为网络架构中的基础核心组件,消除了服务器单点故障,可以进行请求流量分流,提升冗余,保证服务器的稳定性。

在开源的软件负载均衡中,应用最为广泛的有LVS、Nginx、HAProxy,甚至阿里云的SLB也是基于LVS及Nginx的。本文就来阐述下LVS、Nginx、HAProxy的工作原理及应用场景。

LVS介绍

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。LVS工作在二层/三层/四层最底层,仅作分发之用,对CPU和内存消耗极低,抗负载能力极强。所以它几乎可以对所有应用做负载均衡,包括HTTP、数据库、在线聊天室等,并且LVS的3种工作模式、10种调度算法使其在负载均衡端有更灵活的策略选择.

LVS主要由IPVS和Ipvsadm实现

IPVS:是LVS集群系统的核心部分,是基于Linux Netfilter框架实现的一个内核模块,主要工作于内核空间的INPUT链上。其钩子函数分别HOOK在LOCAL_IN和FORWARD两个HOOK点。

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡

IPVS是直接作用在内核空间进行数据包的修改及转发的。而Nginx/HAProxy作用在用户空间,这使得LVS的性能更强。

Ipvsadm:工作在用户空间,主要用于用户定义和管理集群服务的工具。所以实际在安装配置LVS时,主要是安装配置Ipvsadm。

LVS原理架构

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡_02

①访问请求首先经过VIP到达负载调度器的内核空间。

②PREROUTING链在接收到用户请求后,会判断目标IP,确定是本机IP,将数据包发往INPUT链。

③当用户请求到达INPUT时,IPVS会将用户请求和Ipvsadm定义好的规则进行对比。如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包,并将新的数据包发往POSTROUTING链。

④POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,最终将数据包发送给后端的服务器。

LVS三种工作模式

LVS/Nginx/HAProxy原理及应用场景介绍_Nginx_03

下面使用的缩写示意:CIP-客户端IP地址;VIP-负载均衡发布供用户请求的IP;DIP-负载均衡IP主要与后端服务器呼吸通信;RIP-后端服务器的IP地址。

LVS二层DR模式原理

LVS/Nginx/HAProxy原理及应用场景介绍_Nginx_04

LVS DR模式数据包流向

①客户端请求数据包报文的源地址是CIP,目标地址是VIP。

②负载均衡会将客户端请求数据包报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给后端服务器。这里要求所有后端服务器和负载均衡所在服务器只能在一个VLAN(局域网)里面,即不能跨VLAN

③后端服务器发现请求数据包报文中的目的MAC是自己,会将数据包报文接收下来。由于数据包的MAC地址被修改,因此后端服务器需要在lo网口绑定VIP。处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

LVS三层IPTunnel模式原理

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡_05

LVS IPTunnel模式数据包流向

①客户端请求数据包报文的源地址是CIP,目标地址是VIP。

②负载均衡将客户端请求数据包报文首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此数据包发送给后端服务器。与二层负载均衡不同的是,能跨VLAN。但三层负载均衡原理导致在后端服务器中不能直接获取客户端的源IP地址。

③后端服务器收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口发送给eth0网卡直接发送给客户端。

LVS四层NAT模式原理

LVS/Nginx/HAProxy原理及应用场景介绍_Nginx_06

LVS NAT模式数据包流向

①客户端请求数据包报文的源地址是CIP,目标地址是VIP。

②负载均衡将客户端请求数据包报文的目标地址改为RIP地址,并将此数据包发送给后端服务器。同样要求所有的后端服务器和负载均衡所在服务器只能在一个VLAN(局域网)里面,即不能跨VLAN。

③报文送到后端服务器后,目标服务器会响应该请求,并将响应数据包报文返还给负载均衡。每台内部的后端服务器的网关地址必须是负载均衡所在服务器的内网地址,即要配置SNAT,这样数据包才能经过LVS返回给客户端。

④然后负载均衡将此数据包报文的源地址修改为本机并发送给客户端。

LVS的DR模式、NAT模式对数据包的处理都仅做“一次连接”,即负载均衡对数据包仅做转发。

LVS/Nginx/HAProxy原理及应用场景介绍_Nginx_07

LVS能够做到“一次连接”的本质原因是LVS工作在内核空间LVS3种模式都是工作在内核空间,数据包的处理也仅在内核空间,这也是LVS轻量高效、高性能的最为本质的原因。

LVS应用场景
  • LVS适合应用在中大型应用中,不适合中小型应用,特别是中小型网站的应用。这是因为我们部署的网站一般都会有虚拟主机、动静分离、正则分发的需求。一般使用Nginx就能直接实现。
  • 云端ECS不支持LVS的部署,所以对二层/三层/四层负载均衡需求,只能使用云产品SLB的四层负载均衡功能替代,或者自行部署Nginx/HAProxy。
  • LVS不支持七层的虚拟主机、Rewrite正则表达式处理、动静分离等功能。而现在许多Web网站在这方面已有较强的需求,这是Nginx/HAPrxoy的优势所在。

Nginx/HAProxy介绍

Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占用内存少、并发能力强,加上丰富的插件功能模块,当前是云端Web类应用中首选的一款软件。

HAProxy是一个使用C语言编写的自由及开放源代码软件,是一款主要作用在七层HTTP和四层TCP上的负载均衡软件。和LVS一样,主要是一个专业级的负载均衡。

Nginx/HAProxy四层模式原理

LVS/Nginx/HAProxy原理及应用场景介绍_Nginx_08

四层负载均衡Nginx/HAProxy数据包走向原理

①客户端请求数据包报文的源地址是CIP,访问目标地址是DIP+IP端口。

②负载均衡和后端服务器发起新的TCP三次握手,建立新的TCP连接。报文的源地址是DIP,目标地址是RIP。

③报文发送到后端服务器后,服务器响应该请求,并将响应数据包报文返还给负载均衡。

④然后负载均衡将此数据包报文的响应内容进行重新打包并返回给客户端。

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡_09

Nginx/HAProxy四层三次握手数据包走向

客户端在向负载均衡进行TCP三次握手后,负载均衡会马上发起新的TCP连接,即为“二次连接”。

Nginx/HAProxy七层模式原理

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡_10

七层负载均衡Nginx/HAProxy数据包走向原理

①客户端请求数据包报文的源地址是CIP,访问目标地址是DIP+IP端口+URL。

②负载均衡和后端服务器发起新的TCP三次握手,建立新的TCP连接。报文的源地址是DIP,目标地址是RIP,并且还有客户端请求的目标URL。

③报文发送到后端服务器后,服务器响应该请求,并将响应数据包报文返还给负载均衡。

④然后负载均衡将此数据包报文的响应内容进行重新打包并返回给客户端。

LVS/Nginx/HAProxy原理及应用场景介绍_负载均衡_11

Nginx/HAProxy七层的二次连接,在客户端和负载均衡进行TCP三次握手后,还需要等客户端Pushdata传输数据,之后负载均衡和后端服务器才会建立新的TCP三次握手。

Nginx应用场景
  • 可以做七层HTTP的负载均衡,可以针对HTTP应用做一些分流的策略,比如针对域名、请求的URL、目录结构、请求的浏览器类型,它的正则规则比HAProxy更为强大和灵活。
  • Nginx相比于HAProxy,Nginx在七层对会话保持的功能就弱了些,Nginx默认只支持通过配置ip_hash。可以通过nginx-sticky-module模块来增强。对后端服务器的健康检查,只支持通过端口来监测,不支持通过URL来监测。
  • Nginx从1.9.0版本开始,Nginx支持对四层TCP的负载均衡功能。
  • Nginx也是功能强大的Web应用服务器。LNMP也是近几年非常流行的Web架构,在高流量的环境中稳定性也很好。
  • Nginx现在作为Web反向加速静态缓存越来越成熟,Nginx也可作为静态网页和图片服务器。其速度比传统的Squid服务器更快,基本上CDN在底层静态缓存服务器的选择。
HAProxy应用场景
  • HAProxy是一款专注在七层/四层的软负载均衡软件,但相比于Nginx少了相应的Web服务器、静态缓存、丰富的第三方插件等功能。
  • HAProxy支持源地址HASH、Cookie识别、基于Session不同策略方式来满足会话保持。同时在健康检查中,支持通过获取指定的URL来检测后端服务器的状态。
  • 在云端实践中,基本很少使用,七层/四层负载均衡都可以用云产品SLB和Nginx来完成。

云端负载均衡选择

阿里云SLB(Server Load Balancer)当前提供四层(TCP协议和UDP协议)和七层(HTTP和HTTPS协议)的负载均衡服务。

四层采用开源软件LVS(Linux Virtual Server)+Keepalived的方式实现负载均衡,并根据云计算需求对其进行了个性化定制。

七层采用Tengine实现负载均衡。Tengine是由淘宝网发起的Web服务器项目,在Nginx的基础上,针对有大访问量的网站需求添加了很多高级功能和特性。

在云端实践中,对负载均衡的选择肯定优先采用云厂商提供的SLB或者主流硬件负载均衡厂商在云中提供的软负载均衡产品(性能会更出色功能更丰富)。

在具体实际应用中,若对七层有Rewrite的需求,或者对四层有更多调度算法等的需求,这时候SLB的功能暂时达不到要求,可能需要在ECS上搭建Nginx/HAProxy四层/七层负载均衡。

在云端实践中,SLB的四层/七层基本上满足日常80%的需求。所以云端负载均衡的选型,基本上也就是云端负载均衡SLB的选型

  • 在TCP类服务中,对于负载均衡,我们只能选择四层负载均衡。
  • 在HTTP类的Web服务中,既能选择四层也能选择七层。这事实上,在80%的企业级HTTP负载均衡应用中,只有单纯转发的功能,没有对虚拟主机的转发需求。这里优先选四层因为四层在性能方面更加强悍,在应用入口采用四层负载均衡进行分流是标准且成熟的企业级架构。
  • 如果需要前端SLB挂证书SSL,也就是HTTPS,那么只能选择七层负载均衡。若有高流量高并发的场景还是建议前端采用四层负载均衡,证书放在后端ECS中的Nginx进行配置,这样可以保证性能。

标签:HAProxy,负载,LVS,Nginx,均衡,服务器,数据包
From: https://blog.51cto.com/key3feng/6183945

相关文章

  • Nginx常用命令
    nginx-cfilename 设置配置文件(nginx-c/conf/nginx.conf)nginx-sreload 重新加载Nginx配置文件,然后以优雅的方式重启Nginxnginx-sreopen 重启Nginxnginx-sstop 强制停止Nginx服务nginx-squit 优雅地停止Nginx服务(即处理完所有请求后再停止服务)nginx-t 检测配置文件是......
  • Nginx负载均衡
    Nginx的五大负载均衡算法 1、轮询策略轮询方式是Nginx负载默认的方式,顾名思义,所有请求都按照时间顺序分配到不同的服务上,如果服务Down掉,可以自动剔除,如下配置后轮训10001服务和10002服务。upstreamdalaoyang-server{serverlocalhost:10001;serverloc......
  • [nginx]日志中记录自定义请求头
    前言假设在请求中自定义了一个请求头,key为"version",参数值为“1.2.3”,需要在日志中捕获这个请求头。nginx日志配置只需要用变量http_version就能捕获到自定义的version请求头。示例:log_formatmain'{"@timestamp":"$time_iso8601",' '"connection":"$connection&q......
  • 四月学习之LVS基本概述
    一、LVS基本概述1、什么是LVSLVS的英文全称是linuxvirtualserver,即linux虚拟服务器,其实它是一种cluster集群技术,主要用于负载均衡,将用户请求均匀的调度到不同的服务器上执行注意:LVS是基于四层IP:PROT的负载均衡2、为何需要LVS1、解决七层端口数不够问题,实现百万连接2、解......
  • 提防坏人:Nginx 拒绝指定IP访问
    导读闲来无事,登陆服务器,发现有个IP不断的猜测路径、试图往服务器上传文件(木马)。于是查看了之前的日志,无奈鄙站被攻击者盯上了,不断的有不同的IP试图上传木马。看来坏人还是有的。由于不想让鄙站沦为肉鸡,所以就想写个简单的脚本,来阻止攻击者的IP访问。攻击者:195.154.216.1......
  • nginx+tomcat双端口实现负载均衡
    nginx基础配置---点击tomcat基础配置---点击上述配置完成之后进行对tomcat配置不同端口tomcat设置端口#移动tomcat设置两个主目录[root@lyxlocal]#mvapache-tomcat-8.5.79tomcat-home[root@lyxlocal]#cp-Rtomcat-hometomcat-8080[root@lyxlocal]#cp-Rtomcat-home......
  • NGINX进一步学习
    神器Nginx的学习手册(建议收藏)运维网工 2023-04-0709:00 发表于重庆收录于合集#Nginx学习手册1个#安全运维5个#运维工程师109个来源:DevOps技术栈大家好,我是中文妹。Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强,事实上Nginx......
  • nginx中的proxy_pass配置
    Nginx是最常用的反向代理工具之一,一个指令proxy_pass搞定反向代理。对于接口代理、负载均衡很是实用,但proxy_pass指令后面的参数很有讲究,通常一个/都可能引发一个血案。通常nginx配置proxy_pass指令时,如果proxy_pass后面的url加/,表示绝对根路径;如果没有/,表示相对路径,把匹配......
  • Linux&Nginx16_Nginx负载均衡7
    一、概念在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,但是,我们网站对外提供的访问入口通常只有一个,比如www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将......
  • 快速把Nginx安装为Windows服务,把软件加入系统服务自动启动方法windows下
    用nssm软件下载地址:https://nssm.cc/download 首先介绍一个NSSM这个小工具,将exe做成系统服务,非常方便实用。官网:NSSM-theNon-SuckingServiceManager直接下载:nssm-2-24NSSM是一个服务封装程序,它可以将普通exe程序封装成服务,使之像windows服务一样运行。同类型的工具还......