4.2 KiB
4.2 KiB
go-alived Roadmap
项目目标
使用 Golang 实现 keepalived 的核心功能,无外部依赖,单二进制部署。
Keepalived 核心功能
1. VRRP (Virtual Router Redundancy Protocol) 协议
- 虚拟 IP 管理: 管理可在多个节点间浮动的虚拟 IP 地址 (VIP)
- 状态机管理: MASTER、BACKUP、FAULT 三种状态的转换
- 优先级选举: 基于优先级 (1-255) 选举 MASTER 节点
- Gratuitous ARP: 状态变化时发送 ARP 报文更新网络设备
- 同步组: 将多个 VRRP 实例组合,作为整体进行状态转换
- 虚拟 MAC 支持: 支持使用虚拟 MAC 地址 (macvlan)
2. 健康检查 (Health Checking)
- HTTP/HTTPS 检查: 通过 GET 请求验证 Web 服务状态
- TCP 检查: 基本的 TCP 连接测试
- SMTP 检查: 邮件服务监控
- DNS 检查: 基于查询的 DNS 验证
- 脚本检查: 自定义脚本实现灵活监控
- UDP/PING 检查: 网络连通性测试
- 动态权重: 根据健康检查结果动态调整权重
3. 负载均衡 (LVS 集成)
- 调度算法: 支持 rr、wrr、lc、wlc、sh 等多种调度算法
- 转发模式: NAT、Direct Routing (DR)、IP Tunneling (TUN)
- 后端服务器管理: 根据健康状态动态添加/移除后端服务器
- Quorum 支持: 配置最小存活服务器数量
- Sorry Server: 当健康节点不足时的备用服务器
- 会话保持: 支持会话持久化
4. 辅助功能
- 状态变化脚本: 在状态转换时执行自定义脚本
- 邮件通知: SMTP 告警支持
- 进程监控: 监控外部进程并调整优先级
- 配置热加载: 支持配置文件重载
实现计划
Phase 0: 项目基础设施 ✅
- 项目结构搭建
- CLI 参数解析 (--config, --debug)
- YAML 配置文件加载和验证
- 日志系统
- 信号处理 (SIGHUP 重载配置)
Phase 1: 核心 VRRP 功能 (第一优先级)
1.1 网络接口和 IP 管理
- 网络接口检测和验证
- VIP 添加/删除功能 (使用 netlink)
- IP 地址冲突检测
- VIP 状态查询
1.2 VRRP 协议栈
- VRRP 报文结构定义 (RFC 3768/5798)
- 原始 socket 收发 VRRP 报文
- Advertisement 报文发送
- Advertisement 报文接收和解析
- 认证支持 (PASS 类型)
1.3 状态机实现
- 状态定义 (INIT/BACKUP/MASTER/FAULT)
- 状态转换逻辑
- Master 选举算法
- 定时器管理 (Advertisement Timer, Master Down Timer)
- 优先级抢占模式
1.4 ARP 和网络更新
- Gratuitous ARP 发送
- ARP 应答处理
- 多 VIP 的 ARP 广播
1.5 集成和测试
- VRRP 实例管理器
- 多实例支持
- 基础功能测试
- 双机 VRRP 切换测试
Phase 2: 健康检查系统 (第二优先级)
2.1 健康检查框架
- 健康检查器接口定义
- 检查结果状态管理 (rise/fall 计数)
- 定时调度器
- 超时控制
2.2 检查器实现
- TCP 健康检查
- HTTP/HTTPS 健康检查
- ICMP Ping 检查
- 脚本检查 (执行外部命令)
- DNS 检查
2.3 与 VRRP 联动
- Track Script 支持
- 健康检查失败时降低优先级
- 检查恢复时恢复优先级
- 健康检查状态影响 VRRP 状态机
Phase 3: 增强功能 (第三优先级)
3.1 通知和脚本
- 状态变化时执行脚本 (notify_master/backup/fault)
- 脚本执行器 (权限控制、超时控制)
- 邮件通知支持 (SMTP)
- Webhook 通知
3.2 高级特性
- 同步组 (Sync Group) 支持
- 虚拟 MAC 地址支持
- 配置热加载优化
- 进程监控和自动重启
3.3 可观测性
- 状态查询 API/CLI
- Metrics 导出 (Prometheus 格式)
- 详细的事件日志
- 调试模式增强
Phase 4: 负载均衡 (可选,低优先级)
- LVS 集成调研
- IPVS 操作封装
- 基础调度算法 (rr, wrr)
- 后端服务器健康检查
- 动态后端管理
当前进度
- ✅ Phase 0 已完成
- 🔄 下一步:Phase 1.1 网络接口和 IP 管理
技术选型
- 语言: Go 1.21+
- 配置格式: YAML/TOML (兼容 keepalived.conf 风格)
- 依赖: 尽量使用标准库,最小化第三方依赖