一、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
配置验证要点:
- 在Director执行:
ipvsadm -lcn
查看实时连接分布 - 在RS执行:
tcpdump -i lo -nn host 192.168.1.100
验证VIP流量 - 测试工具:使用ab进行压力测试
ab -n 100000 -c 500 http://192.168.1.100/
三、LVS高可用方案(Keepalived进阶配置)
1. 主备切换机制详解
VRRP协议工作流程:
- Master定期(advert_int)发送VRRP通告
- Backup监听通告,超时(3*advert_int)后触发切换
- 新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部署注意事项:
- 禁用源/目标检查(Source/Dest Check)
- 使用ENI第二IP作为VIP
- 示例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日志收集方案:
- RS节点部署Filebeat收集Nginx日志
- 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/CentOS | ip_vs | ipvsadm |
Ubuntu | ip_vs | ipvsadm |
SUSE | ip_vs | ipvsadm |
ArchLinux | ip_vs | ipvsadm |
2. 平滑迁移方案
双VIP迁移步骤:
- 新集群配置新VIP(192.168.1.200)
- DNS逐步切换流量(TTL设置为60秒)
- 监控旧VIP流量,确认降至0后下线
- 示例DNS记录:
www IN A 192.168.1.100 www IN A 192.168.1.200
通过以上深度配置和优化,LVS集群可以支撑千万级PV的网站流量。实际部署时建议先进行压力测试,推荐使用Locust或JMeter模拟真实流量模式。对于金融级应用,应考虑部署LVS+Keepalived的双活架构实现零中断升级。