1. 云原生环境下Keepalived的实验设计与实现
最近在帮客户设计云原生高可用方案时,发现很多团队对传统高可用工具在云环境下的适配存在认知偏差。今天我就以Keepalived为例,分享在云原生环境中的实验配置方法和注意事项。这个方案特别适合需要在Kubernetes集群外维护关键服务高可用的场景,比如数据库、消息队列等有状态服务。
2. 实验环境规划
2.1 基础架构设计
实验采用三节点架构:
- 2个Keepalived节点(主备各1)
- 1个监控节点(用于健康检查)
- 共享的VIP(Virtual IP): 192.168.1.100
节点配置建议:
- 操作系统:Ubuntu 20.04 LTS
- 内核版本:5.4+
- Keepalived版本:2.2.4+
注意:云环境需要特别注意VIP的分配方式,部分云平台需要额外配置才能支持ARP广播
2.2 网络拓扑说明
[Master Node] ----\ [VIP:192.168.1.100] [Backup Node]----/3. Keepalived核心配置解析
3.1 主配置文件(/etc/keepalived/keepalived.conf)
global_defs { router_id LVS_DEVEL } vrrp_script chk_nginx { script "/usr/bin/killall -0 nginx" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 virtual_ipaddress { 192.168.1.100/24 } track_script { chk_nginx } }关键参数说明:
virtual_router_id:必须相同才能组成VRRP组priority:主节点建议100,备节点建议90advert_int:心跳间隔,生产环境建议1-3秒
3.2 健康检查配置
云原生环境下推荐使用HTTP接口检查:
vrrp_script chk_service { script "curl -s --connect-timeout 2 http://localhost:8080/healthz | grep -q 'ok'" interval 2 fall 2 rise 2 timeout 2 }4. 云原生特殊适配
4.1 容器化部署方案
Docker部署示例:
FROM ubuntu:20.04 RUN apt-get update && apt-get install -y keepalived COPY keepalived.conf /etc/keepalived/ CMD ["keepalived", "--dont-fork", "--log-console"]需要特别注意的容器权限:
NET_ADMIN能力NET_BROADCAST能力/proc文件系统挂载
4.2 Kubernetes集成方案
使用DaemonSet部署:
apiVersion: apps/v1 kind: DaemonSet metadata: name: keepalived spec: selector: matchLabels: app: keepalived template: metadata: labels: app: keepalived spec: hostNetwork: true containers: - name: keepalived image: keepalived:2.2.4 securityContext: capabilities: add: ["NET_ADMIN", "NET_BROADCAST"] volumeMounts: - name: config mountPath: /etc/keepalived volumes: - name: config configMap: name: keepalived-config5. 故障排查与优化
5.1 常见问题排查表
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| VIP不切换 | 防火墙阻止VRRP协议 | 开放112端口(VRRP协议) |
| 脑裂问题 | 网络分区 | 配置多播检测或第三方仲裁 |
| 频繁切换 | 健康检查不稳定 | 调整检查间隔和阈值 |
5.2 性能优化建议
- 调整内核参数:
echo "net.ipv4.ip_nonlocal_bind=1" >> /etc/sysctl.conf sysctl -p- 日志优化:
local0.* /var/log/keepalived.log- 资源限制:
limit_memory 100M limit_cpu 50%6. 监控与告警集成
6.1 Prometheus监控配置
scrape_configs: - job_name: 'keepalived' static_configs: - targets: ['keepalived-node1:9125']配合keepalived-exporter使用:
docker run -d -p 9125:9125 \ -v /var/run/keepalived:/var/run/keepalived \ lancew/keepalived-exporter6.2 Grafana看板指标
关键监控指标:
- vrrp_state(0=init,1=backup,2=master)
- vrrp_priority
- check_script_status
7. 生产环境注意事项
网络隔离:VRRP协议需要使用多播(224.0.0.18),确保网络设备允许通过
安全加固:
- 使用VRRP认证
- 限制VRRP通信源IP
- 定期轮换认证密钥
- 版本选择:
- 生产环境建议使用长期支持版本
- 注意CVE-2021-44228等安全漏洞
- 云平台特殊限制:
- AWS需要配置VPC多播
- 阿里云需要申请高可用虚拟IP
- GCP需要配置实例组
在实际部署中,我发现很多团队容易忽视云平台对VRRP协议的特殊限制。比如在某次AWS部署中,由于没有启用VPC多播功能,导致主备节点无法正常通信。建议在云环境部署前,务必查阅对应云平台的VRRP支持文档。