LVS+Keepalived 高可用集群搭建与实战指南

一、前言

在高度信息化的时代,企业的生产系统、业务运营、销售支持,乃至日常办公等环节,都离不开不间断的计算机系统服务。一切业务的运转都高度依赖服务器的稳定,如何保障 7×24 小时的高可用,是运维架构的核心课题。

LVS(Linux Virtual Server)作为成熟的四层负载均衡方案,能将海量请求分发到后端真实服务器,实现流量的横向扩展;而 Keepalived 则是专为 LVS 设计的高可用工具,通过 VRRP 协议实现双机热备,彻底解决单点故障问题。二者结合,可构建一套高可用、高并发、高稳定的企业级负载均衡集群,保障业务在服务器宕机、网络故障等场景下仍能正常运行。

本文将从基础原理、双机热备配置、LVS+Keepalived 集群搭建、故障测试全流程,带你从零搭建一套生产可用的高可用集群,所有配置均附详细命令与注释,适合运维工程师、架构师学习参考。


二、Keepalived 双机热备基础知识

2.1 Keepalived 概述

Keepalived 是一款基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)的高可用解决方案,核心作用是解决单点故障,实现服务的无缝切换。

其核心原理:

  • 多台物理服务器组成一个 "虚拟路由器",对外提供统一的虚拟 IP(VIP);
  • 集群内通过选举机制产生一台MASTER(主服务器),由 MASTER 绑定 VIP 并对外提供服务;
  • 其余服务器为BACKUP(备服务器),实时监听 MASTER 状态;
  • 当 MASTER 发生故障(宕机、服务中断),BACKUP 会自动抢占 MASTER 角色,接管 VIP,实现服务的无感知切换,整个过程对用户完全透明。

Keepalived 不仅能实现主机级别的故障切换,还支持服务级别的健康检查:当后端服务(如 Nginx、Web 服务)宕机时,可自动将该节点从集群中剔除,待服务恢复后重新加入,保障业务可用性。

2.2 VRRP 协议核心原理

VRRP 协议是 Keepalived 的底层核心,核心概念如下:

术语 说明
VRRP 路由器 运行 VRRP 协议的物理服务器
虚拟路由器 由多台 VRRP 路由器组成的逻辑组,对外提供统一的虚拟 IP(VIP)
MASTER 路由器 虚拟路由器中的主节点,负责转发流量、绑定 VIP
BACKUP 路由器 虚拟路由器中的备节点,监听 MASTER 状态,故障时抢占
VRRP 优先级 用于选举 MASTER,优先级越高,越容易成为 MASTER(默认 100)
虚拟路由 ID(VRID) 虚拟路由器的唯一标识,同一集群内所有节点 VRID 必须一致
抢占模式 BACKUP 发现 MASTER 优先级低于自己时,主动抢占 MASTER 角色
2.2.1 VRRP 工作模式
  1. 初始化阶段:集群内所有节点根据优先级选举 MASTER,优先级最高的成为 MASTER,其余为 BACKUP;
  2. 正常运行阶段:MASTER 定期发送 VRRP 通告报文(默认 1 秒一次),BACKUP 监听报文,确认 MASTER 存活;
  3. 故障切换阶段:BACKUP 连续 3 次(默认 3 秒)未收到 MASTER 的通告报文,认为 MASTER 故障,重新选举 MASTER,优先级最高的 BACKUP 接管 VIP,成为新的 MASTER;
  4. 故障恢复阶段:原 MASTER 恢复后,若开启抢占模式,会重新抢占 MASTER 角色,切回 VIP;若关闭抢占模式,则保持当前 BACKUP 状态。

2.3 Keepalived 安装与服务控制

2.3.1 环境准备
  • 操作系统:CentOS 7/8、Rocky Linux 等 RHEL 系发行版;
  • 网络要求:主备服务器在同一局域网,可互相通信;
  • 依赖:ipvsadm(LVS 管理工具,Keepalived 依赖其实现负载均衡)。
2.3.2 安装 Keepalived

在 CentOS 7/8 系统中,使用 yum 方式安装 Keepalived x86_64 版本:

复制代码
# 安装Keepalived和ipvsadm
yum install -y keepalived ipvsadm nginx

说明:ipvsadm 是 LVS 的核心管理工具,用于配置负载均衡规则;nginx 用于搭建后端 Web 服务,做测试验证。

2.3.3 服务控制命令
复制代码
# 开机自启Keepalived
systemctl enable keepalived

# 启动Keepalived
systemctl start keepalived

# 停止Keepalived
systemctl stop keepalived

# 重启Keepalived
systemctl restart keepalived

# 查看Keepalived状态
systemctl status keepalived

三、Keepalived 双机热备实战(Web 服务高可用)

3.1 实验环境规划

本次双机热备实验,我们搭建一套 Web 服务高可用集群,环境规划如下:

角色 主机名 IP 地址 虚拟 IP(VIP) 优先级 角色
主服务器 web01 192.168.10.101 192.168.10.100/24 150 MASTER
备服务器 web02 192.168.10.102 192.168.10.100/24 100 BACKUP

说明:主备服务器均部署 Nginx Web 服务,对外通过 VIP 192.168.10.100 提供服务,当主服务器故障时,备服务器自动接管 VIP,保障 Web 服务不中断。

3.2 主服务器(MASTER)配置

3.2.1 基础环境准备
复制代码
# 关闭防火墙和SELinux(生产环境可按需开放端口)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 配置主机名(可选,方便区分节点)
hostnamectl set-hostname web01
bash

# 安装Nginx,用于测试Web服务
yum install -y nginx
# 自定义Nginx首页,区分主备节点
echo "<h1>Master Web Server 192.168.10.101</h1>" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
3.2.2 Keepalived 主配置文件

Keepalived 主配置文件路径:/etc/keepalived/keepalived.conf,配置如下:

复制代码
# 先备份原配置文件
cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

# 编辑主配置文件
vim /etc/keepalived/keepalived.conf

配置内容(逐行注释):

复制代码
global_defs {
    # 本路由器标识,主备节点名称必须不同
    router_id LVS_MASTER
    # 关闭通知邮件(生产环境可配置邮件告警)
    # smtp_server 127.0.0.1
    # smtp_connect_timeout 30
}

# VRRP 实例配置,定义虚拟路由器
vrrp_instance VI_1 {
    # 角色:MASTER 为主节点,BACKUP 为备节点
    state MASTER
    # 绑定VIP的网卡,根据实际网卡修改(可通过ip addr查看网卡名,如ens33、eth0)
    interface ens33
    # 虚拟路由ID,同一集群内主备节点必须一致
    virtual_router_id 51
    # 优先级,数值越大优先级越高,主节点优先级必须高于备节点
    priority 150
    # 通告报文发送间隔,单位秒,默认1s
    advert_int 1
    # 认证配置,主备节点必须一致
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    # 虚拟IP地址,可配置多个,主备节点完全一致
    virtual_ipaddress {
        192.168.10.100/24
    }
}

# 虚拟服务器配置(双机热备场景可省略,LVS集群需配置)
# virtual_server 192.168.10.100 80 {
#     delay_loop 6
#     lb_algo rr
#     lb_kind DR
#     nat_mask 255.255.255.0
#     persistence_timeout 0
#     protocol TCP
#     real_server 192.168.10.101 80 {
#         weight 1
#         TCP_CHECK {
#             connect_timeout 3
#             nb_get_retry 3
#             delay_before_retry 3
#             connect_port 80
#         }
#     }
#     real_server 192.168.10.102 80 {
#         weight 1
#         TCP_CHECK {
#             connect_timeout 3
#             nb_get_retry 3
#             delay_before_retry 3
#             connect_port 80
#         }
#     }
# }
3.2.3 启动 Keepalived 服务
复制代码
# 启动Keepalived
systemctl start keepalived
systemctl enable keepalived

# 查看VIP是否绑定成功
ip addr show ens33

验证:执行ip addr后,可看到网卡上绑定了 VIP 192.168.10.100,说明主节点配置成功。

3.3 备服务器(BACKUP)配置

3.3.1 基础环境准备
复制代码
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 配置主机名
hostnamectl set-hostname web02
bash

# 安装Nginx,自定义首页区分节点
yum install -y nginx
echo "<h1>Backup Web Server 192.168.10.102</h1>" > /usr/share/nginx/html/index.html
systemctl start nginx
systemctl enable nginx
3.3.2 Keepalived 备配置文件

同样备份原配置,编辑/etc/keepalived/keepalived.conf

复制代码
global_defs {
    router_id LVS_BACKUP
}

vrrp_instance VI_1 {
    # 角色为BACKUP
    state BACKUP
    interface ens33
    # VRID必须和主节点一致
    virtual_router_id 51
    # 优先级低于主节点
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    # 虚拟IP和主节点完全一致
    virtual_ipaddress {
        192.168.10.100/24
    }
}
3.3.3 启动 Keepalived 服务
复制代码
systemctl start keepalived
systemctl enable keepalived

# 查看VIP状态,此时备节点不会绑定VIP,仅监听主节点状态
ip addr show ens33

3.4 双机热备故障测试

3.4.1 连通性测试

在客户端(如另一台服务器、本地电脑)执行 ping 命令,持续 ping VIP:

复制代码
ping 192.168.10.100

正常情况下,ping 包持续通,访问http://192.168.10.100,显示主节点的首页内容:Master Web Server 192.168.10.101

3.4.2 主节点故障模拟

在主服务器 web01 上,停止 Keepalived 服务,模拟主节点故障:

复制代码
systemctl stop keepalived

观察客户端 ping 状态:

  • 仅会中断 1-2 个 ping 包,随后自动恢复连通;
  • 访问http://192.168.10.100,显示备节点的首页内容:Backup Web Server 192.168.10.102
  • 查看备节点的 IP,可看到 VIP 192.168.10.100 已绑定到备节点网卡。
3.4.3 主节点恢复测试

在主服务器 web01 上,重新启动 Keepalived 服务:

复制代码
systemctl start keepalived

观察客户端状态:

  • ping 包无中断,VIP 自动切回主节点;
  • 访问http://192.168.10.100,恢复显示主节点首页;
  • 备节点的 VIP 自动解绑,回到 BACKUP 状态。
3.4.4 日志排查

Keepalived 日志默认输出到/var/log/messages,可通过日志排查故障:

复制代码
# 主节点日志
tail -f /var/log/messages | grep Keepalived

# 备节点日志
tail -f /var/log/messages | grep Keepalived

正常切换日志示例:

  • 主节点停止:Stopping Keepalived v1.3.5
  • 备节点抢占:VRRP Instance(VI_1) Transition to MASTER STATE
  • 主节点恢复:VRRP Instance(VI_1) Received higher priority advert, forcing to BACKUP STATE

四、LVS+Keepalived 高可用集群搭建(企业级实战)

4.1 集群架构设计

在双机热备的基础上,我们搭建一套LVS+Keepalived 高可用负载均衡集群,架构如下:

  • 负载均衡层:2 台 LVS 服务器(主备),通过 Keepalived 实现双机热备,对外提供统一 VIP;
  • 应用服务层:2 台 Web 真实服务器,部署 Nginx 服务,处理用户请求;
  • 核心优势:LVS 实现四层负载均衡,分发请求到后端 Web 服务器;Keepalived 保障 LVS 节点的高可用,彻底解决单点故障,实现 7×24 小时业务不中断。
4.1.1 环境规划
角色 主机名 IP 地址 虚拟 IP(VIP) 角色 优先级
LVS 主节点 lvs01 192.168.10.101 192.168.10.100/24 MASTER 150
LVS 备节点 lvs02 192.168.10.102 192.168.10.100/24 BACKUP 100
Web 真实服务器 1 web01 192.168.10.103 - REAL_SERVER -
Web 真实服务器 2 web02 192.168.10.104 - REAL_SERVER -

说明:LVS 采用 DR(直接路由)模式,该模式性能最高,适合高并发场景;后端 Web 服务器需配置 VIP 的本地路由,实现响应报文直接返回客户端。

4.2 LVS 基础原理回顾

LVS 是 Linux 内核集成的四层负载均衡,支持三种工作模式:

模式 原理 优点 缺点
NAT(网络地址转换) 请求和响应都经过 LVS,LVS 修改 IP 地址 配置简单,后端服务器无需特殊配置 性能瓶颈,LVS 成为流量瓶颈
DR(直接路由) 仅请求经过 LVS,响应直接由后端服务器返回客户端 性能最高,无流量瓶颈 后端服务器需配置 VIP 路由,和 LVS 在同一局域网
TUN(隧道模式) 通过 IP 隧道封装请求,后端服务器可跨网段 支持跨机房部署 配置复杂,后端服务器需支持 IP 隧道

本次实战采用DR 模式,兼顾性能和易用性,适合绝大多数企业场景。

4.3 负载均衡层(LVS 主备节点)配置

4.3.1 基础环境准备(主备节点均执行)
复制代码
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 关闭NetworkManager,避免网络冲突
systemctl stop NetworkManager
systemctl disable NetworkManager

# 安装依赖
yum install -y keepalived ipvsadm

# 配置主机名
# 主节点执行:hostnamectl set-hostname lvs01
# 备节点执行:hostnamectl set-hostname lvs02
bash
4.3.2 LVS 主节点(lvs01)Keepalived 配置

编辑/etc/keepalived/keepalived.conf

复制代码
global_defs {
    router_id LVS_MASTER
    # 开启日志(可选)
    # log_file /var/log/keepalived.log
}

# 定义健康检查脚本,检测后端Web服务状态
vrrp_script check_web {
    script "/etc/keepalived/check_web.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 150
    advert_int 1
    # 关联健康检查脚本
    track_script {
        check_web
    }
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100/24
    }
    # 非抢占模式(可选,避免主节点恢复后频繁切换)
    # nopreempt
}

# 虚拟服务器配置:LVS负载均衡规则
virtual_server 192.168.10.100 80 {
    # 健康检查间隔,单位秒
    delay_loop 6
    # 负载均衡算法:rr(轮询),常用算法还有wrr、lc、wlc等
    lb_algo rr
    # 工作模式:DR(直接路由)
    lb_kind DR
    # 子网掩码
    nat_mask 255.255.255.0
    # 持久化超时时间,0表示关闭,同一客户端请求分发到同一服务器
    persistence_timeout 0
    # 协议:TCP
    protocol TCP

    # 后端真实服务器1:web01
    real_server 192.168.10.103 80 {
        # 权重,权重越高,分发的请求越多
        weight 1
        # TCP健康检查
        TCP_CHECK {
            # 连接超时时间,单位秒
            connect_timeout 3
            # 重试次数
            nb_get_retry 3
            # 重试间隔,单位秒
            delay_before_retry 3
            # 检查端口
            connect_port 80
        }
    }

    # 后端真实服务器2:web02
    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
4.3.3 健康检查脚本(主备节点均配置)

创建健康检查脚本/etc/keepalived/check_web.sh,用于检测后端服务状态:

复制代码
vim /etc/keepalived/check_web.sh

脚本内容:

复制代码
#!/bin/bash
# 检测Nginx服务是否正常
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then
    systemctl stop keepalived
fi

赋予脚本执行权限:

复制代码
chmod +x /etc/keepalived/check_web.sh
4.3.4 LVS 备节点(lvs02)Keepalived 配置

编辑/etc/keepalived/keepalived.conf,仅需修改角色、优先级、router_id,其余配置与主节点一致:

复制代码
global_defs {
    router_id LVS_BACKUP
}

vrrp_script check_web {
    script "/etc/keepalived/check_web.sh"
    interval 2
    weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    track_script {
        check_web
    }
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100/24
    }
}

virtual_server 192.168.10.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    persistence_timeout 0
    protocol TCP

    real_server 192.168.10.103 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}
4.3.5 启动 Keepalived 服务(主备节点)
复制代码
# 主节点先启动,备节点后启动
systemctl start keepalived
systemctl enable keepalived

# 查看LVS负载均衡规则
ipvsadm -Ln

验证:执行ipvsadm -Ln,可看到 VIP 192.168.10.100:80 对应的后端真实服务器 192.168.10.103:80、192.168.10.104:80,说明 LVS 规则配置成功。

4.4 应用服务层(Web 真实服务器)配置

4.4.1 基础环境准备(web01、web02 均执行)
复制代码
# 关闭防火墙和SELinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

# 安装Nginx
yum install -y nginx

# 自定义首页,区分节点
# web01执行:echo "<h1>Web Server 192.168.10.103</h1>" > /usr/share/nginx/html/index.html
# web02执行:echo "<h1>Web Server 192.168.10.104</h1>" > /usr/share/nginx/html/index.html

# 启动Nginx
systemctl start nginx
systemctl enable nginx
4.4.2 配置 VIP 本地路由(DR 模式核心)

DR 模式下,后端 Web 服务器需要配置 VIP 的本地路由,让响应报文直接返回客户端,无需经过 LVS。

方法 1:临时配置(重启失效)

复制代码
# web01、web02均执行
ip addr add 192.168.10.100/32 dev lo
ip route add 192.168.10.100/32 dev lo

方法 2:永久配置(开机自启) 创建路由配置文件/etc/sysconfig/network-scripts/route-lo

复制代码
vim /etc/sysconfig/network-scripts/route-lo

添加内容:

复制代码
192.168.10.100/32 dev lo

创建 IP 配置文件/etc/sysconfig/network-scripts/ifcfg-lo:0

复制代码
vim /etc/sysconfig/network-scripts/ifcfg-lo:0

添加内容:

复制代码
DEVICE=lo:0
IPADDR=192.168.10.100
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback

重启网络服务:

复制代码
systemctl restart network
4.4.3 抑制 ARP 响应(关键配置)

为了避免后端 Web 服务器响应 ARP 请求,导致 VIP 冲突,需要抑制 lo 接口的 ARP 响应:

复制代码
vim /etc/sysctl.conf

添加以下配置:

复制代码
# 抑制ARP响应
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

生效配置:

复制代码
sysctl -p

4.5 集群功能测试

4.5.1 负载均衡测试

在客户端访问http://192.168.10.100,多次刷新页面:

  • 页面交替显示Web Server 192.168.10.103Web Server 192.168.10.104,说明 LVS 轮询负载均衡生效;
  • 查看 LVS 节点的连接数:ipvsadm -Ln --stats,可看到两个后端服务器的请求数均匀增长。
4.5.2 后端服务故障测试

在 web01 上停止 Nginx 服务,模拟后端故障:

复制代码
systemctl stop nginx

访问http://192.168.10.100

  • 仅显示 web02 的页面,说明 Keepalived 自动剔除了故障节点 web01;
  • 启动 web01 的 Nginx 服务,页面恢复交替显示,说明故障节点自动恢复。
4.5.3 LVS 主节点故障测试

在 lvs01 上停止 Keepalived 服务,模拟 LVS 主节点故障:

复制代码
systemctl stop keepalived

访问http://192.168.10.100

  • 服务无中断,页面正常显示,说明备节点 lvs02 自动接管 VIP,成为新的 MASTER;
  • 启动 lvs01 的 Keepalived 服务,VIP 自动切回主节点,服务正常运行。
4.5.4 全链路高可用验证

依次模拟以下故障,验证集群可用性:

  1. 单台 Web 服务器宕机:服务正常,流量自动分发到另一台 Web 服务器;
  2. LVS 主节点宕机:服务正常,备节点接管 VIP;
  3. LVS 主节点 + 单台 Web 服务器宕机:服务正常,备节点 LVS 分发流量到存活的 Web 服务器;
  4. 所有故障恢复:集群自动恢复初始状态,无人工干预。

五、核心配置详解与优化

5.1 Keepalived 核心配置参数

配置项 说明 优化建议
state MASTER/BACKUP 节点角色 主节点设为 MASTER,备节点设为 BACKUP,不可颠倒
priority 优先级 主节点优先级高于备节点,建议差值≥50,避免频繁切换
advert_int 通告间隔 默认 1s,可根据网络情况调整,网络稳定可设为 1s,网络差可设为 2s
nopreempt 非抢占模式 开启后,主节点恢复后不抢占 VIP,避免业务抖动,生产环境建议开启
virtual_router_id 虚拟路由 ID 同一集群内必须一致,不同集群不可重复,避免冲突
lb_algo 负载均衡算法 常用:rr(轮询)、wrr(加权轮询)、lc(最小连接)、wlc(加权最小连接),根据业务场景选择
persistence_timeout 会话保持 电商、登录类业务建议开启,设为 300(5 分钟),静态资源建议关闭
TCP_CHECK 健康检查 配置合理的超时时间,避免误判,建议connect_timeout=3nb_get_retry=3

5.2 LVS 负载均衡算法选型

算法 原理 适用场景
rr(轮询) 按顺序依次分发请求 后端服务器性能一致,无状态服务
wrr(加权轮询) 根据权重分发请求,权重越高,请求越多 后端服务器性能差异大,按性能分配权重
lc(最小连接) 将请求分发到连接数最少的服务器 长连接业务,如数据库、消息队列
wlc(加权最小连接) 加权最小连接,兼顾权重和连接数 后端服务器性能差异大,长连接业务
sh(源地址哈希) 根据源 IP 哈希分发,同一 IP 固定到同一服务器 会话保持、缓存业务

5.3 生产环境优化建议

  1. 网络优化
    • LVS 节点采用万兆网卡,绑定多网卡,提升带宽;
    • 后端服务器与 LVS 节点在同一交换机,减少网络延迟;
    • 开启 TCP offload、巨帧等网卡优化,提升网络性能。
  2. 高可用优化
    • 开启 Keepalived 非抢占模式(nopreempt),避免主节点恢复后频繁切换;
    • 配置邮件告警,当节点故障、VIP 切换时,及时通知运维人员;
    • 定期备份 Keepalived 配置文件,避免配置丢失。
  3. 安全优化
    • 关闭不必要的端口,仅开放业务所需端口;
    • 配置防火墙规则,限制 VRRP 报文仅在主备节点之间传输;
    • 定期更新 Keepalived、LVS 版本,修复安全漏洞。
  4. 监控告警
    • 部署 Zabbix、Prometheus 等监控系统,监控 LVS 节点、后端服务器的状态;
    • 监控 VIP 状态、负载均衡规则、后端服务健康状态,异常时自动告警;
    • 定期巡检集群日志,排查潜在故障。

六、常见问题与解决方案

6.1 VIP 无法绑定

问题现象 :启动 Keepalived 后,ip addr看不到 VIP。解决方案

  1. 检查网卡名是否正确(ip addr查看实际网卡名,如 ens33、eth0);
  2. 检查 VRID、优先级、认证信息是否正确,主备节点配置是否一致;
  3. 检查防火墙是否拦截 VRRP 协议(VRRP 使用协议号 112,需开放);
  4. 查看/var/log/messages日志,排查错误原因。

6.2 后端服务器无法访问 VIP

问题现象 :后端 Web 服务器无法访问 VIP,服务不通。解决方案

  1. 检查后端服务器是否配置了 VIP 本地路由和 ARP 抑制;
  2. 检查 LVS 节点的负载均衡规则是否正确(ipvsadm -Ln);
  3. 检查后端服务器的 Nginx 服务是否正常启动;
  4. 检查网络连通性,LVS 节点与后端服务器是否能互相通信。

6.3 频繁切换 VIP

问题现象 :VIP 在主备节点之间频繁切换,业务抖动。解决方案

  1. 检查主备节点的优先级,主节点优先级必须高于备节点;
  2. 开启非抢占模式(nopreempt),避免主节点恢复后抢占;
  3. 调整通告间隔和超时时间,避免网络抖动导致误判;
  4. 检查网络稳定性,排查是否有丢包、延迟过高的问题。

6.4 负载均衡不生效

问题现象 :访问 VIP,仅显示一台后端服务器的页面,不轮询。解决方案

  1. 检查 LVS 工作模式是否为 DR,后端服务器是否配置了 ARP 抑制;
  2. 检查负载均衡算法是否为 rr,权重是否一致;
  3. 检查是否开启了会话保持(persistence_timeout),关闭会话保持;
  4. 检查后端服务器的健康检查是否正常,故障节点被剔除。

七、总结

LVS+Keepalived 是企业级高可用负载均衡的经典方案,通过 Keepalived 的 VRRP 协议实现 LVS 节点的双机热备,彻底解决单点故障;通过 LVS 的四层负载均衡,实现请求的高效分发,支撑高并发业务。

本文从基础原理、双机热备配置、LVS 集群搭建、故障测试、优化方案全流程,详细讲解了集群的搭建与运维,所有配置均经过生产环境验证,可直接用于实际项目。

在实际生产中,还可结合 Nginx 七层负载均衡、Redis 会话共享、分布式存储等技术,构建更完善的高可用架构,保障业务的稳定运行。

相关推荐
San30.2 小时前
前端进阶:从浏览器渲染原理到网络请求全链路解析
前端·网络·网络请求·浏览器渲染机制
Heart_to_Yang2 小时前
TPLink路由器虚拟专用网端口映射故障问题,端口转发无效
运维·服务器·网络
herinspace2 小时前
管家婆实用帖-如何使用ping命令检测网络环境
网络·数据库·人工智能·学习·excel·语音识别
芯智工坊2 小时前
IgH EtherCAT 从入门到精通:第 3 章 第一次运行 Hello EtherCAT
网络·igh ethercat
深蓝海拓2 小时前
基于QtPy (PySide6) 的PLC-HMI工程项目(七)上位机通信部分的初步建设:socket客户端
网络·笔记·python·学习·plc
2401_873479402 小时前
金融风控中IP地址查询如何识别异常登录?IP离线库提升欺诈拦截准确率的完整指南
服务器·网络·php
Proxy_ZZ03 小时前
不同VLAN之间怎么通信?从“隔墙喊话”到“路由器搭桥”
网络·智能路由器
特长腿特长3 小时前
systemd 服务配置文件,xxx.service 编辑指南,自定义我们自己的服务。
linux·网络·云原生
木心术13 小时前
Web安全攻防实战:常见漏洞分析与防御策略
网络·数据库·web安全