[一、LVS DR 模式负载均衡集群](#一、LVS DR 模式负载均衡集群)
[1. LVS DR 模式工作原理(Direct Routing)](#1. LVS DR 模式工作原理(Direct Routing))
[1.1 数据包流向分析](#1.1 数据包流向分析)
[1.2 DR 模式特点](#1.2 DR 模式特点)
[2. DR 模式部署步骤](#2. DR 模式部署步骤)
[2.0 环境规划](#2.0 环境规划)
[2.0.1 服务器规划](#2.0.1 服务器规划)
[2.1 配置负载调度器(Director Server)](#2.1 配置负载调度器(Director Server))
[(1) 系统配置](#(1) 系统配置)
[(2) 配置虚拟IP](#(2) 配置虚拟IP)
[(3) 调整内核参数](#(3) 调整内核参数)
[(4) 配置 LVS 服务及调度](#(4) 配置 LVS 服务及调度)
[2.2 配置节点服务器(Real Server)](#2.2 配置节点服务器(Real Server))
[(1) 配置 VIP 到 lo 接口](#(1) 配置 VIP 到 lo 接口)
[(2) ARP 参数调整,避免MAC冲突](#(2) ARP 参数调整,避免MAC冲突)
[(3) 安装 Web 服务](#(3) 安装 Web 服务)
[2.3 测试 LVS 集群](#2.3 测试 LVS 集群)
[3. LVS 面试知识点整理](#3. LVS 面试知识点整理)
[3.1 LVS 三种工作模式](#3.1 LVS 三种工作模式)
[3.2 LVS 调度算法](#3.2 LVS 调度算法)
[3.3 Nginx vs LVS vs HAProxy 区别](#3.3 Nginx vs LVS vs HAProxy 区别)
[二、LVS + Keepalived 高可用集群](#二、LVS + Keepalived 高可用集群)
[1. 概念与原理](#1. 概念与原理)
[1.1 Keepalived](#1.1 Keepalived)
[1.2 VRRP 工作原理](#1.2 VRRP 工作原理)
[1.3 Keepalived 主要模块](#1.3 Keepalived 主要模块)
[2. 脑裂问题与防护](#2. 脑裂问题与防护)
[2.1 脑裂(Split Brain)](#2.1 脑裂(Split Brain))
[2.2 原因](#2.2 原因)
[2.3 防护策略](#2.3 防护策略)
[3. 部署步骤](#3. 部署步骤)
[3.1 环境准备](#3.1 环境准备)
[3.2 安装与配置 LVS + Keepalived](#3.2 安装与配置 LVS + Keepalived)
[3.2.1 DR 服务器操作](#3.2.1 DR 服务器操作)
[3.2.2 配置 Keepalived](#3.2.2 配置 Keepalived)
[3.2.3 启动服务](#3.2.3 启动服务)
[3.2.4 内核参数优化](#3.2.4 内核参数优化)
[3.3 配置 Web 节点](#3.3 配置 Web 节点)
[3.4 测试](#3.4 测试)
[3.5 小结与注意事项](#3.5 小结与注意事项)
前言
在当今高并发互联网应用中,单台服务器往往难以应对巨大的流量压力,且存在单点故障风险。负载均衡技术通过将流量分发到多台服务器,能够有效提升系统处理能力和服务可靠性。
LVS(Linux Virtual Server)作为内核级四层负载均衡器,以其卓越性能成为构建大型集群的首选。其中的DR(Direct Routing)模式通过让真实服务器直接响应客户端请求,避免了负载均衡器成为瓶颈,是实现高性能负载均衡的理想方案。
本文将深入讲解LVS-DR模式的工作原理和部署实践,并详细介绍如何通过Keepalived实现高可用集群,为构建稳定可靠的网络服务提供实用指导。
一、LVS DR 模式负载均衡集群
1. LVS DR 模式工作原理(Direct Routing)
1.1 数据包流向分析
-
客户端 → Director(负载均衡器)
- 客户端发送请求到 VIP(虚拟IP),数据包到达 Director Server 内核空间。
-
Director → Real Server(真实服务器)
-
Director 判断数据包目标IP为VIP,是集群服务请求,修改:
-
目标MAC:Real Server MAC
-
源MAC:Director Server MAC
-
-
IP地址保持不变,发送到 Real Server。
-
-
Real Server 处理请求
-
接收报文(目标MAC为自身),通过
lo
接口配置 VIP 处理请求。 -
响应报文源IP为 VIP,目标IP为客户端(CIP),直接发送给客户端。
-
-
客户端接收响应
- 响应报文不经过 Director Server。
1.2 DR 模式特点
-
Director Server 与 Real Server 必须在同一物理网络。
-
Real Server 可以使用私有或公网地址。
-
Director 仅作为请求入口,不作为网关。
-
所有请求经过 Director,响应直接由 Real Server 发送。
-
Real Server 的网关不能指向 Director Server。
-
Real Server 的
lo
接口配置 VIP。
2. DR 模式部署步骤
2.0 环境规划
2.0.1 服务器规划
-
DR 服务器:192.168.114.129
-
Web 服务器1:192.168.114.252
-
Web 服务器2:192.168.114.253
-
VIP:192.168.114.180
2.1 配置负载调度器(Director Server)
环境部署
-
IP:
192.168.114.129
-
VIP:
192.168.114.180
(1) 系统配置
bash
systemctl stop firewalld.service
systemctl stop iptables.service
setenforce 0
modprobe ip_vs
yum -y install ipvsadm
(2) 配置虚拟IP
bash
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
# 内容
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
ifup ens33:0 # 开启网卡
ifconfig ens33:0 # 查看网卡
(3) 调整内核参数
bash
vim /etc/sysctl.conf
# 添加
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
(4) 配置 LVS 服务及调度
bash
# 如果有报错文件不存在,需要先添加规则再保存
ipvsadm-save > /etc/sysconfig/ipvsadm # 保存导出
ipvsadm-restore < /etc/sysconfig/ipvsadm # 恢复
systemctl start ipvsadm
ipvsadm -C
ipvsadm -A -t 192.168.114.180:80 -s rr
ipvsadm -a -t 192.168.114.180:80 -r 192.168.114.252:80 -g
ipvsadm -a -t 192.168.114.180:80 -r 192.168.114.253:80 -g
ipvsadm -ln # 查看节点状态,Route代表DR模式
2.2 配置节点服务器(Real Server)
- IP:
192.168.114.252
、192.168.114.253
(1) 配置 VIP 到 lo
接口
bash
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
# 内容
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
ifup lo:0
ifconfig lo:0
route add -host 192.168.114.180 dev lo:0
(2) ARP 参数调整,避免MAC冲突
bash
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
(3) 安装 Web 服务
bash
# 选择一种方式安装Web服务
# 1、编译安装nginx
# 2、yum install nginx (需要epel-release源)
# 3、yum install httpd
# 192.168.114.16
echo 'this is 192.168.114.252 web01!' > /var/www/html/index.html
# 192.168.114.17
echo 'this is 192.168.114.253 web02!' > /var/www/html/index.html
2.3 测试 LVS 集群
-
在客户端浏览器访问:
http://192.168.114.180/
-
应轮询显示不同节点页面内容。
注意:LVS-DR 用户访问 http://192.168.114.180/
下次刷新时可能有约50秒延迟
3. LVS 面试知识点整理
3.1 LVS 三种工作模式
模式 | 原理 | 优缺点 |
---|---|---|
NAT(VS/NAT) | Director 改变数据包目标IP并转发,RS响应包回到Director再发客户端 | 优点:节点可任意OS;缺点:Director是瓶颈 |
DR(VS/DR) | Director 改变目标MAC地址,RS直接响应客户端 | 优点:Director不处理响应;缺点:节点需与Director同网段 |
TUN(VS/TUN) | Director 封装IP包到隧道,RS解封直接响应客户端 | 优点:Director不处理响应;缺点:节点需支持IP隧道 |
3.2 LVS 调度算法
-
固定调度:rr、wrr、dh、sh
-
动态调度:lc、wlc、lblc
算法 | 描述 |
---|---|
rr | 轮询,每个RS均摊 |
wrr | 加权轮询,权重高的分配多 |
dh | 目的地址哈希分配 |
sh | 源地址哈希分配 |
lc | 最少连接数 |
wlc | 加权最少连接 |
lblc | 基于地址的最少连接 |
3.3 Nginx vs LVS vs HAProxy 区别
特性 | Nginx | LVS (Linux Virtual Server) | HAProxy |
---|---|---|---|
定位 | Web 服务器 + 反向代理 + 负载均衡 | 内核级四层负载均衡 | 专业负载均衡器(四层+七层) |
工作层级 | 四层(TCP)+ 七层(HTTP/HTTPS) | 四层(TCP/UDP,传输层) | 四层 + 七层 |
性能 | 高(软件级,单机可达十万级并发) | 极高(内核态,百万级并发) | 高(接近 Nginx,但更专注负载均衡) |
功能特点 | - 静态资源服务 - 反向代理 - 缓存 - 支持 HTTP/HTTPS 负载均衡 | - 高性能转发 - 调度算法丰富(RR、LC、SH...) - 内核态转发,几乎无性能损耗 | - 专注于负载均衡 - 健康检查更强大 - 支持会话保持、SSL 卸载等 |
健康检查 | 简单(TCP/HTTP) | 依赖 Keepalived 或其他工具 | 强大(多协议、多方式) |
配置复杂度 | 简单 | 较复杂(需 ipvsadm/keepalived 配合) | 中等(配置文件灵活) |
适用场景 | Web 代理、动静分离、中小型集群 | 超大规模集群、核心四层调度 | 高可用集群、对健康检查要求高的业务 |
一句话总结:
-
Nginx:轻量、全能,适合 Web 服务和中小型负载均衡。
-
LVS:极致性能,适合四层超大规模集群,但功能单一。
-
HAProxy:专业负载均衡器,四层+七层都行,健康检查能力最强。
二、LVS + Keepalived 高可用集群
1. 概念与原理
1.1 Keepalived
-
基于 VRRP 协议实现高可用(HA)。
-
初衷是为 LVS 负载均衡提供高可用方案,后来支持其他服务(如 Nginx、MySQL 等)。
-
功能:
-
LVS 集群管理
-
节点健康检查(Health Check)
-
故障自动切换(Failover)
-
高可用 VIP(虚拟 IP)接管
-
1.2 VRRP 工作原理
-
MASTER 节点发送心跳(通告)给 BACKUP 节点。
-
BACKUP 节点收不到心跳时,接管 VIP。
-
MASTER 恢复时,可抢回 VIP(抢占模式)或不抢回(非抢占模式)。
-
默认多播地址:224.0.0.18
-
优先级决定 MASTER 节点(数值越大优先)。
1.3 Keepalived 主要模块
模块 | 功能 |
---|---|
core | 核心进程、配置文件加载解析 |
vrrp | VRRP 协议实现,高可用 |
check | 健康检查,支持 TCP/HTTP/脚本检查 |
2. 脑裂问题与防护
2.1 脑裂(Split Brain)
-
两个节点失去心跳连接,均认为对方挂掉。
-
后果:
-
共享资源冲突
-
数据损坏(如数据库)
-
2.2 原因
-
心跳线故障(断线、老化)
-
网卡/驱动故障
-
心跳网络设备故障
-
仲裁机器异常
-
防火墙阻挡 VRRP
-
配置不一致(virtual_router_id、优先级、实例名)
-
vrrp实例名字不一致、优先级一致
2.3 防护策略
-
双心跳线冗余
-
磁盘锁(锁定共享资源)
-
仲裁机制(Ping 参考 IP)
-
脚本监控报警
3. 部署步骤
3.1 环境准备
-
主 DR:192.168.114.129(MASTER)
-
备 DR:192.168.114.251(BACKUP)
-
VIP:192.168.114.180
-
Web 节点:
-
192.168.114.252
-
192.168.114.253
-
-
客户端:192.168.114.1
3.2 安装与配置 LVS + Keepalived
3.2.1 DR 服务器操作
bash
systemctl stop firewalld
setenforce 0
yum -y install ipvsadm keepalived
modprobe ip_vs
cat /proc/net/ip_vs # 检查模块
3.2.2 配置 Keepalived
-
文件:
/etc/keepalived/keepalived.conf
-
关键配置:
text
global_defs {
router_id LVS_01 # MASTER 为 LVS_01,BACKUP 为 LVS_02
smtp_server 127.0.0.1
}
vrrp_instance VI_1 {
state MASTER # BACKUP 节点写 BACKUP
interface ens33
virtual_router_id 100
priority 100 # MASTER 高于 BACKUP
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.114.180
}
}
virtual_server 192.168.114.180 80 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 50
protocol TCP
real_server 192.168.114.252 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.114.253 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
- VIP 配置:
bash
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
- 重启网络:
bash
systemctl restart network
ifup ens33:0
3.2.3 启动服务
bash
systemctl start keepalived
ip addr # 查看 VIP 是否生效
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm
ipvsadm -ln # 查看 LVS 配置
3.2.4 内核参数优化
bash
vim /etc/sysctl.conf
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
sysctl -p
3.3 配置 Web 节点
bash
systemctl stop firewalld
setenforce 0
yum -y install httpd
systemctl start httpd
echo 'this is kgc web!' > /var/www/html/index.html # 192.168.114.252
echo 'this is benet web!' > /var/www/html/index.html # 192.168.114.253
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.114.180
NETMASK=255.255.255.255
service network restart
ifup lo:0
route add -host 192.168.114.180 dev lo:0
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p
3.4 测试
-
客户端访问 VIP:
text
http://192.168.114.180/
-
停掉 MASTER Keepalived:
bash
systemctl stop keepalived
-
观察 BACKUP 节点接管 VIP 是否成功。
-
再启动 MASTER,观察 VIP 是否回归(抢占或非抢占模式)。
-
3.5 小结与注意事项
项目 | 注意点 |
---|---|
VIP | DR 节点配置 VIP 网卡 ens33:0,Web 节点配置 lo:0 |
抢占模式 | MASTER 恢复会抢回 VIP,非抢占模式需配置 nopreempt |
健康检查 | Keepalived 支持 TCP/HTTP 检查,可防止故障节点被调度 |
防火墙 | Firewalld 需关闭,确保 VRRP 心跳消息畅通 |
脑裂防护 | 双心跳线、磁盘锁、仲裁 IP、脚本监控 |
通过本文的详细讲解,您应该对 LVS-DR 模式的工作原理、部署步骤以及如何结合 Keepalived 实现高可用集群有了全面的了解。这些知识对于构建高性能、高可用的负载均衡系统至关重要。