LVS+Keepalived 高可用集群实战精讲从原理到上线全流程

前言

在企业级服务器架构中,单点故障是制约系统稳定性的核心痛点。LVS(Linux Virtual Server)作为内核级四层负载均衡工具,凭借高性能成为高并发场景的首选;但 LVS 本身存在调度器单点故障问题,而 Keepalived 基于 VRRP 协议的双机热备机制,完美解决了这一缺陷。本文将以 OpenEuler 系统为基础,结合图片中的核心知识点,从原理剖析、环境规划、详细配置到故障测试,全面讲解 LVS+Keepalived 高可用集群的搭建过程,助力运维人员掌握企业级高可用架构实战技能。

一、LVS+Keepalived 核心理论基础

1.1 LVS 负载均衡技术深度解析

LVS 由章文嵩博士开发,是 Linux 内核原生集成的负载均衡解决方案,工作在内核态,转发性能远超 Nginx、HAProxy 等用户态工具,支持百万级并发请求处理,是大型电商、金融、政务平台的核心负载均衡组件。

1.1.1 LVS 核心架构

LVS 架构包含三层核心节点:

  • 负载调度器(Director) :集群入口,负责接收客户端请求并根据调度算法分发至后端真实服务器,核心依赖ip_vs内核模块。
  • 真实服务器(Real Server, RS):后端业务节点,部署具体业务服务(如 Web、数据库),处理实际业务逻辑并返回结果。
  • 客户端(Client):发起请求的终端设备,仅需访问调度器的虚拟服务地址,无需感知后端 RS 节点。
1.1.2 LVS 三种工作模式

LVS 支持三种 IP 负载均衡模式,不同模式适配不同业务场景:

  1. NAT 模式(网络地址转换)
    • 原理:调度器修改请求报文的目标 IP 为 RS 的 IP,响应报文经调度器转发至客户端,调度器同时转换源 IP。
    • 特点:RS 可使用任意操作系统,调度器承担双向流量,性能瓶颈明显,仅适合小规模集群。
  2. TUN 模式(IP 隧道)
    • 原理:调度器通过 IP 隧道封装请求报文,发送至 RS,RS 解包后直接响应客户端(无需经调度器)。
    • 特点:RS 可跨地域部署,支持大规模集群,但隧道封装增加网络开销。
  3. DR 模式(直接路由)
    • 原理:调度器仅修改请求报文的目标 MAC 地址为 RS 的 MAC,IP 地址保持不变;RS 通过本地回环接口绑定 VIP,直接响应客户端。
    • 特点:性能最优(仅处理请求流量),支持超大规模集群,是企业主流选择,本文重点讲解 DR 模式。
1.1.3 LVS 核心调度算法

LVS 内置 10 种调度算法,核心分为三类,适配不同业务负载特征:

  • 轮询类:rr(轮询)、wrr(加权轮询)------ 均衡分配请求,适合 RS 性能一致的场景。
  • 最小连接类:lc(最小连接)、wlc(加权最小连接)------ 优先分配请求至连接数最少的 RS,适合 RS 性能不均的场景。
  • 哈希类:dh(目标 IP 哈希)、sh(源 IP 哈希)------ 基于 IP 哈希实现会话绑定,适合有状态业务。

1.2 Keepalived 高可用核心原理

Keepalived 是专为 LVS 设计的高可用工具,核心基于 **VRRP(虚拟路由冗余协议)** 实现双机热备,同时集成健康检查功能,保障集群节点可用性。

1.2.1 VRRP 协议工作机制

VRRP 协议将多台物理服务器虚拟为一个虚拟路由器,共享一个虚拟 IP(VIP),对外提供统一服务入口,核心逻辑如下:

  1. 角色划分:节点分为 MASTER(主节点)和 BACKUP(备节点),MASTER 持有 VIP 并处理业务,BACKUP 监听 MASTER 状态。
  2. 优先级选举:通过优先级(1-255)决定主备归属,优先级越高越易成为 MASTER,默认优先级 100。
  3. 心跳检测:MASTER 每秒发送 VRRP 通告报文(组播地址 224.0.0.18,端口 112),BACKUP 未在 3 倍通告间隔内收到报文时,判定 MASTER 故障,自动接管 VIP(IP 漂移)。
  4. 状态切换:切换过程对客户端透明,仅需修改 ARP 映射,无需修改客户端路由配置。
1.2.2 Keepalived 核心组件

Keepalived 通过三大组件协同工作,实现高可用与负载均衡一体化:

  1. VRRP 协议栈:核心组件,负责主备选举、心跳通信、VIP 漂移,是 IP 冗余的基础。
  2. 健康检查模块(Checkers):实时检测 LVS 调度器和后端 RS 的可用性,支持 TCP 端口检测、HTTP 接口检测、脚本自定义检测,服务故障时自动剔除异常节点。
  3. IPVS 封装模块 :直接管理 LVS 的ip_vs规则,无需手动执行ipvsadm命令,实现负载均衡规则与高可用配置统一管理。

1.3 LVS+Keepalived 集群核心价值

  1. 消除调度器单点故障:双机热备机制确保 MASTER 故障时,BACKUP 秒级接管 VIP,业务无感知恢复。
  2. 智能节点健康检测:自动剔除故障 RS,避免请求转发至异常节点,提升业务可用性。
  3. 高性能负载均衡:LVS 内核态转发 + Keepalived 轻量级检测,兼顾性能与高可用,适配高并发场景。
  4. 零成本扩展:支持横向扩展 RS 节点,无需修改核心架构,满足业务增长需求。

二、环境规划与前置准备

2.1 集群架构设计

本文采用LVS-DR 模式 + Keepalived 双机热备架构,包含 2 台 LVS 调度器、2 台后端 RS 节点,架构图如下(结合图片核心拓扑):

复制代码
┌─────────────────┐      ┌─────────────────┐
│  客户端(Client)│      │  交换机(Switch)│
└────────┬────────┘      └────────┬────────┘
         │                        │
         ▼                        ▼
┌─────────────────┐      ┌─────────────────┐
│  VIP:192.168.1.100 │      │ LVS-MASTER(主)│
│  对外服务入口     │      │ IP:192.168.1.10│
└────────┬────────┘      │ Keepalived+LVS │
         │               └────────┬────────┘
         │                        │
         │               ┌─────────────────┐
         │               │ LVS-BACKUP(备)│
         │               │ IP:192.168.1.11│
         └───────────────▶│ Keepalived+LVS │
                         └────────┬────────┘
                                  │
         ┌─────────────────┐      │      ┌─────────────────┐
         │  Web-Node1      │◀─────┴─────▶│  Web-Node2      │
         │ IP:192.168.1.12│             │ IP:192.168.1.13│
         │ 部署Nginx       │             │ 部署Nginx       │
         └─────────────────┘             └─────────────────┘

2.2 服务器 IP 规划

表格

节点角色 IP 地址 系统版本 核心软件 备注
LVS-MASTER 192.168.1.10 OpenEuler 24.03 keepalived、ipvsadm 主调度器,持有 VIP
LVS-BACKUP 192.168.1.11 OpenEuler 24.03 keepalived、ipvsadm 备调度器,备用 VIP
Web-Node1 192.168.1.12 OpenEuler 24.03 nginx 后端真实服务器 1
Web-Node2 192.168.1.13 OpenEuler 24.03 nginx 后端真实服务器 2
虚拟 IP(VIP) 192.168.1.100 - - 对外统一服务入口

2.3 前置环境配置(所有节点)

2.3.1 系统基础优化
复制代码
# 1. 关闭防火墙(生产环境需开放对应端口,测试环境建议关闭)
systemctl stop firewalld
systemctl disable firewalld

# 2. 关闭SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 3. 配置主机名(便于区分)
hostnamectl set-hostname LVS-MASTER # 主调度器
# 备调度器执行:hostnamectl set-hostname LVS-BACKUP
# Web节点执行:hostnamectl set-hostname Web-Node1/Web-Node2

# 4. 配置hosts解析
cat >> /etc/hosts << EOF
192.168.1.10 LVS-MASTER
192.168.1.11 LVS-BACKUP
192.168.1.12 Web-Node1
192.168.1.13 Web-Node2
EOF

# 5. 重启系统生效(可选)
reboot
2.3.2 内核参数优化(DR 模式必备)

DR 模式下,RS 节点需配置 ARP 参数,避免 ARP 广播冲突,核心参数如下:

复制代码
# 编辑内核参数配置文件
cat > /etc/sysctl.d/99-lvs-arp.conf << EOF
# 回环接口仅响应目标IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1
# 回环接口不使用源IP发送ARP请求,优先使用发送接口IP
net.ipv4.conf.lo.arp_announce = 2
# 所有接口统一ARP配置
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# 允许绑定非本地IP(VIP漂移必备)
net.ipv4.ip_nonlocal_bind = 1
EOF

# 生效内核参数
sysctl -p /etc/sysctl.d/99-lvs-arp.conf

三、 后端真实服务器(RS)配置

3.1 Nginx 安装与配置

3.1.1 安装 Nginx

以 OpenEuler 系统为例,安装 Nginx 并配置开机自启:

复制代码
# 1. 安装Nginx依赖
yum install -y nginx

# 2. 启动Nginx并设置开机自启
systemctl start nginx
systemctl enable nginx

# 3. 验证Nginx状态
systemctl status nginx
curl http://127.0.0.1 # 测试是否正常启动
3.1.2 定制 Web 页面(区分节点)

为两台 RS 节点配置不同的首页内容,便于测试负载均衡效果:

复制代码
# Web-Node1执行
echo "Web-Node1 - IP: 192.168.1.12" > /usr/share/nginx/html/index.html

# Web-Node2执行
echo "Web-Node2 - IP: 192.168.1.13" > /usr/share/nginx/html/index.html

3.2 RS 节点 VIP 配置(DR 模式核心)

DR 模式下,RS 节点需在回环接口(lo:0)绑定 VIP,仅用于响应客户端请求,不监听客户端连接,配置如下:

复制代码
# 1. 创建回环接口配置文件
cat > /etc/sysconfig/network-scripts/ifcfg-lo:0 << EOF
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
ONBOOT=yes
EOF

# 2. 启动回环接口
ifup lo:0

# 3. 验证VIP绑定
ifconfig lo:0 # 查看是否显示192.168.1.100

# 4. 配置路由(禁锢VIP,避免冲突)
route add -host 192.168.1.100 dev lo:0

# 5. 开机自动生效(写入rc.local)
echo "/sbin/route add -host 192.168.1.100 dev lo:0" >> /etc/rc.local
chmod +x /etc/rc.local

四、LVS 调度器配置(主备节点)

4.1 核心软件安装(主备节点通用)

LVS 调度器需安装ipvsadm(LVS 管理工具)和keepalived(高可用工具),OpenEuler 系统直接通过 yum 安装:

复制代码
# 1. 安装核心软件
yum install -y ipvsadm keepalived

# 2. 加载ip_vs内核模块(LVS核心依赖)
modprobe ip_vs

# 3. 验证内核模块加载
lsmod | grep ip_vs # 显示ip_vs则加载成功

# 4. 设置开机自动加载内核模块
echo "modprobe ip_vs" >> /etc/rc.local
chmod +x /etc/rc.local

# 5. 启动Keepalived服务(主备节点均需启动)
systemctl enable keepalived
systemctl start keepalived

4.2 Keepalived 主节点(LVS-MASTER)配置

Keepalived 核心配置文件为/etc/keepalived/keepalived.conf,主节点配置需指定 MASTER 角色、VIP、LVS 负载均衡规则及健康检查脚本。

4.2.1 主节点完整配置文件
复制代码
# 备份默认配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# 编辑主配置文件
cat > /etc/keepalived/keepalived.conf << EOF
! Configuration File for keepalived

# 全局配置
global_defs {
    # 节点唯一标识,主备节点需不同
    router_id LVS_MASTER
    # 跳过相同主节点的VRRP通告地址检查(提升效率)
    vrrp_skip_check_adv_addr
    # 严格遵循VRRP协议
    vrrp_strict
    # VRRP进程优先级
    vrrp_priority 10
    # 健康检查进程优先级
    checker_priority 10
}

# 定义健康检查脚本(检测后端RS可用性)
vrrp_script check_real_server {
    # 脚本路径:检测80端口是否存活,失败则降低优先级
    script "kill -0 1 && nc -z 127.0.0.1 80 || exit 1"
    # 检查间隔:1秒
    interval 1
    # 超时时间:3秒
    timeout 3
    # 失败后优先级降低20
    weight -20
    # 连续2次成功判定正常
    rise 2
    # 连续3次失败判定故障
    fall 3
}

# VRRP实例配置(主备节点需一致)
vrrp_instance VI_1 {
    # 角色:主节点
    state MASTER
    # 承载VIP的网卡(根据实际环境修改,如eth0、ens33)
    interface eth0
    # 虚拟路由ID,主备必须一致
    virtual_router_id 51
    # 优先级:主节点高于备节点
    priority 120
    # 心跳通告间隔:1秒
    advert_int 1
    # 认证配置
    authentication {
        # 认证类型:密码认证
        auth_type PASS
        # 认证密码:主备必须一致
        auth_pass 123456
    }
    # 虚拟IP(VIP):主备节点一致
    virtual_ipaddress {
        192.168.1.100/24 dev eth0
    }
    # 关联健康检查脚本
    track_script {
        check_real_server
    }
    # 抢占延迟:主节点恢复后,60秒后再抢占VIP(避免频繁切换)
    preempt_delay 60
}

# LVS虚拟服务器配置(DR模式)
virtual_server 192.168.1.100 80 {
    # 延迟循环:1秒
    delay_loop 2
    # 负载均衡算法:加权轮询
    lb_algo wrr
    # 转发模式:DR模式
    lb_kind DR
    # 持久化超时时间:0(关闭会话保持)
    persistence_timeout 0
    # 协议:TCP
    protocol TCP

    # 后端真实服务器1(Web-Node1)
    real_server 192.168.1.12 80 {
相关推荐
炸炸鱼.2 小时前
LVS+Keepalived 高可用集群部署手册
lvs·keepalived·高可用
刘佬GEO2 小时前
本地门店做 GEO 的起步顺序:第一步先做什么?
大数据·网络·人工智能·搜索引擎·ai
Z_Wonderful2 小时前
文件上传,pc端上传成功,手机上传失败,有线网络与移动 网络的限制
网络·智能手机
kiku18182 小时前
keepalived高可用与负载均衡
后端·github·lvs
其实防守也摸鱼2 小时前
Web漏洞全景解析:从原理溯源到实战攻防的进阶指南
网络·web安全·网络安全·学习笔记·web类型漏洞
TechWayfarer2 小时前
当IP来自太空:卫星互联网时代的IP归属地查询挑战与落地实践
服务器·网络·tcp/ip
电气铺二表姐137744166152 小时前
路灯安全用电云平台——守护城市照明,筑牢用电安全防线
网络
说实话起个名字真难啊2 小时前
Docker 入门之overlay网络
网络·docker·容器
不一样的故事1263 小时前
Linux 系统网络配置
服务器·网络·php