服务公告

服务公告 > 综合新闻 > LVS - 安装配置 完全指南

LVS - 安装配置 完全指南

发布时间:2026-04-30 18:02
LVS安装配置:Linux负载均衡集群快速部署实战指南,手把手带你从零搭建LVS+Keepalived高可用架构,解决单点故障与流量分发问题。

一、前言

搞过的人都知道,线上流量一上来,Nginx单节点扛不住,Keepalived配起来又像在读天书,想快速搭个企业级负载均衡,LVS是首选。官方文档写得跟考古文献似的,今天把这十年的经验掰碎了讲,从源码编译到生产配置,一条龙给你整明白。

二、操作步骤

步骤1:确认系统环境与依赖

先看看你手里这台机器能不能跑LVS,内核版本太低可不行。

# 查看内核版本(必须 >= 2.6) uname -r # CentOS/RHEL 查看系统版本 cat /etc/centos-release # Ubuntu 查看系统版本 cat /etc/lsb-release # 检查是否已安装IPVS内核模块 modprobe ip_vs lsmod | grep ip_vs

预期输出:

3.10.0-1160.el7.x86_64 CentOS Linux release 7.9.2009 (Core) ip_vs 134544 0 libcrc32c 12695 1 ip_vs

如果 lsmod | grep ip_vs 没有输出,别慌,执行 modprobe ip_vs 加载模块即可。

步骤2:安装编译工具与依赖包

编译LVS需要趁手的工具,缺哪个装哪个。

# CentOS/RHEL 安装依赖 yum install -y gcc gcc-c++ make libtool libnfnetlink-devel openssl-devel # Ubuntu 安装依赖 apt-get update && apt-get install -y build-essential libtool libssl-dev libnl-3-dev libnl-genl-3-dev

预期输出(CentOS/RHEL):

已加载插件: fastestmirror, langpacks 正在安装: gcc x86_64 4.8.5-44.el7 @base gcc-c++ x86_64 4.8.5-44.el7 @base make x86_64 3.82-24.el7 @base libtool x86_64 2.4.2-12.el7 @base 已安装完毕!

预期输出(Ubuntu):

正在设置软件包 build-essential ... 完成 正在设置软件包 libssl-dev ... 完成 正在设置软件包 libnl-3-dev ... 完成

步骤3:下载并编译安装ipvsadm

ipvsadm是LVS的管理工具,没它你只能对着内核干瞪眼。

# 下载稳定版源码包 cd /tmp wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.31.tar.gz # 解压编译 tar zxvf ipvsadm-1.31.tar.gz cd ipvsadm-1.31 # 编译安装 make && make install # 验证安装 ipvsadm --version

预期输出:

IP Virtual Server version 1.2.1 (size=4096) # 如果看到 version 1.2.1,说明安装成功

⚠️ 警告:如果编译报错"kernel source not found",你需要先安装内核开发包:

# CentOS/RHEL yum install -y kernel-devel # Ubuntu apt-get install -y linux-headers-$(uname -r)

步骤4:配置LVS负载均衡器(Director)

现在来配置LVS Director,这是整个架构的核心。

# 开启IP转发(必须,否则数据包只能进不能出) echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf sysctl -p # 清除现有规则 ipvsadm -C # 添加VIP(虚拟IP) ipvsadm -A -t 192.168.1.100:80 -s wrr # 添加RealServer(真实服务器) # -m 表示NAT模式,-g 表示DR模式(直接路由),-i 表示TUN模式(隧道) ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -m -w 1 ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -m -w 2 # 查看配置结果 ipvsadm -Ln

预期输出:

IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.100:80 wrr -> 192.168.1.101:80 Masq 1 0 0 -> 192.168.1.102:80 Masq 2 0 0

可以看到 192.168.1.100 是VIP,192.168.1.101192.168.1.102 是后端RealServer。

步骤5:安装配置Keepalived实现高可用

单Director会挂,高可用才是正经方案。

# 安装Keepalived # CentOS/RHEL yum install -y keepalived # Ubuntu apt-get install -y keepalived # 备份默认配置 cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak # 编辑Keepalived配置(MASTER节点) cat > /etc/keepalived/keepalived.conf << 'EOF' ! Configuration File for keepalived global_defs { router_id LVS_MASTER script_user root } vrrp_script chk_lvs { script "/etc/keepalived/check_lvs.sh" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass YOUR_AUTH_PASSWORD } virtual_ipaddress { 192.168.1.100/24 dev eth0 } track_script { chk_lvs } } virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo wrr lb_kind NAT persistence_timeout 50 protocol TCP real_server 192.168.1.101 80 { weight 1 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.1.102 80 { weight 2 TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } EOF

预期输出:

# 配置写入成功,无报错

⚠️ 警告:YOUR_AUTH_PASSWORD 替换为强密码,且BACKUP节点的 priority 要低于100。

步骤6:创建健康检查脚本

cat > /etc/keepalived/check_lvs.sh << 'EOF' #!/bin/bash LVS_NUM=$(ipvsadm -L -n | wc -l) if [ $LVS_NUM -le 3 ]; then logger "LVS rule lost, restart keepalived" systemctl stop keepalived systemctl start keepalived exit 1 fi exit 0 EOF chmod +x /etc/keepalived/check_lvs.sh

预期输出:

# 脚本创建完成,权限已设置

步骤7:启动服务并验证

# 启动Keepalived systemctl enable keepalived systemctl start keepalived # 检查VIP是否绑定成功 ip addr show eth0 | grep 192.168.1.100 # 查看LVS连接状态 ipvsadm -Ln --stats # 模拟访问测试 curl -H "Host: www.example.com" http://192.168.1.100/ curl -H "Host: www.example.com" http://192.168.1.100/

预期输出:

inet 192.168.1.100/24 scope global secondary eth0 # VIP绑定成功 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes -> RemoteAddress:Port TCP 192.168.1.100:80 5 30 20 3600 2400 -> 192.168.1.101:80 3 18 12 2160 1440 -> 192.168.1.102:80 2 12 8 1440 960 # 可以看到请求已经分发到两个RealServer Response from RS01 Response from RS02 # 两次请求返回不同后端,证明负载均衡生效

步骤8:持久化连接与故障切换测试

# 查看持久化连接 ipvsadm -Ln --persistent-conn # 模拟RealServer故障 # 在一台RealServer上停止nginx/apache systemctl stop nginx # 查看LVS自动剔除故障节点 ipvsadm -Ln # 在MASTER上停止Keepalived测试VIP漂移 systemctl stop keepalived # 在BACKUP上检查VIP是否接管 ip addr show eth0 | grep 192.168.1.100

预期输出:

# RealServer故障后 TCP 192.168.1.100:80 wrr persistent 50 -> 192.168.1.102:80 Masq 2 0 0 # 可以看到192.168.1.101已被自动移除 # VIP漂移后 inet 192.168.1.100/24 scope global secondary eth0 # BACKUP节点成功接管VIP

三、常见问题FAQ

Q1: LVS三种工作模式(NAT/DR/TUN)到底该选哪个?

这问题被问了八百遍了。NAT模式最简单,但Director容易成瓶颈,所有流量都过它;DR模式性能最强,只改MAC地址,但要求在同一网段;TUN模式能跨网段,但兼容性差。生产环境90%用DR模式,记住这个结论就行。

Q2: VIP绑定了但访问不通,什么情况?

先查三样东西:① RealServer的网关有没有指向LVS内网IP;② iptables/firewalld有没有放行VIP流量;③ 后端服务有没有监听在正确的IP上。很多人栽在第一条上,后端RealServer的网关必须指向LVS的DIP。

Q3: Keepalived VIP漂移正常,但LVS规则丢失了怎么办?

这是新手常踩的坑。Keepalived只管VIP漂移,不会帮你维护ipvsadm规则。你需要自己写脚本或者用Keepalived的notify机制,在VIP切换时执行 ipvsadm -C 清空再重新添加。建议把完整的LVS规则写成脚本,通过notify_master调用。

Q4: 连接数一高就丢包,性能上不去怎么调?

LVS本身是无状态的,瓶颈一般在这几个地方:① net.core.somaxconn 太小,调到65535;② ip_vs连接表太小,看 /proc/net/ip_vs_conn_max,可以调大;③ 网卡软中断瓶颈,试过irqbalance;④ 内核参数 net.ipv4.vs.conntrack 最好关掉,那玩意儿巨慢。

四、总结

LVS装起来不难,配起来才是真功夫。核心就几点:内核IPVS模块加载、ipvsadm规则编写、Keepalived高可用绑定。生产环境记住三个原则:DR模式优先、健康检查必须做、持久化时间按业务调。性能调优方向就那几个内核参数,somaxconn、conntrack、能关的都关掉。

延伸阅读:

  • LVS官方文档:http://www.linuxvirtualserver.org/
  • Keepalived配置详解:man keepalived.conf
  • 内核参数调优参考:/proc/sys/net/ipv4/vs/
  • LVS与Nginx组合方案:前端LVS做四层负载,后端Nginx做七层处理

上一篇: Windows系统管理 - 性能优化 实战技巧

已经是最后一篇啦!