文章目录
- 一、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.1 环境规划](#2.1 环境规划)
-
- [2.1.1 服务器规划](#2.1.1 服务器规划)
- [2.1.2 环境架构](#2.1.2 环境架构)
- [2.2 配置负载调度器(Director Server)](#2.2 配置负载调度器(Director Server))
-
- [2.2.1 系统配置](#2.2.1 系统配置)
- [2.2.2 配置虚拟IP](#2.2.2 配置虚拟IP)
- [2.2.3 调整内核参数](#2.2.3 调整内核参数)
- [2.2.4 配置LVS服务及调度](#2.2.4 配置LVS服务及调度)
- [2.3 配置节点服务器(Real Server)](#2.3 配置节点服务器(Real Server))
-
- [2.3.1 配置VIP到lo接口](#2.3.1 配置VIP到lo接口)
- [2.3.2 ARP参数调整(避免MAC冲突)](#2.3.2 ARP参数调整(避免MAC冲突))
- [2.3.3 安装Web服务](#2.3.3 安装Web服务)
- [2.4 测试LVS群集](#2.4 测试LVS群集)
- 3、LVS面试知识点整理
-
- [3.1 LVS三种工作模式](#3.1 LVS三种工作模式)
- [3.2 LVS调度算法](#3.2 LVS调度算法)
-
- [3.2.1 固定调度算法](#3.2.1 固定调度算法)
- [3.2.2 动态调度算法](#3.2.2 动态调度算法)
- [3.3 Nginx vs LVS vs HAProxy区别](#3.3 Nginx vs LVS vs HAProxy区别)
- [3.4 一句话总结](#3.4 一句话总结)
- 二、LVS+Keepalived群集
-
- 1、概念与原理
-
- [1.1 Keepalived](#1.1 Keepalived)
- [1.2 VRRP工作原理](#1.2 VRRP工作原理)
- [1.3 Keepalived主要模块](#1.3 Keepalived主要模块)
- 2、脑裂问题与防护
-
- [2.1 脑裂(Split Brain)](#2.1 脑裂(Split Brain))
- [2.2 脑裂原因](#2.2 脑裂原因)
- [2.3 防护策略](#2.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 VIP配置](#3.2.3 VIP配置)
- [3.2.4 启动服务](#3.2.4 启动服务)
- [3.2.5 内核参数优化](#3.2.5 内核参数优化)
- [3.3 配置Web节点](#3.3 配置Web节点)
- [3.4 测试](#3.4 测试)
- [3.5 小结与注意事项](#3.5 小结与注意事项)
一、LVS-DR模式负载均衡群集
1、LVS DR模式工作原理(Direct Routing)
1.1 数据包流向分析
- 客户端向VIP(虚拟IP)发送请求,数据包到达Director Server内核空间。
- Director判断目标IP为VIP,修改数据包的目标MAC为Real Server MAC、源MAC为自身MAC,IP地址保持不变后发送给Real Server。
- Real Server通过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.1 环境规划
2.1.1 服务器规划
- DR服务器:192.168.10.23
- Web服务器1:192.168.10.16
- Web服务器2:192.168.10.17
- VIP:192.168.10.180
2.1.2 环境架构
DR模式LVS负载均衡群集,客户端(192.168.10.200)通过外网路由器(网关192.168.10.1)访问VIP(192.168.10.180),Director Server(192.168.10.23)转发请求至两台Real Server,响应直接由Real Server返回客户端。
2.2 配置负载调度器(Director Server)
2.2.1 系统配置
bash
# 关闭防火墙
systemctl stop firewalld.service
# 关闭SELinux
setenforce 0
# 加载ip_vs模块
modprobe ip_vs
# 安装ipvsadm工具
yum -y install ipvsadm
2.2.2 配置虚拟IP
bash
# 进入网络脚本目录
cd /etc/sysconfig/network-scripts/
# 复制网卡配置文件
cp ifcfg-ens33 ifcfg-ens33:0
# 编辑配置文件(内容如下)
vim ifcfg-ens33:0
# 激活虚拟网卡
ifup ens33:0
# 验证配置
ifconfig ens33:0
ifcfg-ens33:0 配置内容:
ini
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.2.3 调整内核参数
bash
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加参数:
ini
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
2.2.4 配置LVS服务及调度
bash
# 清空原有配置
ipvsadm -C
# 添加虚拟服务(VIP:80,轮询调度)
ipvsadm -A -t 192.168.10.180:80 -s rr
# 添加Real Server节点(DR模式 -g)
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.16:80 -g
ipvsadm -a -t 192.168.10.180:80 -r 192.168.10.17:80 -g
# 查看节点状态(Route代表DR模式)
ipvsadm -ln
2.3 配置节点服务器(Real Server)
2.3.1 配置VIP到lo接口
bash
# 进入网络脚本目录
cd /etc/sysconfig/network-scripts/
# 复制lo接口配置
cp ifcfg-lo ifcfg-lo:0
# 编辑配置文件(内容如下)
vim ifcfg-lo:0
# 激活接口
ifup lo:0
# 验证配置
ifconfig lo:0
# 添加路由(绑定VIP到lo接口)
route add -host 192.168.10.180 dev lo:0
ifcfg-lo:0 配置内容:
ini
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
2.3.2 ARP参数调整(避免MAC冲突)
bash
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加参数:
ini
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
2.3.3 安装Web服务
bash
# 安装httpd(两台Real Server均执行)
yum -y install httpd
systemctl start httpd
# 192.168.10.16 服务器配置首页
echo 'this is 192.168.10.16 web01!' > /var/www/html/index.html
# 192.168.10.17 服务器配置首页
echo 'this is 192.168.10.17 web02!' > /var/www/html/index.html
2.4 测试LVS群集
bash
# 客户端执行(或直接浏览器访问 http://192.168.10.180/)
curl http://192.168.10.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调度算法
3.2.1 固定调度算法
- rr:轮询,每个RS均摊请求
- wrr:加权轮询,权重高的分配更多请求
- dh:目的地址哈希分配
- sh:源地址哈希分配
3.2.2 动态调度算法
- 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负载均衡 | 高性能转发、调度算法丰富、内核态转发几乎无性能损耗 | 专注于负载均衡、健康检查更强大、支持会话保持、SSL卸载等 |
| 健康检查 | 简单(TCP/HTTP) | 依赖Keepalived或其他工具 | 强大(多协议、多方式) |
| 配置复杂度 | 简单 | 较复杂(需ipvsadm/keepalived配合) | 中等(配置文件灵活) |
| 适用场景 | Web代理、动静分离、中小型集群 | 超大规模集群、核心四层调度 | 高可用集群、对健康检查要求高的业务 |
| 优缺点 | 优点:功能多,易上手;缺点:七层性能不如LVS/HAProxy | 优点:性能最强,稳定;缺点:只能四层,配置偏复杂 | 优点:专业负载均衡,健康检查强;缺点:不自带Web服务 |
3.4 一句话总结
- 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):通过ping网关等参考IP判断自身网络状态,决定是否竞争VIP。
- 脚本监控报警:及时发现并告警脑裂问题。
3、部署步骤
3.1 环境准备
- 主DR(MASTER):192.168.10.80
- 备DR(BACKUP):192.168.10.23
- VIP:192.168.10.180
- Web节点:192.168.10.16、192.168.10.17
- 客户端:192.168.10.100
3.2 安装与配置LVS + Keepalived
3.2.1 DR服务器操作
bash
# 关闭防火墙
systemctl stop firewalld
# 关闭SELinux
setenforce 0
# 安装工具
yum -y install ipvsadm keepalived
# 加载ip_vs模块
modprobe ip_vs
# 检查模块
cat /proc/net/ip_vs
3.2.2 配置Keepalived
bash
# 编辑配置文件
vim /etc/keepalived/keepalived.conf
MASTER节点 keepalived.conf 配置:
ini
global_defs {
router_id LVS_01 # 路由ID,BACKUP节点设为LVS_02
smtp_server 127.0.0.1
}
vrrp_instance VI_1 {
state MASTER # BACKUP节点设为BACKUP
interface ens33 # 绑定网卡
virtual_router_id 10 # 虚拟路由ID,主备需一致
priority 100 # 优先级,BACKUP设为90
advert_int 1 # 心跳间隔1秒
authentication {
auth_type PASS
auth_pass abc123 # 认证密码,主备需一致
}
virtual_ipaddress {
192.168.10.180 # VIP地址
}
}
virtual_server 192.168.10.180 80 {
delay_loop 6 # 健康检查间隔
lb_algo rr # 调度算法(轮询)
lb_kind DR # 负载均衡模式(DR)
persistence_timeout 50 # 会话保持时间
protocol TCP # 协议
real_server 192.168.10.16 80 {
weight 1 # 权重
TCP_CHECK {
connect_port 80 # 检查端口
connect_timeout 3 # 超时时间
nb_get_retry 3 # 重试次数
delay_before_retry 3 # 重试间隔
}
}
real_server 192.168.10.17 80 {
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
3.2.3 VIP配置
bash
# 编辑虚拟网卡配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
# 重启网络
systemctl restart network
# 激活网卡
ifup ens33:0
ifcfg-ens33:0 配置内容:
ini
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.10.180
NETMASK=255.255.255.255
3.2.4 启动服务
bash
# 启动keepalived
systemctl start keepalived
# 查看VIP(确认是否绑定)
ip addr
# 保存LVS配置
ipvsadm-save > /etc/sysconfig/ipvsadm
# 启动ipvsadm
systemctl start ipvsadm
# 查看LVS配置
ipvsadm -ln
3.2.5 内核参数优化
bash
# 编辑sysctl.conf文件
vim /etc/sysctl.conf
# 生效配置
sysctl -p
sysctl.conf 添加参数:
ini
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
3.3 配置Web节点
bash
# 关闭防火墙
systemctl stop firewalld
# 关闭SELinux
setenforce 0
# 安装httpd
yum -y install httpd
# 启动httpd
systemctl start httpd
# 192.168.10.16 配置首页
echo 'this is kgc web!' > /var/www/html/index.html
# 192.168.10.17 配置首页
echo 'this is benet web!' > /var/www/html/index.html
# 配置lo:0接口(同DR模式Real Server配置)
# 配置ARP参数(同前)
3.4 测试
bash
# 1. 客户端访问VIP,验证服务
curl http://192.168.10.180/
# 2. 停掉MASTER的Keepalived,观察BACKUP是否接管VIP
systemctl stop keepalived # MASTER节点执行
ip addr # BACKUP节点执行,查看VIP是否出现
# 3. 启动MASTER的Keepalived,观察VIP是否回归
systemctl start keepalived # MASTER节点执行
ip addr # MASTER节点执行,查看VIP是否回归
3.5 小结与注意事项
| 项目 | 注意点 |
|---|---|
| VIP | DR节点配置VIP网卡ens33:0,Web节点配置lo:0 |
| 抢占模式 | MASTER恢复会抢回VIP,非抢占模式需配置nopreempt |
| 健康检查 | Keepalived支持TCP/HTTP检查,可防止故障节点被调度 |
| 防火墙 | Firewalld需关闭,确保VRRP心跳消息畅通 |
| 脑裂防护 | 采用双心跳线、磁盘锁、仲裁IP、脚本监控等策略 |