笔记说明:本文档旨在系统性地梳理Keepalived的核心概念、底层VRRP协议、安装配置方法,并提供从基础虚拟路由到LVS集成的多阶段实验步骤,作为学习和配置Keepalived实现高可用的参考手册。
一、理论基础与概述
1.1 高可用核心目标
Keepalived的核心目标是解决单点故障(SPoF) 问题,通过冗余机制保障服务持续可用。
-
可用性指标(SLA)
-
公式 :
可用性 A = MTBF / (MTBF + MTTR)-
MTBF (平均无故障时间):追求更长。
-
MTTR (平均故障恢复时间):追求更短,是高可用设计的核心。
-
-
常见标准:
可用性级别 月停机时间 年停机时间 99.9% 43.2 分钟 8.76 小时 99.99% 4.32 分钟 52.56 分钟 99.999% 25.92 秒 5.26 分钟
-
1.2 VRRP(虚拟路由冗余协议)
VRRP是Keepalived的底层核心协议,用于将多台路由器(或服务器)虚拟成一个,避免网关单点故障。
-
关键术语
-
VRID:虚拟路由器ID,同一组高可用节点中的VRID必须一致。
-
VIP(虚拟IP):对外提供服务的IP,是故障时在节点间漂移的核心对象。
-
Master/Backup:主/备节点,角色由优先级决定。
-
Priority(优先级):范围1-254,值越高越可能成为Master。
-
-
工作模式
-
抢占式(默认):优先级更高的Master恢复后,会重新抢占VIP。
-
非抢占式:即使原Master恢复,也不主动抢占,由当前Master继续服务。
-
1.3 Keepalived核心架构
-
是什么:VRRP协议的开源实现,原生为LVS(IPVS)设计,现已扩展支持Nginx、HAProxy等任意服务的高可用。
-
核心功能
-
VIP管理:基于VRRP实现VIP的自动漂移。
-
LVS集成:自动为IPVS集群生成规则并做健康检查。
-
服务监测:通过外部脚本监测任意第三方服务。
-
故障通知:触发邮件或自定义脚本。
-
1.4 安装与配置概览
-
安装 :
dnf install keepalived -y -
主配置文件 :
/etc/keepalived/keepalived.conf -
核心配置段:
-
global_defs:全局设置(如邮件通知、router_id)。 -
vrrp_instance:VRRP实例定义,是配置VIP、角色、认证的核心。 -
virtual_server:LVS配置段(可选)。
-
-
关键参数说明:
-
vrrp_strict:严格遵守VRRP协议,生产环境通常注释掉,否则可能导致无法ping通VIP或单播模式失败。 -
vrrp_mcast_group4:VRRP组播地址,默认224.0.0.18。
-
二、基础环境搭建
2.1 实验环境规划
-
Web服务器:
-
rs1 (
172.25.254.10): 提供Web服务,首页标识 "RS1 - 172.25.254.10" -
rs2 (
172.25.254.20): 提供Web服务,首页标识 "RS2 - 172.25.254.20"
-
-
Keepalived节点:
-
KA1 (
172.25.254.50) -
KA2 (
172.25.254.60)
-
-
虚拟IP(VIP):
-
172.25.254.100(用于Web服务) -
172.25.254.200(用于后续DB实验)
-
2.2 基础配置步骤
-
配置主机名与IP(所有节点)
# 示例:在 rs1 上 vmset.sh eth0 172.25.254.10 rs1 dnf install httpd -y echo "RS1 - 172.25.254.10" > /var/www/html/index.html systemctl enable --now httpd -
配置本地解析(在KA1操作,并同步)
vim /etc/hosts # 添加以下内容 172.25.254.50 KA1 172.25.254.60 KA2 172.25.254.10 rs1 172.25.254.20 rs2 # 同步到其他节点 for i in 60 10 20; do scp /etc/hosts 172.25.254.$i:/etc/hosts; done -
配置时间同步(以KA1为服务器)
-
在KA1上配置Chrony允许同步并重启服务。
-
在KA2 上配置指向KA1 (
pool 172.25.254.50 iburst),并用chronyc sources -v验证。
-
三、基础虚拟路由配置
3.1 安装与主节点(KA1)配置
-
安装Keepalived(KA1和KA2)
dnf install keepalived.x86_64 -y -
配置KA1为Master
vim /etc/keepalived/keepalived.confkeepalived
global_defs { notification_email { yunlei713@qq.com } notification_email_from yunlei713@qq.com 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 vrrp_mcast_group4 224.0.0.44 } 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 } }bash
systemctl enable --now keepalived
3.2 配置备节点(KA2)与验证
-
配置KA2为Backup
keepalived
global_defs { ... # 类似KA1,router_id建议改为KA2 } vrrp_instance WEB_VIP { state BACKUP # 角色为BACKUP interface eth0 virtual_router_id 51 priority 80 # 优先级低于Master ... # 其他认证、IP等配置与Master一致 }systemctl enable --now keepalived -
验证高可用
-
查看VIP :在KA1上执行
ifconfig eth0:0应看到VIP;在KA2上应看不到。 -
抓包观察 :
tcpdump -i eth0 -nn host 224.0.0.44可看到Master定期发送的VRRP通告。 -
模拟故障 :停止KA1的Keepalived服务 (
systemctl stop keepalived),稍后在KA2上执行ifconfig eth0:0,应看到VIP已漂移至KA2。
-
3.3 日志分离配置
将Keepalived日志从系统日志中独立出来,便于排查。
-
修改启动参数
vim /etc/sysconfig/keepalived KEEPALIVED_OPTIONS="-D -S 6" # 指定日志设备为 local6 -
配置rsyslog
vim /etc/rsyslog.conf # 添加一行 local6.* /var/log/keepalived.log systemctl restart rsyslog keepalived -
验证
tail -f /var/log/keepalived.log # 实时查看独立日志
四、核心功能进阶实验
4.1 抢占模式配置
-
非抢占模式 (
nopreempt):避免因主节点恢复导致不必要的VIP切换。-
要求 :实例中的
state必须设置为BACKUP。 -
配置 :在KA1和KA2的
vrrp_instance中添加nopreempt。 -
效果:原Master(KA1)恢复后,VIP不会自动从当前Master(KA2)漂移回来。
-
-
延迟抢占 (
preempt_delay):设置Master恢复后延迟多久才抢占VIP。- 配置 :在实例中添加
preempt_delay 10(单位:秒),通常与state BACKUP配合使用。
- 配置 :在实例中添加
4.2 子配置文件拆分
将不同的 vrrp_instance 拆分到独立的配置文件中,便于管理。
-
创建子目录和配置文件
mkdir /etc/keepalived/conf.d vim /etc/keepalived/conf.d/webvip.conf # 将 WEB_VIP 实例的完整配置移入此文件 -
修改主配置文件
keepalived
global_defs { ... } # 全局定义保留在主文件 include /etc/keepalived/conf.d/*.conf # 引入子配置
4.3 单播模式配置
当网络环境不支持组播,或需要跨网段通信时,可使用单播。
-
配置 :在
vrrp_instance中指定unicast_src_ip(本机IP)和unicast_peer(对端IP列表),并注释掉组播地址配置。keepalived
vrrp_instance WEB_VIP { ... unicast_src_ip 172.25.254.50 # KA1的本机IP unicast_peer { 172.25.254.60 # 对端KA2的IP } # vrrp_mcast_group4 224.0.0.44 # 注释掉组播 } -
验证 :重启服务后,可用
tcpdump -i eth0 -nn host 172.25.254.50抓包,查看单播VRRP通信。
4.4 业务VIP迁移告警(邮件通知)
当角色发生切换时,通过邮件发送告警。
-
配置邮件客户端 (以
s-nail和163邮箱为例)dnf install s-nail postfix -y vim /etc/mail.rc # 添加以下配置 set from=yourname@163.com smtp=smtp.163.com set smtp-auth-user=yourname@163.com smtp-auth-password=your-password smtp-auth=login -
编写告警脚本 (
/etc/keepalived/warning.sh)#!/bin/bash VIP="172.25.254.100" EMAIL="admin@example.com" case $1 in master) echo "`date`: I am master, VIP $VIP" | mail -s "Keepalived Master" $EMAIL ;; backup) echo "`date`: I am backup, VIP $VIP" | mail -s "Keepalived Backup" $EMAIL ;; fault) echo "`date`: Keepalived fault!" | mail -s "Keepalived Fault" $EMAIL ;; esac chmod +x /etc/keepalived/warning.sh -
集成到Keepalived配置
keepalived
vrrp_instance WEB_VIP { ... notify_master "/etc/keepalived/warning.sh master" notify_backup "/etc/keepalived/warning.sh backup" notify_fault "/etc/keepalived/warning.sh fault" }
五、高可用架构实验
5.1 双主模式
两台节点互为主备,各自承担一个VIP,提高资源利用率。
-
KA1配置 :
WEB_VIP为MASTER(优先级100),DB_VIP为BACKUP(优先级80)。 -
KA2配置 :
WEB_VIP为BACKUP(优先级80),DB_VIP为MASTER(优先级100)。 -
验证:
-
正常情况下,KA1持有
172.25.254.100,KA2持有172.25.254.200。 -
停止任一节点,另一节点将同时接管两个VIP。
-
5.2 LVS+Keepalived 实现IPVS高可用
这是Keepalived最经典的应用场景,它不仅能管理VIP,还能根据RS的健康状态动态调整LVS规则。
-
配置真实服务器(RS)
-
在RS1和RS2的lo接口绑定VIP (
172.25.254.100/32),用于接收DR模式的请求。 -
配置ARP抑制,避免RS直接响应客户端的ARP请求。
bash
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
-
-
配置Keepalived集成LVS(在KA1/KA2上)
-
在
keepalived.conf中定义virtual_server段,Keepalived会自动生成对应的IPVS规则,并对RS进行健康检查。 -
核心配置示例:
keepalived
virtual_server 172.25.254.100 80 { delay_loop 3 lb_algo rr lb_kind DR protocol TCP real_server 172.25.254.10 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 } } real_server 172.25.254.20 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 } } }
-
总结
Keepalived通过实现VRRP协议,为关键业务提供了强大的高可用保障。其核心在于管理VIP的漂移 ,并可与LVS深度集成,实现对负载均衡器本身及其后端服务器的健康检查。掌握其抢占模式、单播通信、通知脚本以及双主架构,是构建稳健高可用方案的基础。