当前位置: 首页 > news >正文

Keepalived 配置深度解析及最佳实践

一、Keepalived 配置要点深度解析

1. 全局定义:基础参数与通知机制
1.1 全局参数配置
global_defs {notification_email {admin@example.com  # 故障通知邮件接收者}notification_email_from keepalived@example.com  # 发件人邮箱smtp_server 192.168.1.100  # SMTP 服务器地址smtp_connect_timeout 30  # SMTP 连接超时时间(秒)router_id LVS_DEVEL  # 节点标识(需在集群内唯一)vrrp_skip_check_adv_addr  # 跳过对通告地址的检查(可选)vrrp_garp_interval 0  # 免费 ARP 发送间隔(0 表示按需发送)
}
  • 核心作用

    • 配置故障通知渠道(邮件、SNMP 等)。

    • 定义节点标识 router_id,用于日志记录和故障定位。

    • 控制 ARP 通告频率,避免网络拥塞。

1.2 进程与文件配置
global_defs {pid_file /var/run/keepalived.pid  # 进程 PID 文件路径state_file /var/lib/keepalived/keepalived_state  # 状态文件路径vrrp_iptables  # 自动管理 iptables 规则(推荐启用)
}
  • 最佳实践

    • 确保 pid_filestate_file 路径可写,避免权限问题导致服务启动失败。

    • 启用 vrrp_iptables 自动配置防火墙规则,允许 VRRP 通告(UDP 112 端口)和 VIP 流量。

2. VRRP 实例配置:多组冗余的核心
2.1 单实例基础配置模板
vrrp_instance VI_1 {state MASTER  # 节点初始状态(MASTER/BACKUP)interface eth0  # 绑定的物理网卡virtual_router_id 51  # VRRP 组 ID(0-255,同一组内需一致)priority 100  # 节点优先级(1-254,MASTER 需高于 BACKUP)advert_int 1  # 通告间隔(秒,建议 1-2 秒)authentication {auth_type PASS  # 认证类型(PASS/HA)auth_pass 123456  # 认证密码(同一组内需一致)}virtual_ipaddress {192.168.1.254/24 dev eth0  # VIP 地址及子网掩码192.168.1.255/24 dev eth0 secondary  # 辅助 VIP(可选)}
}
2.2 高级配置选项
  • 抢占模式控制
vrrp_instance VI_1 {preempt  # 启用抢占(默认开启,MASTER 恢复后自动夺回 VIP)preempt_delay 60  # 抢占延迟(秒,等待服务就绪后再切换)
}
  • 多网卡绑定
vrrp_instance VI_1 {interface bond0  # 绑定虚拟网卡(如 Bonding 或 VLAN 接口)virtual_ipaddress {10.0.0.254/24 dev bond0 label bond0:vip  # 为 VIP 指定接口标签}
}
  • 负载分担模式:通过多个 VRRP 组实现流量分担(如节点同时作为不同组的 MASTER 和 BACKUP):
# 组 1:主组,VIP 192.168.1.254
vrrp_instance VI_1 { ... priority 100 ... }# 组 2:备份组,VIP 192.168.1.253
vrrp_instance VI_2 { ... priority 90 ... }
3. 健康检查脚本:从端口到业务的多层防护
3.1 脚本触发机制
track_script {check_nginx  # 脚本名称
}vrrp_instance VI_1 {track_script {check_nginx  # 关联脚本}
}
  • 脚本要求

    • 返回值 0 表示健康,非 0 表示故障(如 12)。

    • 脚本需有执行权限:chmod +x /etc/keepalived/``check_nginx.sh

3.2 脚本示例:检测 Nginx 进程存活
#!/bin/bash
# /etc/keepalived/check_nginx.sh
nginx_pid=$(pidof nginx)
if [ -z "$nginx_pid" ]; then# 重启 Nginx(可选)systemctl restart nginx# 若重启失败,返回非 0[ -z "$(pidof nginx)" ] && exit 1
fi
exit 0
3.3 脚本参数传递

通过 weight 参数动态调整优先级:

track_script {check_db {script "/etc/keepalived/check_db.sh"interval 2  # 脚本执行间隔(秒)weight -30  # 脚本返回非 0 时,优先级降低 30(可能触发故障转移)}
}
3.4 复杂场景脚本:检测数据库复制延迟
#!/bin/bash
# 检测 MySQL 主从延迟(适用于备份节点)
DELAY=$(mysql -uroot -pPass -e "SHOW SLAVE STATUS;" | awk '/Seconds_Behind_Master/ {print $2}')
if [ "$DELAY" -gt 10 ]; thenecho "Replication delay too large: $DELAY seconds"exit 1
fi
exit 0
4. 日志与监控:故障排查与性能优化
4.1 日志配置
global_defs {log_file /var/log/keepalived.log  # 自定义日志文件路径log_level info  # 日志级别(debug/info/warning/error)
}
  • 日志分析关键点

    • VRRP_Instance(VI_1) Entering MASTER STATE:主节点状态变更。

    • VRRP_Instance(VI_1) Received advert with higher priority:检测到更高优先级节点。

    • TrackScript[check_nginx]: status=0:健康检查脚本执行结果。

4.2 监控指标采集
  • 内置指标
# 查看 VRRP 组状态
keepalived -S info | grep "VRRP Instance"# 查看 VIP 绑定情况
ip addr show dev eth0 | grep "inet 192.168.1.254"
  • SNMP 集成:通过 snmpd 服务暴露指标(需安装 keepalived-snmp 插件):
# 配置 snmpd.conf
master agentx
agentAddress udp:127.0.0.1:1610
  • Prometheus 监控:使用 keepalived_exporter 采集指标,配置示例:
scrape_configs:- job_name: 'keepalived'static_configs:- targets: ['localhost:9101']  # exporter 端口
5. 配置文件示例:完整高可用集群
# 全局定义
global_defs {router_id MASTER_NODEnotification_email { ops@example.com }smtp_server 10.0.0.2
}# VRRP 实例配置
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 50priority 100advert_int 1authentication {auth_type PASSauth_pass secure_password}virtual_ipaddress {192.168.1.254/24 dev eth0}track_script {check_application  # 自定义健康检查脚本}
}# 健康检查脚本
track_script {check_application {script "/etc/keepalived/check_app.sh"interval 3weight -20}
}

二、配置最佳实践与陷阱规避

1. 安全配置要点
  • 认证机制

    • 避免使用默认认证密码(如 123456),建议使用随机字符串。

    • 生产环境优先使用 HA 认证(基于 MD5 哈希):

authentication {auth_type HAauth_key $(openssl rand -hex 16)  # 生成 16 字节随机密钥
}
  • 防火墙规则
# 允许 VRRP 通告(UDP 112 端口)
iptables -A INPUT -p udp -m udp --dport 112 -j ACCEPT
# 允许 VIP 流量
iptables -A INPUT -d 192.168.1.254 -j ACCEPT
2. 多实例冲突解决
  • VRID 唯一性:不同 VRRP 组的 virtual_router_id 需唯一,避免广播风暴。

  • 网卡资源竞争:多个实例绑定同一网卡时,需确保 VIP 网段不重叠。

3. 动态优先级调整场景
  • 链路故障降级
vrrp_instance VI_1 {track_interface {eth0 weight -30  # 若 eth0 故障,优先级降为 70(假设原优先级 100)}
}
  • 业务负载感知:通过脚本根据 CPU / 内存使用率动态调整优先级,避免高负载节点成为 MASTER。

三、总结:配置的核心逻辑

Keepalived 的配置体系以 VRRP 实例为中心,通过全局参数定义基础行为,借助健康检查脚本实现智能故障转移,最终通过日志与监控保障可观测性。实际部署中需遵循以下原则:

  1. 最小化配置:仅定义必要的 VIP 和检查规则,避免冗余配置影响性能。

  2. 分层验证:先验证单节点配置(如 VIP 绑定、ARP 通告),再测试集群故障转移流程。

  3. 自动化测试:使用 stress 等工具模拟节点故障,验证切换时间和数据一致性。

通过合理配置,Keepalived 可在不引入复杂架构的前提下,为业务提供高性价比的高可用解决方案,尤其适合中小规模集群和传统数据中心场景。

http://www.xdnf.cn/news/567361.html

相关文章:

  • 回表是数据库概念,还是mysql的概念?
  • MyBatis 关联映射深度解析:_association_ 与 _collection_ 实战教程
  • k8s-ServiceAccount 配置
  • spring5-配外部文件-spEL-工厂bean-FactoryBean
  • 【疑难杂症】Mysql 无报错 修改配置文件后服务启动不起来 已解决|设置远程连接
  • Redis SETNX:分布式锁与原子性操作的核心
  • Docker run命令-p参数详解
  • Python打卡训练营day28-类的定义与方法
  • 2021-04-12 VSC++: 寻找N以内的亲密数对。(求因子和)
  • 【Node.js】Web开发框架
  • 牛客网NC15869:长方体边长和计算问题解析
  • Python中的常量和变量分别是怎么定义的?
  • 【QT】在界面A打开界面B时,界面A隐藏,界面B关闭时,界面A复现
  • chromedp -—— 基于 go 的自动化操作浏览器库
  • Redis 的 key 的过期策略是怎么实现的
  • Redis String 设计思想深度解析
  • 系统架构设计师案例分析题——数据库缓存篇
  • 解除diffusers库的prompt长度限制(SDXL版)
  • ArcGIS Pro 3.4 二次开发 - 核心主机
  • Linux yq 命令使用详解
  • 【Qt】QImage实战
  • 一文读懂迁移学习:从理论到实践
  • Git Clone 原理详解:为什么它比本地文件复制更快? -优雅草卓伊凡
  • word格式相关问题
  • C语言——函数递归与迭代
  • 微调后的模型保存与加载
  • Android13 wifi设置国家码详解
  • 结课作业01. 用户空间 MPU6050 体感鼠标驱动程序
  • SuperVINS:应对挑战性成像条件的实时视觉-惯性SLAM框架【全流程配置与测试!!!】【2025最新版!!!!】
  • flink 提交流程