博客
关于我
LVS四层负载均衡架构详解
阅读量:800 次
发布时间:2023-02-06

本文共 2697 字,大约阅读时间需要 8 分钟。

前言

LVS本身负载均衡为了在高访问中达到一个高可用以及高可靠

对于负载均衡有四层和七层

  • 四层的负载均衡(LVS),位于内核层,将其报文中的目标地址和端口调度
  • 七层的负载均衡(类似Nginx),位于应用层,将其报文内容进行调度。
    关于Nginx可看我这篇文章:

前沿知识

LVS(Linux Virtual Server):Linux虚拟服务器,一个虚拟的服务器集群系统,可以在UNIX平台下实现负载均衡的功能

对于负载均衡的功能:

  • 可用于访问高访问量的业务逻辑
  • 扩展应用程序(云服务器的实例可弹性扩容缩容)
  • 消除个别服务器故障的影响(对于个别实例故障,会自动屏蔽,分发的时候只分发给正常的服务器),实时屏蔽异常服务器来提高系统可用性
  • 高可用容灾(主分区故障,可在短时间内切换到备用分区。主分区修复之后可切回)
  • 跨区域容灾(不同区域发生故障,暂停对该区域访问。上层利用云解析做DNS解析到不同区域的服务器中)

LVS的应用场景:

  • 海量数据的自动分发、抵御(例如音视频场景)等
  • 动态静态数据的分发(动态数据过大可通过负载均衡,静态数据可用CDN分发)
  • 多层次多区域分发(使用负载均衡对访问流量或者区域进行分发)

LVS的基本术语:

名称 缩写 说明
虚拟IP地址(Virtual IP Address) VIP Director用客户端计算机提供服务的IP地址
真实IP地址(Real Server IP Address) RIP 集群节点下使用的真实IP地址
DirectorIP地址 DIP 用于连接内外网络的IP地址,物理网卡上的IP地址。负载均衡IP
客户主机IP地址(Client IP Address) CIP 请求服务端的IP地址,改地址用于发送给集群请求的源IP地址

主要的实现过程: IPVS集群服务(IP加端口)定义为后端服务发送给后端服务器

  • 用户通过CIP(客户端的请求IP地址)
  • Director IP层中生成一个虚拟的IP地址(此为VIP,通过这个虚拟IP地址到达负载均衡器)
  • 负载均衡器通过服务节点响应用户的请求数据(此为真实IP地址)
  • 配置LVS的时候,通过Keepalived软件直接管理IPVS,使用Ipvsadm

    • 真正实现LVS的调度工具主要在Linux中
    • LVS自带IPVS管理工具Ipvsadm
    • Keepalived实现管理工具IPVS以及负载均衡的高可用
    • Red Hat工具piranha web管理工具实现调度的工具IPVS

    工作模式

    LAN下多采用DR模式,WAN下可采用TUN(已被haproxy、nginx、dns取代)

    LVS该集群下主要有4种工作模式:

    工作模式 说明
    NAT(Network Address Translation) IP负载均衡技术通过网络地址转换(NAT)将一组服务器构成一个高可用高性能的虚拟服务器。
    TUN(Tunneling) 隧道实现虚拟服务器
    DR(Direct Routing) 直接路由实现虚拟服务器
    FULLNAT(Full Network Address Translation) 完全NAT

    NAT模式特性(调度器LB重写请求报文中的目标地址,根据调度,发送给真实服务器地址,之后返回调度器的原地址也被重写在返回给客户)

    • 请求的报文(DNAT改写),响应的报文(SNAT改写)。改写的这两部分数据通过调度器转发给内部服务器
    • 调度器配置公网IP,私网以及RS节点(需配置成调度器私有LAN的IP地址)
    • 支持IP以及端口的转换(DR和TUN模式不具备)
    • 请求以及响应需经过调度器,访问量过大,调度器有瓶颈(TUN对此改进)

    TUN模式特性(改进调度器的瓶颈能力):将其请求的报文通过IP隧道转发到真实服务器,处理完后将其数据返回给客户端

    调度器根据服务器的负载,动态选择服务器,将其报文数据封装再另一个IP报文转发到真实服务器。服务器解封为虚拟IP地址(该地址再IP隧道中)并且处理请求,根据路由表将其返回给客户

    • 调度器只处理入站请求,吞吐量可以提高10倍以上(该模式有开销)
    • LAN下使用TUN不如DR效率高

    DR模式(直接路由),更改目的MAC

    • 调度器修改目的MAC地址转发(源IP是客户端IP,目的IP是虚拟IP)
    • 访问量大效率高,不过配置麻烦(需求低的被nginx替代)
    • 调度器无法改变报文目的地址

    三种模式的比较:

    大致情况 NAT TUN DR
    网络 私有 LAN/WAN LAN
    节点数量 10-20 100 100
    优点 地址端口转换 WAN 性能高
    缺点 调度器瓶颈 需支持隧道协议 不可跨LAN

    原本只有以上三种模式,更多的采用DR和NAT模式(真实服务器以及LVS要在同个VLAN部署成本高),TUNNEL可跨VLAN,但隧道也需要成本等。对此增加FULLNAT模式(可跨VLAN,真实服务器只需连接内网),Packet IN可做DNAT以及SNAT

    FULLNAT大致模式如下:

    • 前:源IP客户端IP,目标IP为IPIP
    • 处理:源IP为内网本地IP,目标IP为真实服务器IP
    • 输出:源IP为虚拟IP,目标IP为客户端IP

    调度算法

    调度器根据其目标地址决定哪个集群处理数据

    • 固定调度:rr、wrr、dh、sh
    • 动态调度:wlc、lc、lblc、lblcr

    大致调度算法如下:

    调度算法 大致情况
    轮询 rr(Round-Robin) 依次分配给不同节点(适用节点性能差不多的)
    加权轮询 wrr(Weighted Round-Robin) 依据不同节点权值分配,权值高的优先获取
    目的地址哈希 dh(Destination Hashing) 通过目的地址关键字
    源地址哈希 sh(Source Hashing) 通过源地址关键字
    加权最小连接数 wlc(Weighted Least-Connection) 每台权值 / 当前TCP连接数最为判定
    最小连接数 lc(Least-Connection) IPVS存储所有连接,将其请求发送给最小的调度器
    基于地址最小连接数 lblc(Locality-Based Least-Connection) 将同一目的地请求分配给调度器,请求来的时候分发给最小的连接数服务器(前提未达到负荷)
    基于地址带重复的最小连接数 目的地址对应有一个调度器的集合,将其请求分配给连接数最小的调度器

    适用场景:

    • 网络服务(Http、邮件、数据库):轮询、加权最小连接、加权轮询调度
    • 网站缓存、数据库缓存:一致性哈希
    • 防火墙集群:源地址哈希、目的地址哈希

    转载地址:http://rtufk.baihongyu.com/

    你可能感兴趣的文章
    mysql 协议的退出命令包及解析
    查看>>
    mysql 参数 innodb_flush_log_at_trx_commit
    查看>>
    mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
    查看>>
    MySql 同一个列中的内容进行批量改动
    查看>>
    MySQL 命令和内置函数
    查看>>
    MySQL 和 PostgreSQL,我到底选择哪个?
    查看>>
    mysql 四种存储引擎
    查看>>
    mysql 在windons下的备份命令
    查看>>
    MySQL 在并发场景下的问题及解决思路
    查看>>
    MySQL 在控制台插入数据时,中文乱码问题的解决
    查看>>
    MySQL 基础架构
    查看>>
    MySQL 基础模块的面试题总结
    查看>>
    MySQL 处理插入重主键唯一键重复值办法
    查看>>
    Mysql 备份
    查看>>
    MySQL 备份 Xtrabackup
    查看>>
    mysql 复杂查询_mysql中复杂查询
    查看>>
    mYSQL 外键约束
    查看>>
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>