目录
- 前言
- 一、LVS负载均衡
- 二、LVS-NAT 模式搭建
- 三、keepalived高可用
- 四、7层负载均衡
- 总结
前言
在当今高并发的互联网服务架构中,单台服务器往往难以承受巨大的访问压力,且存在单点故障的风险。负载均衡技术应运而生,它通过将网络请求分发到多台后端服务器,不仅提升了系统的整体处理能力,也增强了服务的可用性和可靠性。
Linux Virtual Server (LVS) 作为一款成熟、高性能的四层(传输层)负载均衡解决方案,凭借其接近线性的扩展能力和极低的资源开销,在大型网站和关键业务系统中得到了广泛应用。它工作在 Linux 内核空间,通过 IPVS (IP Virtual Server) 模块实现,支持 NAT、DR、TUN 等多种工作模式,能够满足不同网络环境下的部署需求。
然而,仅靠 LVS 实现负载均衡还不够。在实际生产环境中,我们还需要考虑调度器自身的高可用性,避免其成为新的单点故障。Keepalived 正是解决这一问题的利器,它基于 VRRP 协议,可以实现主备调度器的自动故障切换,确保服务持续可用。
此外,对于需要基于 HTTP 头部、URL 路径等应用层信息进行更精细路由的场景,七层负载均衡器(如 HAProxy)则能提供 LVS 所不具备的灵活性和功能。
本文将带领大家从零开始,一步步搭建一个完整的负载均衡与高可用实验环境。我们将涵盖:
一、LVS负载均衡
| server1 | 192.168.48.132 | 192.168.48.100 | 调度器(VS) |
| server2 | 192.168.48.144 | 192.168.48.100 | 真实服务器(RS) |
| server3 | 192.168.48.142 | 192.168.48.100 | 真实服务器(RS) |
| server4 | 192.168.48.143 | — | 测试机 |
server2 安装网页服务
yum install -y httpd
server2 启动网页并写入内容
systemctl start httpd
echo server2 > /var/www/html/index.html
systemctl enable httpd
server2 添加VIP
ip a a 192.168.48.100/24 dev eth0
server2 安装arptables
yum install -y arptables
server2 添加arptables规则
arptables -A INPUT -d 192.168.48.100 -j DROP
arptables -A OUTPUT -s 192.168.48.100 -j mangle –mangle-ip-s 192.168.48.144
server2 保存arptables规则
arptables-save > /etc/sysconfig/arptables
server2 设置arptables开机自启
systemctl enable arptables

server3 安装网页服务
yum install -y httpd
server3 启动并写入网页内容
systemctl enable –now httpd
echo server3 > /var/www/html/index.html
server3 添加VIP
ip a a 192.168.48.100/24 dev eth0
server3 安装arptables
yum install -y arptables
server3 添加arptables规则
arptables -A INPUT -d 192.168.48.100 -j DROP
arptables -A OUTPUT -s 192.168.48.100 -j mangle –mangle-ip-s 192.168.48.142
server3 保存arptables规则
arptables-save > /etc/sysconfig/arptables
server3 设置arptables开机自启
systemctl enable arptables

server1安装ipvsadm
yum install -y ipvsadm
server1 添加VIP
ip addr add 192.168.48.100/24 dev eth0
server1 添加虚拟服务
ipvsadm -A -t 192.168.48.100:80 -s rr
server1 添加真实服务器 server2、server3
ipvsadm -a -t 192.168.48.100:80 -r 192.168.48.144:80 -g
ipvsadm -a -t 192.168.48.100:80 -r 192.168.48.142:80 -g
server1 查看LVS配置
ipvsadm -ln
server1 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm
在server4执行命令
for i in {1..10}; do curl 192.168.48.100; done
也可以在 server1 上查看调度统计:
ipvsadm -ln

二、LVS-NAT 模式搭建
给server1的虚拟机添加一块网卡ens33 
新设置的网卡所属网段:192.168.159.0/24
将server4网络适配器修改为仅主机模式
修改为dhcp
保留192.168.159.0/24网段,保证测试机只能访问调度器的外部网卡 
打开server1路由功能
vim /etc/sysctl.d/lvs.conf
net.ipv4.ip_forward=1
sysctl –system

将VIP192.168.48.100/24摘掉
ip addr del 192.168.48.100/24 dev ens32

修改网关,使网关指向192.168.48.132,确保RS的数据包正确回归到VS上
ipvsadm -ln
ipvsadm -C
ipvsadm -A -t 192.168.159.128:80 -s rr

# 添加后端RealServer1 server2,-m代表NAT转发模式
ipvsadm -a -t 192.168.159.128:80 -r 192.168.48.144:80 -m
# 添加后端RealServer2 server3
ipvsadm -a -t 192.168.159.128:80 -r 192.168.48.142:80 -m
# 查看完整规则确认
ipvsadm -ln
删除旧网关
ip r d default via 192.168.48.2
添加调度器 IP 作为新的默认网关(LVS-NAT 核心)
ip route add default via 192.168.48.132 dev ens32
核对路由是否修改成功
ip r
server3 也要照抄这套操作
# 删除旧网关
ip r d default via 192.168.48.2
# 指向调度器
ip route add default via 192.168.48.132 dev ens32
# 核对
ip r
在server4上测试配置

三、keepalived高可用
问题:
- 某台RealServer down了,怎么办?
- LVS本身down了,怎么办?
将server4网络适配器还原NAT模式,移除server1的第二块网卡,回归原先DR模式
Q1:
添加健康检测
Q2: 模拟调度器坏掉
现在使用server4做主备(一般不推荐,此处实验环境机器有限)
整体规划
- 主调度器:server1 192.168.48.132
- 备调度器:server4 192.168.48.143(原本的客户端,现在兼任备 VS)
- VIP:192.168.48.100
- 后端 RS:server2 192.168.48.144、server3 192.168.48.142
- 两台 RS 的 ARP 抑制、lo:0 绑定 VIP、网关192.168.48.2配置保持不变
1.主 server1、备 server4 都安装 Keepalived、 ipvsadm
yum install -y keepalived ipvsadm
此处删掉server1的VIP,VIP 完全交给 Keepalived 自动管理: 1.两台调度器(server1、server4)安装 Keepalived,按之前给的配置文件编写eepalived.conf 2.启动 Keepalived 后,主节点会自动把 VIP 绑定到 ens32,备节点平时不生成 VIP 3.主节点故障时,备节点自动接管 VIP,不需要人工执行ip addr增减命令
安装邮件工具
yum install -y mailx
2.主节点 server1 配置
编辑配置文件
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.48.100
}
}
virtual_server 192.168.48.100 80 {
delay_loop 3
lb_algo rr
lb_kind DR
protocol TCP
real_server 192.168.48.144 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 192.168.48.142 80 {
weight 1
TCP_CHECK {
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
启动服务
systemctl start keepalived
执行下面命令文件会完整传到备机 server4,但复制完不能直接启动,要改配置。
scp /etc/keepalived/keepalived.conf server4:/etc/keepalived/

修改 :state + priority
```bash
# 主机是MASTER、优先级100
state BACKUP
priority 50
备机重启加载配置
systemctl restart keepalived

测试:
Keepalived 由 核心组件 和 配置文件 两部分组成,配置决定其行为逻辑。 核心组件 ● vrrp_instance:VRRP 实例,是 Keepalived 配置的核心单元,一个实例对应一个 VIP 及一组主备节点(如 VI_1 实例管理 VIP 192.168.36.200)。 ● Global_defs:全局配置,定义集群标识(如 router_id)、邮件通知(故障时发告警邮件)等基础参数。 ● Track_script:健康检查脚本,用于检测主节点上 “核心业务服务”(如 Nginx、LVS)是否存活。若服务挂了,即使主节点本身存活,也会主动释放 VIP,触发切换(避免 “主节点存活但服务不可用” 的问题)。
四、7层负载均衡
停止 Keepalived(server1 和 server4)
systemctl stop keepalived
server1 安装 HAProxy
yum install -y haproxy
创建 HAProxy 配置文件
vim /etc/haproxy/haproxy.cfg
注释这些内容

frontend main *:80
mode http
default_backend app
backend app
balance roundrobin
server server2 192.168.48.144:80 check
server server3 192.168.48.142:80 check
启动 HAProxy
systemctl start haproxy
HAProxy是单线程
总结
通过本篇教程的实践,我们系统地完成了从四层到七层、从基础负载均衡到高可用集群的完整搭建与验证。让我们回顾一下核心要点与收获:
1. 技术栈演进与对比
- LVS (DR/NAT 模式):作为四层负载均衡的标杆,其核心优势在于高性能与低延迟。DR 模式通过数据链路层改写 MAC 地址,让 Real Server 直接响应客户端,是追求极致性能场景的首选。NAT 模式则更灵活,支持 Real Server 与客户端在不同网段,但调度器会成为双向流量的瓶颈。
- Keepalived:解决了 LVS 调度器自身的单点故障问题。它通过 VRRP 协议实现主备节点的 VIP 漂移和健康检查,当主节点故障时,备节点能在秒级内自动接管,保障服务不间断,是构建高可用集群的基石。
- HAProxy:作为七层负载均衡的代表,它提供了应用层(HTTP)的智能路由能力。可以根据 URL、Cookie、Header 等信息进行精细化的流量分发,适用于需要会话保持、动静分离、SSL 卸载等复杂策略的场景。
2. 关键配置与原理
- ARP 抑制:在 LVS-DR 模式中,这是避免多台 Real Server 响应 VIP ARP 请求、导致 IP 冲突的关键配置。
- 网关指向:在 LVS-NAT 模式中,Real Server 的默认网关必须指向调度器的 DIP,这是实现地址转换和回包路由的基础。
- 健康检查:无论是 Keepalived 对 Real Server 的 TCP_CHECK,还是 HAProxy 后端的 check 参数,都实现了对后端服务可用性的自动感知,这是实现负载均衡“高可用”而非“高故障”的核心。
3. 生产环境建议
- 模式选择:内部服务、同机房且对性能要求极高,优先选择 LVS-DR + Keepalived。需要跨网段或 Real Server 无需暴露公网 IP 时,可考虑 LVS-NAT。对于 Web 应用,需要基于域名、路径做路由时,HAProxy 或 Nginx 是更合适的选择。
- 监控与告警:搭建完成只是第一步,必须配套完善的监控(如监控 VIP 状态、连接数、后端节点健康状态)和告警机制。
- 灰度与演练:任何配置变更都应先在测试环境验证。定期进行故障切换演练,确保高可用机制在真实故障时能如期生效。
负载均衡与高可用是构建现代分布式系统的必备技能。希望本教程能成为您探索更广阔架构世界的一块坚实垫脚石。下一步,您可以尝试将这套体系与容器编排(如 Kubernetes)、服务网格(如 Istio)等云原生技术结合,构建更具弹性与韧性的下一代应用架构。
网硕互联帮助中心




评论前必须登录!
注册