Awesome Sysadmin运维平台高可用:keepalived配置
在服务器运维中,单节点故障可能导致服务中断,影响业务连续性。keepalived作为一款基于VRRP(虚拟路由冗余协议)的高可用解决方案,能够通过虚拟IP(VIP)漂移实现服务自动切换,确保关键业务7×24小时无间断运行。本文将从基础概念到实操配置,详解如何在Awesome Sysadmin项目环境中部署keepalived高可用集群。
为什么需要keepalived?
传统单机部署模式下,当服务器因硬件故障、网络中断或软件崩溃无法提供服务时,需要人工介入恢复,这期间业务将处于不可用状态。keepalived通过以下机制解决这一痛点:
- 故障自动检测:通过VRRP协议实时监控主备节点状态
- 无缝切换:主节点故障时,备节点自动接管虚拟IP和服务
- 轻量级实现:仅需简单配置即可实现高可用,无需复杂的集群管理软件
THE 0TH POSITION OF THE ORIGINAL IMAGE
项目中相关的高可用工具可参考Configuration Management章节,包含Ansible、Puppet等自动化部署工具。
环境准备与安装
服务器规划
| 节点角色 | IP地址 | 操作系统 | 硬件配置 |
|---|---|---|---|
| 主节点 | 192.168.1.10 | Ubuntu 22.04 | 2核4G |
| 备节点 | 192.168.1.11 | Ubuntu 22.04 | 2核4G |
| 虚拟IP | 192.168.1.100 | - | - |
安装keepalived
在主备节点分别执行以下命令安装keepalived:
sudo apt update && sudo apt install -y keepalived
更多系统的安装方法可参考Awesome Sysadmin项目文档中的"Package Management"部分。
核心配置详解
keepalived的主配置文件位于/etc/keepalived/keepalived.conf,采用VRRP实例配置+全局参数的结构。
主节点配置
! Configuration File for keepalived
global_defs {
router_id LVS_DEVEL # 路由标识,同一集群保持一致
}
vrrp_instance VI_1 {
state MASTER # 节点角色:MASTER/BACKUP
interface eth0 # 绑定虚拟IP的网卡
virtual_router_id 51 # 虚拟路由ID,主备节点必须相同
priority 100 # 优先级,主节点高于备节点(建议差50以上)
advert_int 1 # 心跳检测间隔(秒)
authentication {
auth_type PASS # 认证方式
auth_pass 1111 # 认证密码,主备节点必须相同
}
virtual_ipaddress {
192.168.1.100/24 # 虚拟IP地址
}
# 当节点转为MASTER时执行的脚本
notify_master "/etc/keepalived/notify.sh master"
# 当节点转为BACKUP时执行的脚本
notify_backup "/etc/keepalived/notify.sh backup"
# 当节点故障时执行的脚本
notify_fault "/etc/keepalived/notify.sh fault"
}
备节点配置
备节点配置与主节点基本一致,只需修改state和priority参数:
vrrp_instance VI_1 {
state BACKUP
priority 50
# 其他参数与主节点保持一致
}
状态通知脚本
创建状态切换通知脚本/etc/keepalived/notify.sh,用于记录状态变化或执行服务启停操作:
#!/bin/bash
# 状态通知脚本 [notify.sh](https://link.gitcode.com/i/d59c1cd0f4d724aadb2e757cf02ce208)
LOG_FILE="/var/log/keepalived-notify.log"
DATE=$(date "+%Y-%m-%d %H:%M:%S")
case "$1" in
master)
echo "[$DATE] 切换为MASTER节点" >> $LOG_FILE
# 启动服务命令示例: systemctl start nginx
;;
backup)
echo "[$DATE] 切换为BACKUP节点" >> $LOG_FILE
# 停止服务命令示例: systemctl stop nginx
;;
fault)
echo "[$DATE] 节点故障" >> $LOG_FILE
;;
*)
echo "[$DATE] 未知状态: $1" >> $LOG_FILE
exit 1
;;
esac
赋予脚本执行权限:
sudo chmod +x /etc/keepalived/notify.sh
服务管理与验证
启动keepalived服务
# 启动服务
sudo systemctl start keepalived
# 设置开机自启
sudo systemctl enable keepalived
# 查看状态
sudo systemctl status keepalived
验证高可用功能
-
查看虚拟IP绑定情况:
ip addr show eth0 | grep 192.168.1.100正常情况下,虚拟IP应绑定在主节点的网卡上。
-
模拟主节点故障:
# 停止主节点keepalived服务 sudo systemctl stop keepalived -
验证备节点接管情况: 在备节点执行
ip addr命令,确认虚拟IP是否已自动漂移过来。同时查看日志文件验证状态切换:tail -f /var/log/keepalived-notify.log
常见问题解决
虚拟IP无法漂移
-
检查防火墙配置:确保VRRP协议(组播地址224.0.0.18)允许通过
sudo ufw allow proto vrrp from any to any -
验证配置文件:检查主备节点的
virtual_router_id和auth_pass是否一致 -
查看系统日志:
sudo journalctl -u keepalived -f
服务切换不及时
- 调整
advert_int参数减小心跳间隔(建议1-3秒) - 增加主备节点优先级差值(建议至少50)
- 优化健康检查脚本执行时间
最佳实践与进阶配置
结合Nginx实现Web服务高可用
通过keepalived+Nginx组合,可以实现Web服务的高可用架构。配置示例:
# 在keepalived.conf中添加健康检查脚本
vrrp_script chk_nginx {
script "/usr/bin/killall -0 nginx" # 检查nginx进程是否存在
interval 2 # 检查间隔(秒)
weight -20 # 检查失败时优先级减少值
}
vrrp_instance VI_1 {
# ... 其他配置 ...
track_script {
chk_nginx # 启用健康检查
}
}
多实例配置
keepalived支持配置多个VRRP实例,实现多组服务的独立高可用:
vrrp_instance VI_1 {
# 实例1配置,虚拟IP 192.168.1.100
}
vrrp_instance VI_2 {
# 实例2配置,虚拟IP 192.168.1.101
}
更多高级配置可参考keepalived官方文档
总结
通过本文的配置指南,您已掌握在Awesome Sysadmin环境中部署keepalived高可用集群的核心步骤。高可用架构是企业级运维的基础保障,结合项目中的监控工具和自动化部署工具,可以构建更完善的运维体系。
建议定期测试故障切换功能,并将配置文件纳入版本控制管理,可使用项目中的git-branch-cleanup.sh脚本维护配置版本。
项目中相关的自动化脚本和工具可在tmp_repo/目录下找到,包含各类系统管理实用程序。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



