掌握Keepalived双机热备与LVS高可用集群实战

技能目标

  • 掌握 Keepalived 双机热备的原理与部署流程
  • 熟练搭建基于 Keepalived 的双机热备系统
  • 完成 LVS+Keepalived 高可用负载均衡集群的构建与验证

前言

在高度信息化的 IT 时代,企业的生产系统、业务运营、销售支撑与日常管理,都深度依赖计算机信息服务。高可用(HA)技术作为保障业务连续性的核心,其应用需求持续提升,要求系统能够提供持续、不间断的计算服务与网络服务。

本章将系统讲解如何使用 Keepalived 实现双机热备,包括虚拟 IP(VIP)的故障自动切换,以及 Keepalived 在 LVS 高可用集群中的深度应用,帮助学习者构建企业级高可用架构。


一、Keepalived 双机热备核心基础

1.1 Keepalived 概述与核心原理

Keepalived 是一款专为 LVS 设计的开源高可用辅助工具,核心能力包括:

  • 故障自动切换(Failover):当主节点(Master)故障时,自动将服务切换到备节点(Backup),保障业务不中断
  • 健康检查(Health Checking):实时监控 LVS 负载调度器、后端真实服务器的可用性,自动剔除故障节点
  • 服务自动恢复:主节点故障恢复后,自动将其重新加入集群,业务流量切回主节点

Keepalived 基于 **VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)** 实现热备:

  • 多台路由器组成一个热备组,共享同一个虚拟 IP(VIP)对外提供服务
  • 同一时刻热备组内只有一台主路由器提供服务,其余为备份状态
  • 当主路由器故障时,备路由器按优先级自动接管 VIP,继续提供服务,整个过程对用户透明
  • VIP 漂移由 Keepalived 自动完成,无需手动配置网卡,仅需通过配置文件定义

1.2 Keepalived 安装与服务管理

(1)环境准备与安装

在 openEuler 24 系统中,通过 DNF 方式安装 Keepalived,同时安装 ipvsadm(LVS 管理工具)与 nginx(测试服务):

bash

运行

复制代码
[root@localhost ~]# yum install -y keepalived ipvsadm nginx
(2)服务自启动配置

安装完成后,将 Keepalived 设置为开机自启动:

bash

运行

复制代码
[root@localhost ~]# systemctl enable keepalived
# 同步服务文件
Created symlink from /etc/systemd/system/multi-user.target.wants/keepalived.service to /usr/lib/systemd/system/keepalived.service.

二、Keepalived 双机热备实战

2.1 实验环境规划

表格

主机角色 操作系统 IP 地址 部署服务
主服务器(Master) openEuler 24 192.168.10.101 Keepalived + Nginx
备服务器(Backup) openEuler 24 192.168.10.102 Keepalived + Nginx
虚拟 IP(VIP) - 192.168.10.100/24 业务统一访问入口

2.2 主服务器配置

Keepalived 主配置文件位于/etc/keepalived/keepalived.conf,先关闭防火墙与 SELinux:

bash

运行

复制代码
[root@localhost ~]# systemctl stop firewalld && setenforce 0
[root@localhost ~]# cd /etc/keepalived/
# 备份模板配置
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf
[root@localhost keepalived]# vi keepalived.conf

主服务器核心配置

ini

复制代码
global_defs {
    router_id HA_TEST_R1  # 本路由器(服务器)的唯一标识
}

vrrp_instance VI_1 {
    state MASTER          # 热备状态:MASTER表示主服务器
    interface ens33        # 承载VIP的物理网卡
    virtual_router_id 1    # 虚拟路由ID,热备组内所有节点必须一致
    priority 100           # 优先级,数值越大优先级越高(主节点设为最高)
    advert_int 1           # 通告间隔(心跳频率,单位:秒)
    authentication {       # 认证信息,热备组内所有节点必须一致
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {   # 指定漂移的虚拟IP(VIP),可配置多个
        192.168.10.100
    }
}
启动服务与验证

bash

运行

复制代码
[root@localhost keepalived]# systemctl start keepalived
# 查看网卡信息,VIP已自动绑定到ens33(ifconfig无法查看,需用ip命令)
[root@localhost keepalived]# ip addr show dev ens33

2.3 备服务器配置

备服务器配置与主服务器基本一致,仅需修改router_id、state、priority三个参数:

ini

复制代码
global_defs {
    router_id HA_TEST_R2  # 唯一标识,与主节点区分
}

vrrp_instance VI_1 {
    state BACKUP          # 热备状态:BACKUP表示备服务器
    interface ens33
    virtual_router_id 1    # 与主节点保持一致
    priority 99            # 优先级低于主节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress {
        192.168.10.100
    }
}
启动服务

bash

运行

复制代码
[root@localhost keepalived]# systemctl start keepalived

备节点启动后不会绑定 VIP,VIP 由主节点持有,仅当主节点故障时自动接管。

2.4 双机热备功能验证

(1)连通性测试

在客户端执行持续 ping 命令,测试 VIP 可用性:

bash

运行

复制代码
ping -t 192.168.10.100
  • 停止主节点 Keepalived 服务:systemctl stop keepalived,ping 仅中断 1-2 个包后恢复,说明备节点已接管 VIP
  • 重启主节点 Keepalived 服务,ping 再次中断 1-2 个包后恢复,说明主节点重新夺回 VIP 控制权
(2)Web 服务访问测试

在两台服务器启动 Nginx,写入不同测试页面:

bash

运行

复制代码
# 主节点
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo "web01" > /usr/share/nginx/html/index.html

# 备节点
[root@localhost ~]# systemctl start nginx
[root@localhost ~]# echo "web02" > /usr/share/nginx/html/index.html
  • 客户端访问http://192.168.10.100,显示主节点页面
  • 停止主节点 Keepalived,刷新页面显示备节点内容,说明 VIP 已切换
  • 重启主节点 Keepalived,页面恢复为主节点内容,验证故障自动恢复
(3)日志排查

Keepalived 日志保存在/var/log/messages,可通过日志跟踪状态切换:

bash

运行

复制代码
[root@localhost ~]# tail -f /var/log/messages
  • 主节点故障时,日志显示MASTER→STOP,移除 VIP
  • 备节点日志显示BACKUP→MASTER,接管 VIP,完成故障切换

三、LVS + Keepalived 高可用负载均衡集群

3.1 架构概述

Keepalived 的核心设计目标是为 LVS 负载均衡集群提供高可用,通过调用 ipvsadm 工具管理虚拟服务器与服务池,实现:

  • 主 / 备调度器的故障自动切换,避免 LVS 单点故障
  • 后端真实服务器的健康检查,自动剔除故障节点
  • 故障节点恢复后自动重新加入集群,实现负载均衡与高可用的结合

本方案基于LVS-DR(直接路由)模式,搭建主 / 备两台调度器,结合 Keepalived 实现热备,后端多台 Web 服务器提供服务,架构如图 3.3 所示。

3.2 实验环境规划

表格

主机角色 操作系统 IP 地址 部署服务
主调度器(Master) openEuler 24 192.168.10.101 Keepalived + ipvsadm
备调度器(Backup) openEuler 24 192.168.10.102 Keepalived + ipvsadm
Web 节点 1 openEuler 24 192.168.10.103 Nginx
Web 节点 2 openEuler 24 192.168.10.104 Nginx
虚拟 IP(VIP) - 192.168.10.100/24 集群统一访问入口

3.3 基础环境配置(所有节点执行)

bash

运行

复制代码
# 关闭防火墙与SELinux
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config

# 加载ip_vs模块
modprobe ip_vs
cat /proc/net/ip_vs  # 查看版本信息

# 安装依赖
yum install ipvsadm keepalived -y
# 备份配置文件
cp /etc/keepalived/keepalived.conf{,.bak}

3.4 主调度器配置

编辑/etc/keepalived/keepalived.conf,包含全局配置、热备配置与虚拟服务器配置:

ini

复制代码
global_defs {
    router_id LVS_HA_R1  # 调度器唯一标识
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.100
    }
}

# 虚拟服务器配置(LVS-DR模式)
virtual_server 192.168.10.100 80 {
    delay_loop 15          # 健康检查间隔(秒)
    lb_algo rr              # 负载调度算法:轮询(rr)
    lb_kind DR              # LVS工作模式:直接路由(DR)
    persistence_timeout 60  # 持久连接时间(秒)
    protocol TCP            # 协议类型:TCP

    # 后端真实服务器1
    real_server 192.168.10.103 80 {
        weight 1            # 权重
        TCP_CHECK {         # TCP健康检查
            connect_timeout 10  # 连接超时(秒)
            retry 3             # 重试次数
            delay_before_retry 3 # 重试间隔(秒)
            connect_port 80     # 检查端口
        }
    }

    # 后端真实服务器2
    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

3.5 备调度器配置

备调度器配置与主调度器几乎一致,仅修改router_id、state、priority

ini

复制代码
global_defs {
    router_id LVS_HA_R2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.100
    }
}

# 虚拟服务器配置与主调度器完全一致
virtual_server 192.168.10.100 80 {
    delay_loop 15
    lb_algo rr
    lb_kind DR
    persistence_timeout 60
    protocol TCP

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

    real_server 192.168.10.104 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

3.6 启动服务

bash

运行

复制代码
# 主、备调度器分别启动Keepalived
[root@localhost ~]# systemctl restart keepalived

3.7 Web 节点服务器配置(DR 模式)

DR 模式下,Web 节点需要配置 VIP 到本地回环接口,并添加 ARP 抑制规则,脚本示例:

bash

运行

复制代码
#!/bin/bash
# 配置VIP到lo:0接口
vip=192.168.207.200
case "$1" in
start)
    echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
    echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "2" > /proc/sys/net/ipv4/conf/default/arp_announce
    # 临时添加VIP
    /sbin/ip addr add $vip/32 dev lo label lo:0
    /sbin/ip route add local $vip/32 dev lo
    ;;
stop)
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore
    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
    echo "0" > /proc/sys/net/ipv4/conf/default/arp_announce
    # 移除VIP
    /sbin/ip addr del $vip/32 dev lo label lo:0
    /sbin/ip route del local $vip/32 dev lo
    ;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
esac
exit 0

bash

运行

复制代码
# 启动脚本
chmod +x /etc/init.d/lvs_dr
/etc/init.d/lvs_dr start

3.8 集群功能验证

  1. 访问测试:客户端通过 VIP(192.168.10.100)访问 Web 服务,轮询显示两台 Web 节点的页面
  2. 故障切换测试:停止主调度器 Keepalived,服务正常访问,备调度器自动接管
  3. 负载均衡测试 :通过ipvsadm -ln查看调度器连接状态,验证轮询算法生效
  4. 健康检查测试:停止一台 Web 节点的 Nginx,调度器自动剔除该节点,流量仅分发至正常节点

总结

在互联网业务高并发、高可用的核心需求下,单点故障与性能瓶颈是系统稳定性的最大挑战。Keepalived 凭借轻量级、开源、灵活的特性,成为解决这类问题的核心工具。

本章围绕 Keepalived 的两大核心能力展开:

  1. 双机热备:基于 VRRP 协议实现虚拟 IP 的自动漂移,保障服务持续在线,彻底避免单点故障
  2. LVS 高可用集群:结合 LVS-DR 模式,实现负载均衡与故障自动切换,构建高可用、高性能的分布式服务架构

通过从原理到实操的全流程讲解,涵盖架构设计、参数调优、故障排查等关键环节,帮助学习者掌握构建企业级高可用系统的核心技能,为业务的稳定运行提供坚实保障。

相关推荐
Proxy_ZZ05 小时前
不同VLAN之间怎么通信?从“隔墙喊话”到“路由器搭桥”
网络·智能路由器
线束线缆组件品替网1 天前
Amphenol CAT6A网线RJE1Y36915162401线束组件深度解析
网络·数码相机·智能路由器·电脑·电视盒子·pcb工艺
Proxy_ZZ01 天前
VLAN的作用:为什么要把一个网络切成好几块?
网络·智能路由器
zbtlink1 天前
为什么路由器用两年就卡?什么时候该换路由器?
网络·智能路由器
Proxy_ZZ02 天前
华为ICT大赛实践赛学习笔记(一):零基础开局,我的网络赛道入坑记录
网络·智能路由器
哇蛙蛙2 天前
H3CNE--22.OSPF
网络·经验分享·网络协议·tcp/ip·智能路由器·h3cne
H_z_q24013 天前
HCIP园区网
智能路由器·hcip
CS创新实验室3 天前
《计算机网络》深入学:比较 RIP 和 OSPF 协议
网络·计算机网络·智能路由器
小红的布丁4 天前
公网 IP、私网 IP、路由表、转发表与 MAC 地址的关系
tcp/ip·macos·智能路由器