Keepalived高可用配置指南

Keepalived 实验环境与配置笔记

概览 / 拓扑

  • Keepalived 节点
    • KA1: 172.25.254.50 (MASTER)
    • KA2: 172.25.254.60 (BACKUP)
  • 后端 Web 服务
    • rs1: 172.25.254.10
    • rs2: 172.25.254.20
  • 虚拟 IP (VIP):172.25.254.100(通过 VRRP 发布)
  • 网络模式:单网卡 NAT(eth0)

环境准备

1. 部署后端 web(rs1、rs2)

在 rs1:

bash 复制代码
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

在 rs2:

bash 复制代码
vmset.sh eth0 172.25.254.20 rs2
dnf install httpd -y
echo "RS2 - 172.25.254.20" > /var/www/html/index.html
systemctl enable --now httpd

测试:

bash 复制代码
curl 172.25.254.10   # 应显示 RS1 - 172.25.254.10
curl 172.25.254.20   # 应显示 RS2 - 172.25.254.20

2. 部署 Keepalived 节点(KA1、KA2)

在 KA1:

bash 复制代码
vmset.sh eth0 172.25.254.50 KA1

在 KA2(示例中有笔误 KA6,应为 KA2):

bash 复制代码
vmset.sh eth0 172.25.254.60 KA2

3. 同步 /etc/hosts

在 KA1 编辑 /etc/hosts:

text 复制代码
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.254.50     KA1
172.25.254.60     KA2
172.25.254.10     rs1
172.25.254.20     rs2

从 KA1 分发到其它主机:

bash 复制代码
for i in 60 10 20; do
  scp /etc/hosts 172.25.254.$i:/etc/hosts
done

时间同步(Chrony)

在 KA1 提供时间同步

编辑 /etc/chrony.conf,添加:

text 复制代码
allow 0.0.0.0/0
local stratum 10

然后:

bash 复制代码
systemctl restart chronyd
systemctl enable --now chronyd

在 KA2 使用 KA1 作为上游

/etc/chrony.conf 中添加:

text 复制代码
pool 172.25.254.50 iburst

然后:

bash 复制代码
systemctl restart chronyd
systemctl enable --now chronyd
chronyc sources -v

Keepalived 安装

在两台节点上:

bash 复制代码
dnf install keepalived.x86_64 -y
systemctl enable --now keepalived.service

主配置(/etc/keepalived/keepalived.conf 示例)

建议把全局设置放在主配置,具体 VRRP 实例放在子文件中,通过 include 加载,便于维护。

主配置示例:

text 复制代码
! Configuration File for keepalived

global_defs {
   notification_email {
     timinglee_zln@163.com
   }
   notification_email_from timinglee_zln@163.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
}

include /etc/keepalived/conf.d/*.conf

说明:

  • include /etc/keepalived/conf.d/*.conf 用于拆分子配置。
  • vrrp_skip_check_adv_addr 用于某些网络环境避免地址检查失败(使用前理解其影响)。

子配置(/etc/keepalived/conf.d/webvip.conf 示例)

conf.d 下单独写 VRRP 实例:

text 复制代码
vrrp_instance WEB_VIP {
    state MASTER           # MASTER 节点写 MASTER,备节点写 BACKUP
    interface eth0
    virtual_router_id 51
    priority 100           # MASTER 优先级高(例如 100),BACKUP 较低(例如 80)
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.25.254.100/24 dev eth0 label eth0:0
    }
}

备节点 (KA2) 修改为:

  • state BACKUP
  • priority 80

测试配置并重启:

bash 复制代码
keepalived -t -f /etc/keepalived/keepalived.conf
systemctl restart keepalived.service

VIP 验证

  • 查看接口(应该看到 eth0:0 或 ip addr 中的 secondary address):
bash 复制代码
ifconfig
# 或
ip addr show eth0
  • 抓包查看 VRRP 广播包:
bash 复制代码
tcpdump -i eth0 -nn host 224.0.0.44
# 将看到 VRRP Advertisement 报文,如 vrid 51, prio 100 ...
  • 客户端测试 VIP:
bash 复制代码
curl 172.25.254.100

故障演练(Failover)

  1. 在 MASTER(KA1)上模拟故障:
bash 复制代码
systemctl stop keepalived.service
  1. 在 BACKUP(KA2)上检查 VIP 是否被迁移(ifconfig / ip addr)。
  2. 恢复 MASTER:
bash 复制代码
systemctl start keepalived.service

日志分离(把 keepalived 日志单独写文件)

  1. 设置 Keepalived 启动参数以指定 syslog facility(示例使用 local6):
    编辑 /etc/sysconfig/keepalived,添加或修改:
bash 复制代码
KEEPALIVED_OPTIONS="-D -S 6"

说明:参数语义可能随发行版/版本有所差异,-S 指定 syslog facility(6 对应 local6);请参考本机 keepalived 的 man 文档或发行版说明。

  1. 配置 rsyslog:
    /etc/rsyslog.conf 或新建 /etc/rsyslog.d/keepalived.conf 中加入:
text 复制代码
local6.*    /var/log/keepalived.log

重启 rsyslog:

bash 复制代码
systemctl restart rsyslog.service

查看日志:

bash 复制代码
ls -l /var/log/keepalived.log
tail -f /var/log/keepalived.log

常用命令速查

  • 配置测试: keepalived -t -f /etc/keepalived/keepalived.conf
  • 启停服务: systemctl enable --now keepalived.service / systemctl stop/start keepalived.service
  • 日志查看: tail -f /var/log/keepalived.logjournalctl -u keepalived -f
  • 抓包: tcpdump -i eth0 -nn host 224.0.0.44
  • 网络接口: ifconfigip addr
  • Chrony 状态: chronyc sources -v

注意事项与排障建议

  • auth_pass 必须在所有参与 VRRP 的节点上相同。
  • 同一 VIP 的 virtual_router_id 必须相同;不同 VIP 必须使用不同 ID。
  • priority 越大优先成为 MASTER。
  • interface 必须填写正确的物理接口名称(���拟化环境可能是 ens33、eth0 等)。
  • VIP 无法出现时,检查:
    • keepalived 配置语法(keepalived -t
    • keepalived 日志(/var/log/keepalived.logjournalctl
    • 系统或网络管理工具(NetworkManager、systemd-networkd)是否干预地址别名
    • 多播(multicast)是否被宿主或虚拟网络阻断
  • 与 ARP、gratuitous ARP 相关的问题可通过调整 vrrp_garp_intervalvrrp_gna_interval 等参数尝试改善。
  • 在某些网络环境下可使用 vrrp_skip_check_adv_addr 绕开地址检查问题(谨慎使用)。

简要复查清单(运行前)

  1. /etc/hosts 已同步到所有节点
  2. rs1/rs2 web 服务��运行并可访问
  3. chronyd/ntp 同步正常(尤其是时钟偏差)
  4. keepalived 已安装并启用,主/备配置正确(MASTER/BACKUP 与 priority)
  5. rsyslog 已配置(若需要单独日志)
  6. 执行一次配置语法校验: keepalived -t -f /etc/keepalived/keepalived.conf

相关推荐
崎岖Qiu11 小时前
【计算机网络 | 第七篇】数据链路层及三个基本问题
网络·网络协议·计算机网络·数据链路层
JSON_L11 小时前
Fastadmin中使用百度翻译API
php·fastadmin·百度翻译api
Yu_Lijing11 小时前
网络复习篇——网络基础(一)
网络·c++·笔记
郝学胜-神的一滴11 小时前
超越Spring的Summer(一): PackageScanner 类实现原理详解
java·服务器·开发语言·后端·spring·软件构建
乾元11 小时前
身份与访问:行为生物识别(按键习惯、移动轨迹)的 AI 建模
运维·网络·人工智能·深度学习·安全·自动化·安全架构
tzy23311 小时前
通俗理解 TCP 的 三次握手 和 四次挥手
网络·tcp/ip·三次握手·四次挥手
m0_7482299912 小时前
PHP简易聊天室开发指南
开发语言·php
匆匆那年96712 小时前
llamafactory推理消除模型的随机性
linux·服务器·学习·ubuntu
darkb1rd12 小时前
六、PHP错误处理与异常机制
安全·php·webshell
一晌小贪欢12 小时前
深入理解 Python HTTP 请求:从基础到高级实战指南
开发语言·网络·python·网络协议·http