LVS负载均衡原理与实战配置详解

一、LVS 核心概念与架构

LVS(Linux Virtual Server)是由章文嵩博士在1998年开发的开源项目,现已成为Linux内核标准模块。它通过将网络请求智能分发到多个后端服务器,构建高性能、高可用的服务器集群,广泛应用于淘宝、YouTube等大型网站架构中。

1. 架构组件详解

Director(调度器)

  • 作为整个集群的入口,运行ipvs内核模块
  • 主要功能:接收客户端请求、维护服务器列表、执行负载均衡算法
  • 典型配置:双网卡(公网+内网),禁用不必要的服务

Real Server(真实服务器)

  • 实际处理请求的应用服务器(如Nginx、Apache)
  • 需要配置相同的服务内容(可采用Rsync同步)
  • 示例配置:Web服务器通常运行Nginx并开启access_log

负载均衡策略对比

策略类型算法原理适用场景配置示例
轮询(RR)依次分配给每个RS服务器性能相近ipvsadm -A -t VIP:80 -s rr
加权轮询(WRR)根据权重比例分配服务器性能差异较大ipvsadm -A -t VIP:80 -s wrr
最少连接(LC)分配给当前连接数最少的RS长连接场景(如数据库)ipvsadm -A -t VIP:80 -s lc
源地址散列(SH)相同源IP总分配到同一RS需要会话保持的应用ipvsadm -A -t VIP:80 -s sh

2. 工作模式深度对比

NAT模式深入分析

  • 典型数据流:Client → Director(VIP)→ Director(DIP)→ RS(RIP)→ Director → Client
  • 网络要求:RS网关必须指向DIP
  • 性能瓶颈测试:在千兆网络下,单Director一般只能处理5-8台RS

TUN模式特殊配置

  • RS需要加载ipip模块:modprobe ipip
  • 典型封装格式:IP in IP(额外20字节开销)
  • 跨机房示例:Director在北京机房,RS可部署在上海机房

DR模式性能测试

  • 在相同硬件条件下,DR模式吞吐量可达NAT模式的10倍
  • ARP抑制关键参数说明:
    • arp_ignore=1:仅响应目标IP是本地接口的ARP请求
    • arp_announce=2:始终使用接口的真实IP做ARP响应

二、LVS DR模式配置实战(生产级部署)

1. 环境准备规范

网络拓扑要求

  • 所有节点必须在同一广播域(不支持跨路由器)
  • 建议使用独立VLAN隔离LVS集群流量

IP规划示例

               +---------------------+
               |     交换机/路由器    |
               +----------+----------+
                          |
           +--------------+--------------+
           |                             |
+----------+----------+        +---------+---------+
|  Director (主)      |        |  Director (备)   |
| eth0: 192.168.1.1   |        | eth0: 192.168.1.5 |
| eth0:0: 192.168.1.100(VIP)   |                    |
+----------+----------+        +---------+---------+
           |                             |
+----------+----------+        +---------+---------+
| RS1                 |        | RS2                |
| eth0: 192.168.1.2   |        | eth0: 192.168.1.3  |
| lo:0: 192.168.1.100 |        | lo:0: 192.168.1.100|
+---------------------+        +---------------------+

2. 调度器高级配置

内核参数优化

# /etc/sysctl.conf 关键参数
net.ipv4.ip_forward = 1
net.ipv4.vs.conntrack = 1  # 开启连接跟踪
net.ipv4.vs.expire_nodest_conn = 1  # 快速释放无效连接

IPVSADM持久化服务

# 创建systemd服务(/usr/lib/systemd/system/ipvsadm.service)
[Unit]
Description=IPVS Load Balancer
After=network.target

[Service]
Type=oneshot
ExecStart=/bin/bash -c '/sbin/ipvsadm-restore < /etc/sysconfig/ipvsadm'
ExecStop=/sbin/ipvsadm-save > /etc/sysconfig/ipvsadm
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

3. 后端服务器生产配置

VIP配置脚本(/usr/local/bin/lvs-dr.sh)

#!/bin/bash
VIP=192.168.1.100
case "$1" in
start)
    echo "Starting LVS-DR real server"
    /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
    /sbin/route add -host $VIP dev lo:0
    echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
stop)
    echo "Stopping LVS-DR real server"
    /sbin/ifconfig lo:0 down
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    ;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
exit 0

配置验证要点

  1. 在Director执行:ipvsadm -lcn 查看实时连接分布
  2. 在RS执行:tcpdump -i lo -nn host 192.168.1.100 验证VIP流量
  3. 测试工具:使用ab进行压力测试 ab -n 100000 -c 500 http://192.168.1.100/

三、LVS高可用方案(Keepalived进阶配置)

1. 主备切换机制详解

VRRP协议工作流程

  1. Master定期(advert_int)发送VRRP通告
  2. Backup监听通告,超时(3*advert_int)后触发切换
  3. 新Master发送ARP广播更新VIP的MAC地址

脑裂问题处理

# 添加脚本检测(/etc/keepalived/check_script.sh)
#!/bin/bash
if ping -c 1 -W 1 192.168.1.254 &>/dev/null; then
    exit 0
else
    systemctl stop keepalived
    exit 1
fi

# keepalived.conf添加:
vrrp_script chk_gateway {
    script "/etc/keepalived/check_script.sh"
    interval 2
    weight -20
}

2. 健康检查增强配置

多级健康检查示例

real_server 192.168.1.2 80 {
    weight 1
    TCP_CHECK {
        connect_port 80
        connect_timeout 5
    }
    HTTP_GET {
        url {
            path /health
            status_code 200
        }
        connect_timeout 5
        nb_get_retry 3
    }
    MISC_CHECK {
        misc_path "/etc/keepalived/check_mysql.sh"
        misc_timeout 10
    }
}

自定义检查脚本示例(check_mysql.sh)

#!/bin/bash
if mysql -h127.0.0.1 -uroot -p'password' -e "SHOW STATUS;" &>/dev/null; then
    exit 0
else
    exit 1
fi

四、LVS性能优化与深度排错

1. 内核级调优参数

连接跟踪优化

# /etc/sysctl.conf
net.ipv4.vs.conn_reuse_mode = 1  # 连接复用
net.ipv4.vs.expire_quiescent_template = 1  # 快速释放空闲连接
net.ipv4.vs.cache_bypass = 1  # 缓存加速

TCP协议栈调优

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_max_tw_buckets = 10000

2. 系统级诊断方法

连接状态分析

# 查看连接分布(每2秒刷新)
watch -n 2 ipvsadm -l --stats

# 跟踪特定客户端连接
ipvsadm -l --timeout
ipvsadm -l --persistent-conn

性能瓶颈定位

# 内核处理统计
cat /proc/net/ip_vs_stats

# 中断负载检查
cat /proc/interrupts | grep eth

五、混合架构设计方案

1. LVS+Nginx分层架构

典型部署模型

客户端 → LVS集群(DR模式) → Nginx集群(七层LB) → 应用服务器

优势对比

  • LVS处理四层流量分发(百万级并发)
  • Nginx处理七层路由、SSL卸载、缓存等
  • 示例配置:
    upstream app_servers {
        server 10.0.1.1:8080;
        server 10.0.1.2:8080;
        keepalive 32;
    }
    

2. 云环境适配方案

AWS部署注意事项

  1. 禁用源/目标检查(Source/Dest Check)
  2. 使用ENI第二IP作为VIP
  3. 示例EC2配置:
    # 添加辅助IP
    aws ec2 assign-private-ip-addresses \
        --network-interface-id eni-123456 \
        --private-ip-addresses 192.168.1.100
    

六、生产环境监控体系

1. Prometheus监控配置

Exporter部署

# 编译ipvs_exporter
go get github.com/damjan/go-ipvs-exporter

# 启动参数
./ipvs_exporter --web.listen-address=":9292"

Grafana仪表板指标

  • 当前活跃连接数
  • 每秒新建连接数
  • 各RS的流量分布
  • 丢包率统计

2. 日志分析架构

ELK日志收集方案

  1. RS节点部署Filebeat收集Nginx日志
  2. Logstash过滤规则示例:
    filter {
      if [type] == "lvs-access" {
        grok {
          match => { "message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response} %{NUMBER:bytes}" }
        }
      }
    }
    

七、安全加固指南

1. 访问控制策略

iptables规则示例

# 只允许Director访问RS的服务端口
iptables -A INPUT -p tcp --dport 80 -s 192.168.1.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j DROP

# 限制VIP的ARP响应
iptables -A INPUT -p arp --arp-op Request --arp-ip-dst 192.168.1.100 -j DROP

2. DDoS防护方案

SYN Cookie防护

# 启用SYN Cookie
echo 1 > /proc/sys/net/ipv4/tcp_syncookies

# 调整半连接队列
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog

连接限制规则

ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon --master --syncid=100

八、版本升级与迁移

1. 内核模块兼容性

各Linux发行版支持情况

发行版内核模块名称管理工具
RHEL/CentOSip_vsipvsadm
Ubuntuip_vsipvsadm
SUSEip_vsipvsadm
ArchLinuxip_vsipvsadm

2. 平滑迁移方案

双VIP迁移步骤

  1. 新集群配置新VIP(192.168.1.200)
  2. DNS逐步切换流量(TTL设置为60秒)
  3. 监控旧VIP流量,确认降至0后下线
  4. 示例DNS记录:
    www IN A 192.168.1.100
    www IN A 192.168.1.200
    

通过以上深度配置和优化,LVS集群可以支撑千万级PV的网站流量。实际部署时建议先进行压力测试,推荐使用Locust或JMeter模拟真实流量模式。对于金融级应用,应考虑部署LVS+Keepalived的双活架构实现零中断升级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值