云计算百科
云计算领域专业知识百科平台

Linux Virtual Server (LVS) 负载均衡集群笔记

笔记说明:本文档旨在系统性地梳理LVS的核心概念、工作原理、调度算法,并提供NAT与DR模式的详细实验步骤,作为学习和配置LVS的参考手册。

一、LVS 核心概念与原理

1.1 LVS是什么

LVS (Linux Virtual Server) 是集成于Linux内核的高性能、高可用的负载均衡集群解决方案,由章文嵩博士发起。其核心作用是将客户端的大量请求,根据指定的策略,智能地分发到后端的多台真实服务器(Real Server,RS) 上,从而提升整个系统的并发处理能力和整体可用性。

1.2 核心术语

理解以下IP地址角色是掌握LVS的基础:

  • CIP (Client IP):客户端的IP地址。

  • VIP (Virtual IP):虚拟IP地址,是负载均衡集群对外提供服务的统一IP。

  • DIP (Director IP):调度器(LVS服务器)与内网真实服务器通信所使用的IP。

  • RIP (Real Server IP):后端真实服务器的IP地址。

  • VS (Virtual Server):虚拟服务器,即运行LVS的调度器本身。

  • RS (Real Server):真实服务器,实际处理请求的服务器。

一个完整的请求流转路径通常为:CIP -> VIP (VS) -> DIP -> RIP (RS)。

1.3 LVS的四种工作模式深度解析

LVS根据报文转发和响应方式的不同,主要有四种工作模式:

  • LVS-NAT (网络地址转换)

    • 原理:调度器作为网关。请求进入时,VS将报文目标地址从VIP改为选中的RIP (DNAT);响应返回时,VS再将源地址从RIP改回VIP (SNAT) 返回客户端。

    • 数据流:Client -> VS (DNAT) -> RS -> VS (SNAT) -> Client

    • 特点:

      • RS的网关必须指向VS的DIP。

      • 请求和响应报文都必须经过VS,VS容易成为性能瓶颈。

      • 支持端口映射。

  • LVS-DR (直接路由) —— 【生产环境最常用】

    • 原理:VS仅将请求报文的目标MAC地址修改为选中RS的MAC地址,并将报文转发出去。RS处理后,直接将响应报文发送给客户端,不再经过VS。

    • 数据流:Client -> VS (改写MAC) -> RS -> Client

    • 关键配置:

    • RS必须在lo接口上绑定VIP。

    • RS必须进行ARP抑制,防止其网卡直接响应客户端的ARP请求。推荐内核参数如下:

      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore # 仅回答目标IP为接收网卡IP的ARP请求
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce # 通告ARP时使用最合适的本地地址

    • 特点:性能极高,响应流量不经过VS。但要求VS与RS必须在同一物理网络(广播域),且不支持端口映射。

  • LVS-TUN (IP隧道)

    • 原理:VS将原始的IP报文封装在一个新的IP报文中(源为DIP,目标为RIP),通过IP隧道发送给RS。RS解封装后,直接响应客户端。

    • 特点:支持跨地域部署(RIP和VIP可以为公网IP),但RS需支持并配置IP隧道协议。

  • LVS-FULLNAT

    • 原理:VS同时修改请求报文的源地址(CIP -> DIP)和目标地址(VIP -> RIP)。响应报文同样经过VS,进行相反的地址转换。

    • 特点:部署最灵活,RIP和DIP可以跨网络。但双向流量均经过VS,且需要内核补丁支持(非内核原生)。

  • 四种模式对比表

  • 特性NATDRTUNFULLNAT
    RS与VS网络要求 同一网络 同一广播域 可跨网络 可跨网络
    RS网关指向 必须指向VS 指向网关路由器 指向网关路由器 指向网关路由器
    响应路径 经过VS 直连客户端 直连客户端 经过VS
    端口映射 支持 不支持 不支持 支持
    主要瓶颈 VS(双向流量) VS(仅处理请求) 隧道封装开销 VS(双向流量)
    1.4 调度算法

    调度算法决定了VS如何选择后端RS。

    • 静态算法 (不考虑RS当前负载)

      • RR (轮询):请求依次平均分配。

      • WRR (加权轮询):根据权重比例分配,权重高的RS获得更多请求。

      • SH (源地址哈希):来自同一CIP的请求始终发往同一RS,实现会话保持。

      • DH (目标地址哈希):根据请求的目标IP(如不同URL)进行哈希分发。

    • 动态算法 (考虑RS当前连接数等负载)

      • LC (最少连接):将请求分配给当前活动连接数最少的RS。

      • WLC (加权最少连接):在LC基础上加入权重因素,是LVS的默认调度算法。

      • SED (最短期望延迟):基于WLC优化,避免权重低的RS长期空闲。

      • NQ (永不排队):对SED的改进,如果有RS空闲,请求直接分配过去。

    1.5 ipvsadm 命令速查

    ipvsadm是用户空间用来配置LVS规则的工具。

    • 集群服务管理

      ipvsadm -A|E -t|u|f <服务地址> [-s 调度器] # 添加/修改虚拟服务(-t TCP, -u UDP, -f 防火墙标记)
      ipvsadm -D -t|u|f <服务地址> # 删除虚拟服务
      ipvsadm -C # 清空所有配置规则
      ipvsadm -S > /etc/sysconfig/ipvsadm # 保存当前规则到文件
      ipvsadm -R < /etc/sysconfig/ipvsadm # 从文件恢复规则

    • 真实服务器管理

      ipvsadm -a|e -t|u|f <服务地址> -r <RS地址> [-g|i|m] [-w 权重] # 添加/修改RS(-g DR, -i TUN, -m NAT)
      ipvsadm -d -t|u|f <服务地址> -r <RS地址> # 删除指定RS
      ipvsadm -L -n [–rate] [–stats] [–timeout] # 查看规则、连接数、统计信息等

    二、LVS-NAT 模式集群实验

    2.1 实验环境规划
    • VS (调度器):双网卡

      • eth0: 172.25.254.100 (对外VIP,连接客户端网络)

      • eth1: 192.168.0.100 (对内DIP,连接RS网络)

    • RS1 (真实服务器):192.168.0.10,网关指向 192.168.0.100,提供Web服务。

    • RS2 (真实服务器):192.168.0.20,网关指向 192.168.0.100,提供Web服务。

    • 客户端:172.25.254.99,通过访问VIP 172.25.254.100 来测试。

    2.2 实验步骤
  • VS主机配置

    • 配置两个网卡的IP地址。

    • 开启内核IP转发功能:

      echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf && sysctl -p

  • RS1与RS2配置

    • 配置网卡IP地址,并设置网关为 192.168.0.100。

    • 安装并启动HTTP服务,创建内容不同的测试页面。

      # RS1
      echo "RS1 – 192.168.0.10" > /var/www/html/index.html
      # RS2
      echo "RS2 – 192.168.0.20" > /var/www/html/index.html

  • 在VS上配置LVS规则

    # 清空现有规则
    ipvsadm -C
    # 添加一个VIP的TCP服务,使用加权轮询算法
    ipvsadm -A -t 172.25.254.100:80 -s wrr
    # 添加两台RS,使用NAT模式(-m),并设置权重
    ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1
    ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1
    # 查看配置结果
    ipvsadm -Ln

  • 验证与持久化

    • 在客户端多次访问 http://172.25.254.100,应看到两个RS页面轮询出现。

    • 修改RS1权重为2,再次测试,RS1出现的频率应约为RS2的两倍。

    • 保存规则并设置开机自启:

      ipvsadm -S > /etc/sysconfig/ipvsadm
      systemctl enable –now ipvsadm

  • 三、LVS-DR 模式集群实验

    3.1 实验环境规划
    • 路由器 (router):连接内外网,并配置SNAT。

      • eth0: 172.25.254.100 (连接客户端)

      • eth1: 192.168.0.100 (连接VS和RS)

    • VS (调度器):eth0 配置DIP和VIP。

      • DIP: 192.168.0.50/24

      • VIP: 192.168.0.200/24 (作为地址2添加)

    • RS1:192.168.0.10/24,网关指向 192.168.0.100,lo接口绑定VIP。

    • RS2:192.168.0.20/24,网关指向 192.168.0.100,lo接口绑定VIP。

    • 客户端:172.25.254.99/24,网关指向 172.25.254.100。

    3.2 实验步骤
  • 路由器 (router) 配置

    • 配置双网卡IP,开启IP转发。

    • 配置SNAT,确保内网服务器能访问外网,并让响应包能正确返回客户端。

      iptables -t nat -A POSTROUTING -o eth0 -j SNAT –to-source 172.25.254.100
      iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to-source 192.168.0.100

  • 调度器 (vsnode) 配置

    • 配置DIP 192.168.0.50 和 网关 192.168.0.100。

    • 在同一网卡上添加VIP 192.168.0.200/24 作为辅助地址(配置方法参考原文中的address2)。

  • RS1 / RS2 配置

    • 基础网络:配置RIP 192.168.0.x,网关指向路由器 192.168.0.100。

    • 在lo接口绑定VIP:创建一个loopback类型的连接,并添加地址 192.168.0.200/32。

      # 示例:复制eth0配置并修改为loopback类型
      cp /etc/NetworkManager/system-connections/eth0.nmconnection /etc/NetworkManager/system-connections/lo.nmconnection
      # 编辑 lo.nmconnection,修改 type=loopback, interface-name=lo, address1=127.0.0.1/8, address2=192.168.0.200/32

    • ARP抑制:这是DR模式成功的关键。 必须配置,防止RS的网卡响应针对VIP的ARP请求。

      echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
      echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
      # 可写入 /etc/sysctl.conf 永久生效

  • 在VS上配置LVS规则 (使用DR模式)

    ipvsadm -C
    ipvsadm -A -t 192.168.0.200:80 -s rr # VIP为192.168.0.200
    ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g # -g 表示DR模式
    ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
    ipvsadm -Ln

  • 验证

    • 在客户端 172.25.254.99 上多次访问 http://192.168.0.200,应看到RS1和RS2的页面内容轮询出现。可以通过在RS上抓包或查看VS统计信息 (ipvsadm -Ln –stats) 来确认流量分发。

  • 总结

    LVS是构建高性能Linux服务器集群的强大工具。在生产环境中,DR模式因其卓越的性能而应用最广,但其配置也相对复杂,关键在于ARP抑制。NAT模式配置简单,适合小型或对性能要求不高的场景。掌握 ipvsadm 命令和四种模式的原理,是灵活运用LVS的基础。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Linux Virtual Server (LVS) 负载均衡集群笔记
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!