admin管理员组

文章数量:1516870

适用场景 :Linux 高可用集群搭建、VIP 漂移、LVS 高可用、服务故障自动切换 核心定位 :基于 VRRP 协议的软件实现,解决单点故障,实现服务高可用,原生支持 LVS 集群的健康检测与规则管理 实验环境 :CentOS/RHEL 系列,节点规划 KA1 (172.25.254.50)、KA2 (172.25.254.60)、RS1 (172.25.254.10)、RS2 (172.25.254.20),VIP 172.25.254.100/200

一、Keepalived 基础认知

1.1 核心依赖:VRRP 协议

虚拟路由冗余协议(VRRP) :解决静态网关单点故障,将多台物理路由器虚拟为一台 虚拟路由器 ,通过心跳机制实现主备切换,核心术语如下:

  • VRID :虚拟路由器标识,0-255,同一虚拟路由器的所有节点必须一致,且网络内唯一
  • VIP :虚拟 IP,对外提供服务的统一入口,主节点故障时自动漂移至备节点
  • VMAC :虚拟 MAC 地址,格式为 00-00-5e-00-01-VRID
  • Master/Backup :主 / 备节点,通过 优先级 (1-254)选举,优先级越高越易成为 Master
  • 心跳 :主节点周期性发送通告报文,包含优先级等信息,备节点未收到则触发主备切换

1.2 Keepalived 核心功能

  1. 基于 VRRP 实现 VIP 地址漂移,解决单点故障
  2. 为 LVS 集群自动生成 IPVS 规则,管理真实服务器(RS)
  3. 对 LVS 后端 RS 做健康状态检测(TCP/HTTP/SSL 等)
  4. 支持自定义脚本调用,实现服务状态检测、故障告警、自动切换
  5. 兼容 Nginx/HAProxy 等服务的高可用搭建

1.3 系统可用性指标

高可用核心公式: 可用性 A = MTBF / (MTBF + MTTR) (MTBF:平均无故障时间,MTTR:平均修复时间)常见行业指标:

  • 99.9%:每月停机约 43.2 分钟
  • 99.95%:每月停机约 21.6 分钟
  • 99.99%:每月停机约 4.32 分钟
  • 99.999%:每年停机约 5.26 分钟Keepalived 核心目标: 降低 MTTR ,通过自动化故障切换实现秒级恢复,提升系统可用性。

1.4 Keepalived 架构(用户空间)

  1. VRRP Stack :处理 VRRP 协议报文,实现 VIP 通告与主备选举
  2. Checkers :对后端 RS / 本地服务做健康状态检测
  3. IPVS Wrapper :生成并管理 LVS 的 IPVS 规则
  4. WatchDog :监控 Keepalived 自身进程,防止进程挂死
  5. SMTP :邮件告警组件,实现故障切换邮件通知
  6. System Call :状态切换时调用自定义脚本(如告警、服务启停)

二、Keepalived 环境准备与基础安装

2.1 实验环境统一配置

所有节点(KA1/KA2/RS1/RS2)需完成以下配置,避免因环境不一致导致故障:

  1. 时间同步 :以 KA1 为时间服务器,其他节点同步 KA1 时间

    bash

    运行

    # KA1 配置 chrony
    vim /etc/chrony.conf
    allow 0.0.0.0/0
    local stratum 10
    systemctl restart chronyd && systemctl enable chronyd
    # 其他节点同步 KA1
    vim /etc/chrony.conf
    pool 172.25.254.50 iburst
    systemctl restart chronyd && systemctl enable chronyd
    
  2. 本地解析 :配置 /etc/hosts ,实现节点间主机名互通

    bash

    运行

    cat >> /etc/hosts << EOF
    172.25.254.50 KA1
    172.25.254.60 KA2
    172.25.254.10 RS1
    172.25.254.20 RS2
    EOF
    # 同步至其他节点
    scp /etc/hosts 172.25.254.60:/etc/hosts
    scp /etc/hosts 172.25.254.10:/etc/hosts
    scp /etc/hosts 172.25.254.20:/etc/hosts
    
  3. 关闭防火墙 / SELinux :避免端口 / 协议被拦截

    bash

    运行

    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
  4. 后端服务准备 (RS1/RS2):以 httpd 为例,提供测试服务

    bash

    运行

    dnf install httpd -y
    # RS1
    echo "RS1 - 172.25.254.10" > /var/www/html/index.html
    # RS2
    echo "RS2 - 172.25.254.20" > /var/www/html/index.html
    systemctl enable --now httpd
    

2.2 Keepalived 安装与核心文件

2.2.1 安装命令

bash

运行

dnf install keepalived -y  # CentOS/RHEL 8+
yum install keepalived -y  # CentOS/RHEL 7
2.2.2 核心文件路径

表格

文件类型 路径 作用
主程序 /usr/sbin/keepalived Keepalived 核心执行程序
主配置文件 /etc/keepalived/keepalived.conf 核心配置文件,包含全局、VRRP、LVS 配置
配置示例 /usr/share/doc/keepalived/ 官方配置示例,参考性强
系统服务文件 /lib/systemd/system/keepalived.service 系统服务管理文件
服务环境配置 /etc/sysconfig/keepalived 配置 Keepalived 启动参数(如日志级别)
日志文件 /var/log/keepalived.log 分离后的 Keepalived 专属日志(默认在 /var/log/messages)
2.2.3 基础启动与验证

bash

运行

# 启动并设置开机自启
systemctl start keepalived && systemctl enable keepalived
# 验证进程
ps axf | grep keepalived
# 验证配置文件语法
keepalived -t -f /etc/keepalived/keepalived.conf

三、Keepalived 核心配置详解

3.1 配置文件整体结构

Keepalived 配置文件分为 三大核心模块 ,所有配置均基于此结构展开:

conf

! Configuration File for keepalived
# 1. 全局配置:邮件、路由ID、VRRP全局参数
global_defs {
    ...
}
# 2. VRRP实例配置:虚拟路由器、VIP、主备选举、认证等
vrrp_instance 实例名 {
    ...
}
# 3. LVS配置:虚拟服务、RS、健康检测、调度算法等(可选)
virtual_server VIP 端口 {
    ...
    real_server RS_IP 端口 {
        ...
    }
}

3.2 全局配置(global_defs)

核心配置项,作用于 Keepalived 整个进程,关键配置如下:

conf

global_defs {
    # 故障切换告警邮件接收人,可写多个
    notification_email {
        timinglee_zln@163.com
        594233887@qq.com
    }
    # 告警邮件发件人
    notification_email_from keepalived@KA1
    # 邮件服务器地址(本地/公网SMTP)
    smtp_server 127.0.0.1
    # 邮件服务器连接超时时间
    smtp_connect_timeout 30
    # 路由ID,每个节点唯一(建议用主机名)
    router_id KA1
    # 跳过同一路由器的通告报文检查,提升性能
    vrrp_skip_check_adv_addr
    # 严格遵循VRRP协议(建议注释,否则单播/无VIP会启动失败)
    # vrrp_strict
    # 免费ARP报文发送间隔,更新网络ARP缓存
    vrrp_garp_interval 1
    # 免费NA报文发送间隔(IPv6)
    vrrp_gna_interval 1
    # VRRP组播地址(默认224.0.0.18)
    vrrp_mcast_group4 224.0.0.44
    # 开启脚本执行安全校验
    enable_script_security
    # 指定自定义脚本执行用户(默认keepalived_script,建议root)
    script_user root
}

3.3 VRRP 实例配置(vrrp_instance)

核心模块,实现 VIP 管理与主备切换, 同一虚拟路由器的所有节点,VRID / 认证密码 / VIP 必须一致 ,主备仅需修改 state priority

3.3.1 单主模式基础配置

KA1(Master 节点)

conf

vrrp_instance WEB_VIP {
    # 状态:MASTER/BACKUP(非抢占模式下所有节点均为BACKUP)
    state MASTER
    # 绑定的物理网卡(如eth0/ens33)
    interface eth0
    # 虚拟路由器ID,0-255,网络内唯一
    virtual_router_id 51
    # 优先级,1-254,Master需高于Backup(如100/80)
    priority 100
    # 心跳通告间隔,默认1s
    advert_int 1
    # 认证配置,同一虚拟路由器必须一致
    authentication {
        # 认证类型:PASS(简单密码,推荐)/AH(IPSEC,不推荐)
        auth_type PASS
        # 预共享密钥,仅前8位有效
        auth_pass 1111
    }
    # 虚拟IP(VIP),可配置多个,格式:IP/掩码 dev 网卡 label 别名
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

KA2(Backup 节点) 仅需修改 3 处: state BACKUP priority 80 ,其余与 Master 完全一致。

3.3.2 关键扩展配置
  1. 非抢占模式(nopreempt) 默认为抢占模式,Master 恢复后会立即抢占 VIP,导致网络抖动; 非抢占模式下所有节点状态均为 BACKUP ,Master 恢复后不会主动抢占,需手动干预或备节点故障才会漂移。

    conf

    vrrp_instance WEB_VIP {
        state BACKUP  # 所有节点均为BACKUP
        priority 100 # KA1优先级仍高于KA2
        nopreempt     # 开启非抢占模式
        ...
    }
    
  2. 抢占延迟(preempt_delay) 抢占模式下,Master 恢复后延迟一段时间再抢占 VIP,避免短时间内多次切换,默认 300s,建议设为 10-60s:

    conf

    preempt_delay 10  # 延迟10s抢占VIP
    
  3. 单播模式(unicast) 默认组播模式,无法跨网络通信,且会造成网络拥塞; 单播模式 指定主备节点互访 IP,仅在节点间发送心跳,需 注释 vrrp_strict ,配置如下:

    conf

    vrrp_instance WEB_VIP {
        ...
        # 单播源IP:本机物理IP
        unicast_src_ip 172.25.254.50
        # 单播对等体:对方节点物理IP,可写多个
        unicast_peer {
            172.25.254.60
        }
        ...
    }
    
  4. 故障切换脚本(notify_*) 节点状态切换为 Master/Backup/Fault 时,自动调用自定义脚本(如邮件告警、服务启停):

    conf

    vrrp_instance WEB_VIP {
        ...
        # 成为Master时调用
        notify_master "/etc/keepalived/scripts/waring.sh master"
        # 成为Backup时调用
        notify_backup "/etc/keepalived/scripts/waring.sh backup"
        # 故障时调用
        notify_fault "/etc/keepalived/scripts/waring.sh fault"
        ...
    }
    

3.4 LVS 集成配置(virtual_server/real_server)

Keepalived 原生支持 LVS,可自动生成 IPVS 规则,并对后端 RS 做健康检测,核心配置如下:

conf

# 配置虚拟服务:VIP + 端口
virtual_server 172.25.254.100 80 {
    # 健康检测间隔,单位s
    delay_loop 6
    # LVS调度算法:rr(轮询)/wrr(加权轮询)/lc(最小连接)/wlc(加权最小连接)
    lb_algo wrr
    # LVS模式:NAT/DR(直接路由,推荐)/TUN(隧道)
    lb_kind DR
    # 协议类型:TCP/UDP
    protocol TCP
    # 所有RS故障时,备用服务地址
    sorry_server 172.25.254.30 80
    # 配置后端真实服务器RS1
    real_server 172.25.254.10 80 {
        # 权重,值越大被调度的概率越高
        weight 1
        # TCP层健康检测
        TCP_CHECK {
            # 连接超时时间
            connect_timeout 5
            # 重试次数
            nb_get_retry 3
            # 重试延迟
            delay_before_retry 3
            # 检测端口
            connect_port 80
        }
    }
    # 配置后端真实服务器RS2
    real_server 172.25.254.20 80 {
        weight 1
        # HTTP层健康检测(比TCP更精准,检测页面可用性)
        HTTP_GET {
            url {
                # 检测的URL路径
                path /
                # 健康状态响应码(正常为200)
                status_code 200
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

注意 :LVS-DR 模式下,后端 RS 需将 VIP 绑定至 lo 网卡,并关闭 ARP 响应,避免 VIP 冲突:

bash

运行

# RS1/RS2 执行
ip addr add 172.25.254.100/32 dev lo
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3.5 自定义服务检测(vrrp_script + track_script)

通过 vrrp_script 定义自定义检测脚本,监控本地服务(如 Nginx/HAProxy/Mysql),服务故障时自动降低节点优先级,触发 VIP 漂移, 核心是脚本返回值 :返回 0 为正常,非 0 为故障。

3.5.1 配置步骤
  1. 定义检测脚本
  2. 在 VRRP 实例中通过 track_script 调用
3.5.2 实战配置(监控 HAProxy)

conf

# 1. 定义vrrp_script,放在global_defs后、vrrp_instance前
vrrp_script check_haproxy {
    # 检测脚本:检查haproxy进程是否存在
    script "/etc/keepalived/scripts/haproxy.sh"
    # 检测间隔,1s
    interval 1
    # 故障时降低的优先级(负值),如故障后优先级-30
    weight -30
    # 连续失败次数,判定为故障
    fall 2
    # 连续成功次数,判定为恢复
    rise 2
    # 脚本执行超时时间
    timeout 2
}
# 2. 在vrrp_instance中调用
vrrp_instance WEB_VIP {
    ...
    track_script {
        check_haproxy  # 调用上面定义的检测脚本
    }
    ...
}
3.5.3 检测脚本示例(haproxy.sh)

bash

运行

#!/bin/bash
# 检查haproxy进程是否存在,killall -0 仅检测进程,不杀死
/usr/bin/killall -0 haproxy
# 脚本返回值:0为正常,非0为故障

赋予脚本执行权限:

bash

运行

chmod +x /etc/keepalived/scripts/haproxy.sh

四、Keepalived 高级实战配置

4.1 双主模式(Master/Master)

解决单主模式下备节点资源闲置问题, 两个虚拟路由器,两个 VIP ,每个节点在一个虚拟路由器中为 Master,另一个为 Backup,实现资源利用率 100%。

4.1.1 核心配置

KA1 配置 :WEB_VIP(Master)、DB_VIP(Backup)

conf

# 虚拟路由器1:WEB_VIP,VIP 172.25.254.100,KA1为Master
vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}
# 虚拟路由器2:DB_VIP,VIP 172.25.254.200,KA1为Backup
vrrp_instance DB_VIP {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:1
    }
}

KA2 配置 :WEB_VIP(Backup)、DB_VIP(Master)

conf

# 虚拟路由器1:WEB_VIP,KA2为Backup
vrrp_instance WEB_VIP {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}
# 虚拟路由器2:DB_VIP,KA2为Master
vrrp_instance DB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:1
    }
}
4.1.2 验证效果
  • 正常情况下:KA1 持有 100,KA2 持有 200,各自对外提供服务
  • KA1 故障:KA2 自动接管 100+200,所有服务无中断
  • KA2 故障:KA1 自动接管 100+200,所有服务无中断

4.2 子配置文件拆分(include)

生产环境中配置项过多时,主配置文件可读性差,通过 include 指令将不同功能的配置拆分至独立子配置文件,便于管理。

4.2.1 配置步骤
  1. 创建子配置文件目录
  2. 主配置文件中通过 include 引入子配置
  3. 子配置文件中编写具体的 VRRP/LVS 配置
4.2.2 实战配置

bash

运行

# 1. 创建子配置目录
mkdir -p /etc/keepalived/conf.d

主配置文件(/etc/keepalived/keepalived.conf) :仅保留全局配置,引入子配置

conf

global_defs {
    notification_email {
        timinglee_zln@163.com
    }
    notification_email_from keepalived@KA1
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id KA1
    vrrp_skip_check_adv_addr
    # vrrp_strict
    vrrp_garp_interval 1
    vrrp_gna_interval 1
}
# 引入conf.d目录下所有.conf后缀的子配置文件
include /etc/keepalived/conf.d/*.conf

子配置文件(/etc/keepalived/conf.d/webvip.conf) :编写 WEB_VIP 配置

conf

vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

4.3 日志分离

默认情况下,Keepalived 日志混在 /var/log/messages 中,与其他服务日志混杂,不利于问题排查,通过修改启动参数和 rsyslog 配置,实现日志单独存储。

bash

运行

# 1. 修改Keepalived启动参数,指定日志级别
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"  # -S 6 指定日志设备为local6
# 2. 配置rsyslog,将local6的日志定向至专属文件
vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalived.log
# 3. 重启服务使配置生效
systemctl restart keepalived rsyslog
# 4. 验证日志
tail -f /var/log/keepalived.log

4.4 故障切换邮件告警

实现 Keepalived 状态切换(Master/Backup/Fault)时,自动发送邮件告警,及时通知运维人员,核心分为 邮件环境配置 告警脚本配置

4.4.1 邮件环境配置(所有节点)

安装邮件工具并配置公网 SMTP(以 163 邮箱为例):

bash

运行

# 安装邮件工具
dnf install s-nail postfix -y
systemctl start postfix && systemctl enable postfix
# 配置SMTP
vim /etc/mail.rc
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user=你的163邮箱@163.com
set smtp-auth-password=你的163邮箱授权码
set from=你的163邮箱@163.com
set ssl-verify=ignore
# 测试邮件发送
echo "测试Keepalived邮件告警" | mail -s "Keepalived测试" 接收邮箱@qq.com
4.4.2 告警脚本配置
  1. 创建脚本目录并编写告警脚本

bash

运行

mkdir -p /etc/keepalived/scripts
vim /etc/keepalived/scripts/waring.sh
#!/bin/bash
# 告警邮件接收人
mail_dest='594233887@qq.com'
# 邮件发送函数
mail_send() {
    mail_subj="$HOSTNAME to be $1 vip 转移"
    mail_mess="`date +%F\ %T`: vrrp 转移,$HOSTNAME 变为 $1"
    echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
# 根据脚本参数调用函数
case $1 in
    master)
    mail_send master
    ;;
    backup)
    mail_send backup
    ;;
    fault)
    mail_send fault
    ;;
    *)
    exit 1
    ;;
esac
  1. 赋予脚本执行权限

bash

运行

chmod +x /etc/keepalived/scripts/waring.sh
  1. VRRP 实例中调用脚本(参考 3.3.2 节)
  2. 测试告警:停止 Keepalived 服务,查看接收邮箱是否收到告警邮件

bash

运行

systemctl stop keepalived

五、Keepalived 核心运维命令与故障排查

5.1 核心运维命令

bash

运行

# 启动/停止/重启/状态查看
systemctl start/stop/restart/status keepalived
# 配置文件语法检查
keepalived -t -f /etc/keepalived/keepalived.conf
# 查看VIP绑定情况
ip addr | grep eth0:0
# 查看LVS IPVS规则
ipvsadm -Ln
# 监控VRRP心跳报文(组播)
tcpdump -i eth0 -nn host 224.0.0.18
# 监控VRRP心跳报文(单播)
tcpdump -i eth0 -nn src 172.25.254.50 and dst 172.25.254.60
# 查看Keepalived日志
tail -f /var/log/keepalived.log
# 检测后端RS健康状态
ipvsadm -Ln --stats

5.2 常见故障排查思路

  1. Keepalived 启动失败

    • 检查配置文件语法: keepalived -t -f /etc/keepalived/keepalived.conf
    • 检查 vrrp_strict:开启后单播 / 无 VIP 会启动失败,注释即可
    • 检查 VRID:网络内是否重复
    • 查看日志: /var/log/keepalived.log
  2. VIP 无法漂移

    • 检查主备节点心跳:tcpdump 监控组播 / 单播报文
    • 检查防火墙 / SELinux:是否拦截了 VRRP 协议(端口 112)
    • 检查优先级:备节点优先级是否低于主节点
    • 检查认证配置:主备节点 auth_type/auth_pass 是否一致
  3. LVS 调度失败

    • 检查 IPVS 规则: ipvsadm -Ln 是否生成
    • 检查后端 RS 健康状态:是否被标记为 down
    • 检查 LVS 模式:DR 模式下 RS 是否绑定 VIP 至 lo 网卡,关闭 ARP 响应
    • 检查 RS 服务:是否正常运行,端口是否开放
  4. 自定义脚本不执行

    • 检查脚本执行权限:是否赋予 chmod +x
    • 检查脚本返回值:是否符合预期(0 正常,非 0 故障)
    • 检查 keepalived 配置:是否开启 enable_script_security,脚本用户是否为 root
    • 查看日志:是否有脚本执行相关的错误信息

六、Keepalived 典型应用场景

  1. LVS 集群高可用 :结合 LVS 实现负载均衡 + 高可用,解决 LVS 调度器单点故障
  2. Nginx/HAProxy 高可用 :通过 vrrp_script 监控 Nginx/HAProxy 进程,故障时自动漂移 VIP
  3. Mysql/Redis 主备高可用 :结合主备复制,通过脚本监控数据库状态,故障时切换 VIP
  4. 跨网络高可用 :通过单播模式实现跨网段 / 跨机房的主备切换
  5. 多 VIP 管理 :通过多个 VRRP 实例,实现多个服务的独立 VIP 漂移,互不影响

七、核心总结

  1. Keepalived 是 VRRP 协议的软件实现,核心解决 单点故障 ,实现 VIP 自动漂移,提升服务高可用;
  2. 核心配置分为全局、VRRP 实例、LVS 三大模块, 同一虚拟路由器的 VRID / 认证 / VIP 必须一致
  3. 主备模式分为 抢占 / 非抢占 ,生产环境推荐 非抢占模式 ,避免网络抖动;
  4. 组播模式适合同网络, 单播模式 适合跨网络,需注释 vrrp_strict;
  5. 可通过 vrrp_script + track_script 实现自定义服务检测,服务故障时自动降低优先级触发 VIP 漂移;
  6. 双主模式通过 两个虚拟路由器 实现资源利用率 100%,适合高并发场景;
  7. 日志分离、邮件告警是生产环境必备配置,便于问题排查和故障通知;
  8. 结合 LVS 时,需注意 LVS 模式的配套配置(如 DR 模式的 RS 端 ARP 关闭)。

学习建议 :先搭建单主模式熟悉基础配置,再逐步扩展至非抢占、单播、双主模式,最后结合 Nginx/LVS 实现实际业务的高可用,重点掌握配置文件语法和故障排查思路。

3.keepalived.pdf 和其他 9 文件

将上面的表格转化成文字形式,生成keepalived的CSDN的学习笔记文档

Keepalived 从入门到精通:CSDN 超全学习笔记

适用场景 :Linux 高可用集群搭建、VIP 漂移配置、LVS 负载均衡高可用、服务故障自动切换 核心定位 :基于 VRRP 协议的高可用解决方案,专为解决单点故障设计,原生支持 LVS 集群管理与服务健康检测 实验环境 :CentOS/RHEL 7/8/9,节点规划(KA1:172.25.254.50、KA2:172.25.254.60、RS1:172.25.254.10、RS2:172.25.254.20),VIP 示例:172.25.254.100/200

一、Keepalived 基础核心认知

1.1 高可用集群核心概念

  • 集群类型分类
    • 负载均衡集群(LB):代表技术有 LVS、HAProxy、Nginx(http/stream 模块),核心是分发请求、提升并发处理能力;
    • 高可用集群(HA):适用于数据库、Redis 等关键服务,核心是消除单点故障(SPoF),保障服务持续可用;
    • 高性能集群(HPC):聚焦大规模计算任务,整合多节点算力。
  • 系统可用性指标 :可用性计算公式为 A = MTBF / (MTBF + MTTR) ,其中 MTBF 是平均无故障时间,MTTR 是平均修复时间。常见行业标准:
    • 99.9%:每月允许停机约 43.2 分钟;
    • 99.95%:每月允许停机约 21.6 分钟;
    • 99.99%:每月允许停机约 4.32 分钟;
    • 99.999%:每年允许停机约 5.26 分钟。
  • 高可用实现逻辑 :核心是降低 MTTR,通过建立冗余机制实现故障自动切换,常见模式包括主 / 备(active/passive)、双主(active/active),依赖心跳(HEARTBEAT)机制维持节点状态同步。

1.2 VRRP 协议核心原理

虚拟路由冗余协议(VRRP)是 Keepalived 的技术基石,用于解决静态网关单点故障问题,其核心术语与工作机制如下:

  • 核心术语
    • 虚拟路由器(Virtual Router):由多台物理路由器虚拟而成的逻辑设备,对外提供统一服务入口;
    • VRID(虚拟路由器标识):取值 0-255,是虚拟路由器的唯一标识,同一虚拟路由器的所有节点必须配置相同 VRID;
    • VIP(虚拟 IP):虚拟路由器的对外服务 IP,故障时自动漂移至健康节点;
    • VMAC(虚拟 MAC):格式为 00-00-5e-00-01-VRID,与 VIP 绑定,避免 ARP 缓存不一致问题;
    • 主设备(master)/ 备设备(backup):通过优先级(priority,取值 1-254)选举,优先级越高越易成为主设备;
    • 心跳通告:主设备周期性发送包含优先级的报文,备设备未收到通告则触发主备切换。
  • 关键技术特性
    • 工作方式:抢占式(默认,主设备恢复后抢占 VIP)、非抢占式(主设备恢复后不主动抢占,避免网络抖动);
    • 安全认证:支持无认证、简单字符认证(预共享密钥)、MD5 认证,生产环境推荐简单字符认证;
    • 工作模式:主 / 备模式(单虚拟路由器)、双主模式(两个虚拟路由器,互为主备)。

1.3 Keepalived 核心功能与架构

  • 核心功能
    1. 基于 VRRP 协议实现 VIP 地址漂移,解决单点故障;
    2. 自动为 VIP 所在节点生成 IPVS 规则,适配 LVS 负载均衡集群;
    3. 对 LVS 后端真实服务器(RS)进行健康状态检测(支持 TCP/HTTP/SSL 等方式);
    4. 支持脚本调用,可实现故障告警、服务启停等自定义逻辑,适配 Nginx、HAProxy 等服务。
  • 架构组成(用户空间)
    • VRRP Stack:处理 VRRP 协议报文,实现 VIP 状态通告与主备选举;
    • Checkers:负责后端 RS 及本地服务的健康状态检测;
    • IPVS Wrapper:生成并管理 LVS 集群的 IPVS 规则;
    • WatchDog:监控 Keepalived 自身进程,防止进程挂死;
    • SMTP 组件:实现故障切换时的邮件告警功能;
    • System Call:状态切换时调用自定义脚本,扩展功能边界。

二、环境准备与基础安装

2.1 实验环境统一配置

所有节点(KA1/KA2/RS1/RS2)需完成以下基础配置,避免环境不一致导致故障:

  1. 时间同步 :以 KA1 为时间服务器,其他节点同步其时间,确保日志与切换逻辑时序一致:

    bash

    运行

    # KA1 配置 chrony 服务
    vim /etc/chrony.conf
    allow 0.0.0.0/0  # 允许所有节点同步
    local stratum 10  # 本地时间层级
    systemctl restart chronyd && systemctl enable chronyd
    # 其他节点同步 KA1 时间
    vim /etc/chrony.conf
    pool 172.25.254.50 iburst  # 指向 KA1 地址
    systemctl restart chronyd && systemctl enable chronyd
    
  2. 本地解析与主机名通信 :配置 /etc/hosts 文件,实现节点间主机名直接访问:

    bash

    运行

    cat >> /etc/hosts << EOF
    172.25.254.50 KA1
    172.25.254.60 KA2
    172.25.254.10 RS1
    172.25.254.20 RS2
    EOF
    # 同步至其他节点
    for i in 60 10 20; do scp /etc/hosts 172.25.254.$i:/etc/hosts; done
    
  3. 关闭防火墙与 SELinux :避免拦截 VRRP 协议(默认端口 112)及服务通信:

    bash

    运行

    systemctl stop firewalld && systemctl disable firewalld
    setenforce 0 && sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
  4. 后端服务准备(RS 节点) :以 httpd 为例,提供测试服务用于后续验证:

    bash

    运行

    dnf install httpd -y
    # RS1 配置
    echo "RS1 - 172.25.254.10" > /var/www/html/index.html
    # RS2 配置
    echo "RS2 - 172.25.254.20" > /var/www/html/index.html
    systemctl enable --now httpd
    

2.2 Keepalived 安装与核心文件

2.2.1 安装命令

bash

运行

# CentOS/RHEL 8+
dnf install keepalived -y
# CentOS/RHEL 7
yum install keepalived -y
2.2.2 核心文件路径与作用
  • 主程序文件: /usr/sbin/keepalived ,Keepalived 核心执行程序;
  • 主配置文件: /etc/keepalived/keepalived.conf ,包含全局配置、VRRP 实例配置、LVS 配置;
  • 配置示例: /usr/share/doc/keepalived/ ,官方提供的配置参考模板;
  • 系统服务文件: /lib/systemd/system/keepalived.service ,用于通过 systemd 管理服务;
  • 服务环境配置: /etc/sysconfig/keepalived ,可配置 Keepalived 启动参数(如日志级别);
  • 日志文件:默认存于 /var/log/messages ,可通过配置分离至 /var/log/keepalived.log
2.2.3 基础启动与验证

bash

运行

# 启动服务并设置开机自启
systemctl start keepalived && systemctl enable keepalived
# 验证进程状态
ps axf | grep keepalived
# 验证配置文件语法(关键步骤,避免配置错误导致启动失败)
keepalived -t -f /etc/keepalived/keepalived.conf

三、核心配置详解(从基础到进阶)

3.1 配置文件整体结构

Keepalived 配置文件分为三大核心模块,所有配置均围绕此结构展开:

conf

! Configuration File for keepalived
# 1. 全局配置:邮件告警、路由ID、VRRP全局参数等
global_defs {
    ...
}
# 2. VRRP实例配置:虚拟路由器、VIP、主备选举、认证等核心配置
vrrp_instance 实例名 {
    ...
}
# 3. LVS配置:虚拟服务、后端RS、健康检测、调度算法等(可选,适配LVS集群)
virtual_server VIP 端口 {
    ...
    real_server RS_IP 端口 {
        ...
    }
}

3.2 全局配置(global_defs)

作用于 Keepalived 整个进程的全局参数,关键配置如下:

conf

global_defs {
    # 故障切换时的告警邮件接收人,可配置多个
    notification_email {
        timinglee_zln@163.com
        594233887@qq.com
    }
    # 告警邮件发件人地址
    notification_email_from keepalived@KA1
    # 邮件服务器地址(本地或公网SMTP服务器)
    smtp_server 127.0.0.1
    # 邮件服务器连接超时时间(单位:秒)
    smtp_connect_timeout 30
    # 路由ID,每个节点唯一,建议使用主机名
    router_id KA1
    # 跳过同一路由器的重复通告报文检查,提升性能
    vrrp_skip_check_adv_addr
    # 严格遵循VRRP协议(建议注释,否则单播、无VIP等场景会启动失败)
    # vrrp_strict
    # 免费ARP报文发送间隔(单位:秒),用于更新网络ARP缓存
    vrrp_garp_interval 1
    # 免费NA报文发送间隔(单位:秒),适配IPv6场景
    vrrp_gna_interval 1
    # VRRP组播地址(默认224.0.0.18,可自定义)
    vrrp_mcast_group4 224.0.0.44
    # 开启脚本执行安全校验(避免恶意脚本执行)
    enable_script_security
    # 指定自定义脚本执行用户(默认keepalived_script,生产环境建议用root)
    script_user root
}

3.3 VRRP 实例配置(vrrp_instance)

核心配置模块,实现 VIP 管理与主备切换, 同一虚拟路由器的所有节点必须保证 VRID、认证密码、VIP 一致 ,仅需调整 state priority 区分主备。

3.3.1 基础主备配置

KA1(Master 节点)

conf

vrrp_instance WEB_VIP {
    # 节点状态:MASTER(主)/BACKUP(备),非抢占模式下均设为BACKUP
    state MASTER
    # 绑定的物理网卡(如eth0、ens33,需与本机网卡名称一致)
    interface eth0
    # 虚拟路由器ID(0-255,同一虚拟路由器唯一)
    virtual_router_id 51
    # 优先级(1-254),Master优先级需高于Backup(如100>80)
    priority 100
    # 心跳通告间隔(单位:秒,默认1s,建议保持默认)
    advert_int 1
    # 认证配置,同一虚拟路由器必须一致
    authentication {
        # 认证类型:PASS(简单密码,推荐)/AH(IPSEC,不推荐)
        auth_type PASS
        # 预共享密钥(仅前8位有效,建议用数字+字母组合)
        auth_pass 1111
    }
    # 虚拟IP(VIP),可配置多个,格式:IP/掩码 dev 网卡 label 别名
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

KA2(Backup 节点) :仅需修改 3 处配置,其余与 Master 一致:

conf

vrrp_instance WEB_VIP {
    state BACKUP  # 状态改为备节点
    priority 80    # 优先级低于主节点
    virtual_router_id 51  # 与主节点保持一致
    # 其余配置(interface、authentication、virtual_ipaddress等)与KA1相同
}
3.3.2 关键进阶配置
  1. 非抢占模式(nopreempt) :默认抢占模式下,主节点恢复后会立即抢占 VIP,可能导致网络抖动。非抢占模式下,所有节点状态均设为 BACKUP,主节点恢复后不主动抢占,仅当当前主节点故障时才漂移 VIP:

conf

vrrp_instance WEB_VIP {
    state BACKUP  # 所有节点均设为BACKUP
    priority 100  # KA1优先级仍高于KA2(如100>80)
    nopreempt     # 开启非抢占模式
    # 其余配置保持不变
}
  1. 抢占延迟模式(preempt_delay) :若需保留抢占功能,可设置延迟时间(默认 300s),避免短时间内多次切换:

conf

preempt_delay 10  # 主节点恢复后,延迟10s抢占VIP
  1. 单播模式配置 :默认组播模式无法跨网络通信,且可能造成网络拥塞。单播模式通过指定节点互访 IP,仅在主备节点间发送心跳,需注释 vrrp_strict

conf

vrrp_instance WEB_VIP {
    ...
    # 单播源IP:本机物理IP
    unicast_src_ip 172.25.254.50
    # 单播对等体:对方节点物理IP,多节点可添加多个
    unicast_peer {
        172.25.254.60
    }
    ...
}
  1. 故障切换脚本(notify_*) :节点状态切换为 Master/Backup/Fault 时,自动调用自定义脚本(如邮件告警、服务启停):

conf

vrrp_instance WEB_VIP {
    ...
    # 成为Master时执行的脚本
    notify_master "/etc/keepalived/scripts/notify.sh master"
    # 成为Backup时执行的脚本
    notify_backup "/etc/keepalived/scripts/notify.sh backup"
    # 故障时执行的脚本
    notify_fault "/etc/keepalived/scripts/notify.sh fault"
    ...
}

3.4 LVS 集成配置(virtual_server/real_server)

Keepalived 原生支持 LVS 负载均衡,可自动生成 IPVS 规则并监控后端 RS 健康状态,核心配置如下:

conf

# 虚拟服务配置:VIP + 端口(如80端口对应HTTP服务)
virtual_server 172.25.254.100 80 {
    # 健康检测间隔(单位:秒)
    delay_loop 6
    # LVS调度算法:rr(轮询)/wrr(加权轮询)/lc(最小连接)/wlc(加权最小连接)
    lb_algo wrr
    # LVS模式:DR(直接路由,推荐)/NAT/TUN(隧道)
    lb_kind DR
    # 服务协议:TCP/UDP
    protocol TCP
    # 所有RS故障时,跳转的备用服务地址
    sorry_server 172.25.254.30 80
    # 后端真实服务器(RS1)配置
    real_server 172.25.254.10 80 {
        # 权重(值越大,被调度的概率越高)
        weight 1
        # TCP层健康检测(适用于无HTTP服务的场景)
        TCP_CHECK {
            # 连接超时时间(单位:秒)
            connect_timeout 5
            # 重试次数
            nb_get_retry 3
            # 重试延迟(单位:秒)
            delay_before_retry 3
            # 检测端口(与RS服务端口一致)
            connect_port 80
        }
    }
    # 后端真实服务器(RS2)配置
    real_server 172.25.254.20 80 {
        weight 1
        # HTTP层健康检测(更精准,检测页面可用性)
        HTTP_GET {
            url {
                # 检测的URL路径(如根路径/,或健康检查接口/health)
                path /
                # 健康状态响应码(正常为200)
                status_code 200
            }
            connect_timeout 1
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}

注意 :LVS-DR 模式下,后端 RS 需将 VIP 绑定至 lo 网卡,并关闭 ARP 响应,避免 VIP 冲突:

bash

运行

# RS1/RS2 执行以下命令
ip addr add 172.25.254.100/32 dev lo
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

3.5 自定义服务检测(vrrp_script + track_script)

通过自定义脚本监控本地服务(如 Nginx、HAProxy、MySQL),服务故障时自动降低节点优先级,触发 VIP 漂移。核心逻辑:脚本返回 0 表示服务正常,非 0 表示故障。

3.5.1 配置步骤
  1. 定义检测脚本;
  2. 在 VRRP 实例中通过 track_script 调用脚本。
3.5.2 实战配置(监控 HAProxy)

conf

# 1. 定义vrrp_script(需放在global_defs之后、vrrp_instance之前)
vrrp_script check_haproxy {
    # 检测脚本路径(检查HAProxy进程是否存在)
    script "/etc/keepalived/scripts/check_haproxy.sh"
    # 检测间隔(单位:秒)
    interval 1
    # 故障时降低的优先级(负值,如-30,确保低于备节点优先级)
    weight -30
    # 连续失败次数(判定为故障,建议设为2次以上)
    fall 2
    # 连续成功次数(判定为恢复)
    rise 2
    # 脚本执行超时时间(单位:秒)
    timeout 2
}
# 2. 在vrrp_instance中调用脚本
vrrp_instance WEB_VIP {
    ...
    track_script {
        check_haproxy  # 引用上面定义的检测脚本
    }
    ...
}
3.5.3 检测脚本示例(check_haproxy.sh)

bash

运行

#!/bin/bash
# 检查HAProxy进程是否存在(killall -0 仅检测进程,不杀死)
/usr/bin/killall -0 haproxy
# 脚本返回值:0=正常,非0=故障

赋予脚本执行权限:

bash

运行

chmod +x /etc/keepalived/scripts/check_haproxy.sh

四、高级实战场景配置

4.1 双主模式(Master/Master)

单主模式下备节点资源闲置,双主模式通过两个虚拟路由器、两个 VIP 实现资源利用率 100%:每个节点在一个虚拟路由器中为 Master,另一个为 Backup,同时对外提供服务。

4.1.1 核心配置

KA1 配置

conf

# 虚拟路由器1:WEB_VIP(VIP=172.25.254.100),KA1为Master
vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}
# 虚拟路由器2:DB_VIP(VIP=172.25.254.200),KA1为Backup
vrrp_instance DB_VIP {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:1
    }
}

KA2 配置 :与 KA1 配置对称,仅交换 state priority

conf

# 虚拟路由器1:WEB_VIP,KA2为Backup
vrrp_instance WEB_VIP {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}
# 虚拟路由器2:DB_VIP,KA2为Master
vrrp_instance DB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.200/24 dev eth0 label eth0:1
    }
}
4.1.2 验证效果
  • 正常状态:KA1 持有 172.25.254.100,KA2 持有 172.25.254.200,分别对外提供服务;
  • 节点故障:若 KA1 下线,KA2 自动接管 172.25.254.100,所有服务无中断;KA1 恢复后,仅收回自身 Master 角色对应的 VIP。

4.2 子配置文件拆分(include 指令)

生产环境配置复杂时,主配置文件可读性差,可通过 include 指令将不同功能的配置拆分至独立子文件,便于管理。

4.2.1 配置步骤
  1. 创建子配置文件目录;
  2. 主配置文件中引入子配置;
  3. 子配置文件中编写具体的 VRRP/LVS 配置。
4.2.2 实战配置

bash

运行

# 1. 创建子配置目录
mkdir -p /etc/keepalived/conf.d

主配置文件(/etc/keepalived/keepalived.conf) :仅保留全局配置,通过 include 引入子配置:

conf

global_defs {
    notification_email {
        timinglee_zln@163.com
    }
    notification_email_from keepalived@KA1
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    router_id KA1
    vrrp_skip_check_adv_addr
    # vrrp_strict
    vrrp_garp_interval 1
    vrrp_gna_interval 1
}
# 引入conf.d目录下所有.conf后缀的子配置文件
include /etc/keepalived/conf.d/*.conf

子配置文件(/etc/keepalived/conf.d/webvip.conf) :编写 WEB_VIP 相关配置:

conf

vrrp_instance WEB_VIP {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

4.3 日志分离配置

默认情况下,Keepalived 日志混存于 /var/log/messages ,与其他服务日志混杂,不利于问题排查。通过以下配置实现日志单独存储:

bash

运行

# 1. 修改Keepalived启动参数,指定日志设备
vim /etc/sysconfig/keepalived
KEEPALIVED_OPTIONS="-D -S 6"  # -S 6 指定日志设备为local6
# 2. 配置rsyslog,将local6的日志定向至专属文件
vim /etc/rsyslog.conf
local6.*                                                /var/log/keepalived.log
# 3. 重启服务使配置生效
systemctl restart keepalived rsyslog
# 4. 验证日志文件
tail -f /var/log/keepalived.log

4.4 故障切换邮件告警

实现 Keepalived 状态切换时自动发送邮件告警,及时通知运维人员。核心分为邮件环境配置和告警脚本配置。

4.4.1 邮件环境配置(所有节点)

以 163 邮箱为例,配置 SMTP 服务:

bash

运行

# 安装邮件工具
dnf install s-nail postfix -y
systemctl start postfix && systemctl enable postfix
# 配置SMTP(编辑/etc/mail.rc)
vim /etc/mail.rc
set smtp=smtp.163.com
set smtp-auth=login
set smtp-auth-user=你的163邮箱@163.com
set smtp-auth-password=你的163邮箱授权码(非登录密码)
set from=你的163邮箱@163.com
set ssl-verify=ignore
# 测试邮件发送
echo "Keepalived告警测试" | mail -s "测试邮件" 接收邮箱@qq.com
4.4.2 告警脚本配置
  1. 创建告警脚本:

bash

运行

mkdir -p /etc/keepalived/scripts
vim /etc/keepalived/scripts/notify.sh
#!/bin/bash
# 告警邮件接收人
mail_dest="594233887@qq.com"
# 邮件发送函数
mail_send() {
    mail_subj="$HOSTNAME 状态切换为 $1(VIP漂移)"
    mail_mess="$(date +%F\ %T):VRRP状态切换,$HOSTNAME 变为 $1 角色"
    echo "$mail_mess" | mail -s "$mail_subj" $mail_dest
}
# 根据脚本参数调用函数
case $1 in
    master)
        mail_send master
        ;;
    backup)
        mail_send backup
        ;;
    fault)
        mail_send fault
        ;;
    *)
        exit 1
        ;;
esac
  1. 赋予脚本执行权限:

bash

运行

chmod +x /etc/keepalived/scripts/notify.sh
  1. 在 VRRP 实例中调用脚本(参考 3.3.2 节 notify_* 配置)。

五、核心运维命令与故障排查

5.1 常用运维命令

bash

运行

# 服务启停与状态查看
systemctl start/stop/restart/status keepalived
# 配置文件语法校验(必做!避免配置错误)
keepalived -t -f /etc/keepalived/keepalived.conf
# 查看VIP绑定情况
ip addr | grep -E "eth0:0|ens33:0"  # 对应自己的网卡别名
# 查看LVS IPVS规则
ipvsadm -Ln
# 监控VRRP心跳报文(组播模式)
tcpdump -i eth0 -nn host 224.0.0.18
# 监控VRRP心跳报文(单播模式)
tcpdump -i eth0 -nn src 172.25.254.50 and dst 172.25.254.60
# 查看Keepalived日志
tail -f /var/log/keepalived.log
# 检测后端RS健康状态
ipvsadm -Ln --stats

5.2 常见故障排查思路

  1. Keepalived 启动失败

    • 检查配置文件语法: keepalived -t -f /etc/keepalived/keepalived.conf
    • 检查 vrrp_strict :开启后单播、无 VIP 会启动失败,注释即可;
    • 检查 VRID:同一网络内是否存在重复 VRID;
    • 查看日志: /var/log/keepalived.log 定位具体错误。
  2. VIP 无法漂移

    • 检查主备节点心跳:用 tcpdump 监控组播 / 单播报文,确认是否收到心跳;
    • 检查防火墙 / SELinux:是否拦截 VRRP 协议(端口 112);
    • 检查优先级:备节点优先级是否低于主节点;
    • 检查认证配置:主备节点 auth_type auth_pass 是否一致。
  3. LVS 调度失败

    • 检查 IPVS 规则: ipvsadm -Ln 确认规则是否生成;
    • 检查后端 RS 状态:是否被标记为 down( ipvsadm -Ln --stats );
    • 检查 LVS 模式:DR 模式下 RS 是否绑定 VIP 至 lo 网卡,是否关闭 ARP 响应;
    • 检查 RS 服务:是否正常启动,端口是否开放( telnet RS_IP 端口 )。
  4. 自定义脚本不执行

    • 检查脚本权限:是否赋予执行权限( chmod +x );
    • 检查脚本返回值:是否符合预期(0 = 正常,非 0 = 故障);
    • 检查 Keepalived 配置:是否开启 enable_script_security ,脚本执行用户是否有足够权限;
    • 查看日志:通过 /var/log/keepalived.log 排查脚本执行错误。

六、典型应用场景总结

  1. LVS 集群高可用 :结合 LVS 实现负载均衡 + 高可用,解决 LVS 调度器单点故障;
  2. Nginx/HAProxy 高可用 :通过 vrrp_script 监控 Nginx/HAProxy 进程,故障时自动漂移 VIP;
  3. 数据库 / Redis 高可用 :搭配主备复制,通过脚本监控数据库状态,故障时切换 VIP;
  4. 跨网络高可用 :单播模式支持跨网段、跨机房的主备切换;
  5. 多服务独立高可用 :通过多个 VRRP 实例,为不同服务配置独立 VIP,实现故障隔离。

七、学习总结与建议

  1. Keepalived 核心是基于 VRRP 协议实现 VIP 漂移,解决单点故障,关键配置在于 VRID 唯一、认证一致、优先级合理
  2. 生产环境推荐 非抢占模式 + 单播模式 ,避免网络抖动和拥塞;
  3. 日志分离和邮件告警是运维必备配置,便于快速定位故障;
  4. 结合 LVS 时,需重点关注后端 RS 的 ARP 配置和健康检测方式;
  5. 学习路径:先搭建单主模式熟悉基础配置,再扩展双主、脚本监控、跨网络等高级场景,多动手实操验证故障切换效果。

本文标签: 运行编程配置