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 BACKUPpriority 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)
- 在 MASTER(KA1)上模拟故障:
bash
systemctl stop keepalived.service
- 在 BACKUP(KA2)上检查 VIP 是否被迁移(ifconfig / ip addr)。
- 恢复 MASTER:
bash
systemctl start keepalived.service
日志分离(把 keepalived 日志单独写文件)
- 设置 Keepalived 启动参数以指定 syslog facility(示例使用 local6):
编辑/etc/sysconfig/keepalived,添加或修改:
bash
KEEPALIVED_OPTIONS="-D -S 6"
说明:参数语义可能随发行版/版本有所差异,-S 指定 syslog facility(6 对应 local6);请参考本机 keepalived 的 man 文档或发行版说明。
- 配置 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.log或journalctl -u keepalived -f - 抓包:
tcpdump -i eth0 -nn host 224.0.0.44 - 网络接口:
ifconfig或ip 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.log或journalctl) - 系统或网络管理工具(NetworkManager、systemd-networkd)是否干预地址别名
- 多播(multicast)是否被宿主或虚拟网络阻断
- keepalived 配置语法(
- 与 ARP、gratuitous ARP 相关的问题可通过调整
vrrp_garp_interval、vrrp_gna_interval等参数尝试改善。 - 在某些网络环境下可使用
vrrp_skip_check_adv_addr绕开地址检查问题(谨慎使用)。
简要复查清单(运行前)
- /etc/hosts 已同步到所有节点
- rs1/rs2 web 服务��运行并可访问
- chronyd/ntp 同步正常(尤其是时钟偏差)
- keepalived 已安装并启用,主/备配置正确(MASTER/BACKUP 与 priority)
- rsyslog 已配置(若需要单独日志)
- 执行一次配置语法校验:
keepalived -t -f /etc/keepalived/keepalived.conf