Keepalived ------ 子配置文件设定 笔记

背景与目的
当 keepalived 的配置项增多时,全部写在 /etc/keepalived/keepalived.conf 会让主配置变得冗长、难以维护。通过在主配置中使用 include 指令加载子配置文件,可以把每个 VRRP 实例或不同功能分离到独立文件,提升可读性与可维护性。
总体思路
- 把全局设置(global_defs)放在主配置文件
/etc/keepalived/keepalived.conf。 - 在主配置中使用
include /etc/keepalived/conf.d/*.conf指定一个目录来放置子配置文件。 - 每个 VRRP 实例写成一个独立的子文件,例如
/etc/keepalived/conf.d/webvip.conf。 - 使用
keepalived -t -f /etc/keepalived/keepalived.conf测试语法,确认无误后重启服务。
主配置示例(/etc/keepalived/keepalived.conf)
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
说明:
- global_defs 放全局参数(邮件、router_id、GRAT ARP 等)。
vrrp_skip_check_adv_addr、vrrp_garp_interval、vrrp_gna_interval等可根据网络环境调整。include行会加载conf.d目录下所有.conf文件��顺序按文件名排序。
创建目录并写入子配置:
bash
mkdir -p /etc/keepalived/conf.d
vim /etc/keepalived/conf.d/webvip.conf # 写入上面示例
子配置示例(/etc/keepalived/conf.d/webvip.conf)
text
vrrp_instance WEB_VIP {
state MASTER # MASTER 或 BACKUP(在备节点改为 BACKUP)
interface eth0
virtual_router_id 51
priority 100 # MASTER 大于 BACKUP(例如 100 vs 80)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.254.100/24 dev eth0 label eth0:0
}
}
要点说明:
state:在主节点写MASTER,备节点写BACKUP。virtual_router_id:同一 VIP 的所有节点必须一致;不同 VIP 需不同 ID。priority:数字越大越优先成为 MASTER。authentication:保证所有参与节点的auth_pass一致。virtual_ipaddress:可以直接写172.25.254.100/24或带dev/label指定别名方式,根据系统兼容性选择。
- 测试配置语法:
bash
keepalived -t -f /etc/keepalived/keepalived.conf
- 重启服务:
bash
systemctl restart keepalived.service
- 查看接口确认 VIP 已添加:
bash
ip addr show eth0
# 或 ifconfig
常见问题与排障建议
- VIP 未出现或无法漂移:
- 用
keepalived -t检查配置语法。 - 查看 keepalived 日志:
tail -f /var/log/keepalived.log或journalctl -u keepalived -f。 - 确认
interface名称正确(虚拟化环境接口名可能不是 eth0)。 - 检查是否有 NetworkManager 或 cloud-init 等管理网络,可能覆盖别名或二级地址。
- 多播/组播被宿主或虚拟网络阻断会导致 VRRP 报文不可见或不通。
- auth_pass、virtual_router_id、priority 等参数不匹配会导致选举失败。
- 用
- 子配置未生效:
- 确认
include路径正确,文件名后缀匹配(示例*.conf)。 - 检查子文件权限(keepalived 进程应能读取)。
- 修改后需重启 keepalived 才能生效(或向 keepalived 发送 reload,由发行版支持与否决定)。
- 确认
- 多个实例管理:
- 每个实例用单独文件,文件名建议以实例名或功能命名(便于排序与查找)。
- 当有多个 VIP 或不同服务时,可在 conf.d 中分别维护 webvip.conf、dbvip.conf 等。
进阶建议
- 将
conf.d目录纳入版本控制(git)以便变更追踪与审核。 - 为子配置建立命名规范与注释(创建时间、负责人、用途)。
- 在变更前在测试环境跑
keepalived -t并做故障演练(停掉 MASTER 查看 BACKUP 是否接管)。 - 若有自动化部署(Ansible、Salt 等),把主/子配置模板化生成并分发。
、负责人、用途)。
- 在变更前在测试环境跑
keepalived -t并做故障演练(停掉 MASTER 查看 BACKUP 是否接管)。 - 若有自动化部署(Ansible、Salt 等),把主/子配置模板化生成并分发。