8.3 KiB
8.3 KiB
go-alived 使用文档
命令概览
go-alived # 运行 VRRP 服务(默认命令)
go-alived run # 运行 VRRP 服务
go-alived test # 测试环境是否支持 VRRP
go-alived --help # 显示帮助信息
go-alived --version # 显示版本信息
1. 环境测试 (test)
在部署 go-alived 之前,建议先运行环境检测:
# 基本检测(自动选择网卡)
sudo ./go-alived test
# 指定网卡进行检测
sudo ./go-alived test -i eth0
sudo ./go-alived test --interface eth0
# 指定网卡和测试 VIP
sudo ./go-alived test -i eth0 -v 192.168.1.100/24
sudo ./go-alived test --interface eth0 --vip 192.168.1.100/24
检测项目:
- ✓ Root 权限检查
- ✓ 网络接口状态
- ✓ VIP 添加/删除功能
- ✓ 组播支持
- ✓ 防火墙配置
- ✓ 内核参数
- ✓ 服务冲突检测
- ✓ 虚拟化环境识别
- ✓ 云环境限制检测
示例输出:
=== go-alived 环境测试 ===
检查运行权限...
检查网络接口...
自动选择网卡: eth0
测试VIP添加/删除功能...
检查组播支持...
检查防火墙设置...
检查内核参数...
检查冲突服务...
检查虚拟化环境...
检查云环境...
=== 测试结果 ===
✓ Root权限 以root用户运行
✓ 网络接口 网卡 eth0 存在且已启动
✓ VIP添加 成功添加VIP 192.168.1.100/32
✓ VIP验证 VIP已成功添加到网卡
✓ VIP可达性 VIP可以ping通
✓ VIP删除 VIP删除成功
✓ 组播支持 网卡支持组播
⚠ 防火墙VRRP 防火墙未配置VRRP规则,建议添加: iptables -A INPUT -p 112 -j ACCEPT
✓ ip_forward ip_forward = 1 (正常)
✓ 服务冲突 未发现冲突的服务
✓ 虚拟化 KVM/QEMU虚拟机(通常支持良好)
✓ 云环境 未检测到公有云环境限制
=== 总结 ===
⚠ 环境基本支持,但有 1 个警告
建议修复警告项以获得更好的稳定性
2. 运行服务 (run)
# 使用默认配置文件运行
sudo ./go-alived
# 或显式使用 run 命令
sudo ./go-alived run
# 指定配置文件
sudo ./go-alived run -c /etc/go-alived/config.yaml
sudo ./go-alived run --config config.yaml
# 启用调试模式
sudo ./go-alived run -c config.yaml -d
sudo ./go-alived run --config config.yaml --debug
# 简写形式(使用全局参数)
sudo ./go-alived -c config.yaml -d
3. 信号控制
# 重载配置(发送 SIGHUP)
sudo kill -HUP $(pgrep go-alived)
# 或使用 systemctl(如果安装为服务)
sudo systemctl reload go-alived
# 优雅停止
sudo kill -TERM $(pgrep go-alived)
# 或
sudo systemctl stop go-alived
命令行参数
全局参数(适用于所有命令)
-c, --config string 配置文件路径(默认: /etc/go-alived/config.yaml)
-d, --debug 启用调试日志
-h, --help 显示帮助信息
-v, --version 显示版本信息
run 命令参数
-c, --config string 配置文件路径(默认: /etc/go-alived/config.yaml)
-d, --debug 启用调试日志
test 命令参数
-i, --interface string 指定测试网卡名称(如 eth0)
-v, --vip string 指定测试 VIP(如 192.168.1.100/24)
配置文件
最小配置示例
# config.mini.yaml - 仅 VRRP 功能
global:
router_id: "node1"
vrrp_instances:
- name: "VI_1"
interface: "eth0"
state: "BACKUP"
virtual_router_id: 51
priority: 100
advert_interval: 1
auth_type: "PASS"
auth_pass: "secret123"
virtual_ips:
- "192.168.1.100/24"
完整配置示例
# config.example.yaml - 包含健康检查
global:
router_id: "node1"
notification_email: "admin@example.com"
vrrp_instances:
- name: "VI_1"
interface: "eth0"
state: "BACKUP"
virtual_router_id: 51
priority: 100
advert_interval: 1
auth_type: "PASS"
auth_pass: "secret123"
virtual_ips:
- "192.168.1.100/24"
- "192.168.1.101/24"
track_scripts:
- "check_nginx"
health_checkers:
- name: "check_nginx"
type: "tcp"
interval: 3s
timeout: 2s
rise: 3
fall: 2
config:
host: "127.0.0.1"
port: 80
部署方式
方式 1: 直接运行
# 编译
go build -o go-alived .
# 运行测试
sudo ./go-alived test --test-interface eth0
# 启动服务
sudo ./go-alived --config config.yaml --debug
方式 2: Systemd 服务
# 使用安装脚本
sudo ./deployment/install.sh
# 编辑配置
sudo vim /etc/go-alived/config.yaml
# 启动服务
sudo systemctl start go-alived
# 查看状态
sudo systemctl status go-alived
# 查看日志
sudo journalctl -u go-alived -f
# 设置开机自启
sudo systemctl enable go-alived
常见使用场景
场景 1: Web 服务高可用
配置示例:
vrrp_instances:
- name: "WEB_HA"
interface: "eth0"
virtual_router_id: 51
priority: 100 # 主节点
virtual_ips:
- "192.168.1.100/24"
track_scripts:
- "check_nginx"
health_checkers:
- name: "check_nginx"
type: "http"
interval: 3s
timeout: 2s
rise: 3
fall: 2
config:
url: "http://127.0.0.1/health"
expected_status: 200
工作原理:
- Nginx 正常时,主节点(priority=100)持有 VIP
- Nginx 故障时,健康检查失败,主节点优先级降低(100-10=90)
- 备节点(priority=90)优先级更高,接管 VIP
- Nginx 恢复后,主节点优先级恢复,重新接管 VIP
场景 2: 数据库主备
主节点配置:
vrrp_instances:
- name: "DB_MASTER"
interface: "eth0"
priority: 100
virtual_ips:
- "192.168.1.200/24"
track_scripts:
- "check_mysql"
health_checkers:
- name: "check_mysql"
type: "tcp"
interval: 5s
config:
host: "127.0.0.1"
port: 3306
备节点配置:
vrrp_instances:
- name: "DB_MASTER"
interface: "eth0"
priority: 90 # 优先级较低
virtual_ips:
- "192.168.1.200/24"
track_scripts:
- "check_mysql"
场景 3: 多 VIP 负载均衡
vrrp_instances:
- name: "VI_WEB"
virtual_router_id: 51
priority: 100
virtual_ips:
- "192.168.1.100/24"
- name: "VI_API"
virtual_router_id: 52
priority: 90
virtual_ips:
- "192.168.1.101/24"
故障排查
查看日志
# Systemd 日志
sudo journalctl -u go-alived -f
# 查看最近 100 行
sudo journalctl -u go-alived -n 100
# 查看某个时间段
sudo journalctl -u go-alived --since "1 hour ago"
抓包调试
# 抓取 VRRP 报文
sudo tcpdump -i eth0 proto 112 -v
# 抓取指定 VIP 的流量
sudo tcpdump -i eth0 host 192.168.1.100
# 抓取组播报文
sudo tcpdump -i eth0 dst 224.0.0.18
手动测试 VIP
# 添加 VIP
sudo ip addr add 192.168.1.100/24 dev eth0
# 发送免费 ARP
sudo arping -c 3 -A -I eth0 192.168.1.100
# 验证
ip addr show eth0 | grep 192.168.1.100
# 删除 VIP
sudo ip addr del 192.168.1.100/24 dev eth0
检查网卡状态
# 查看网卡
ip link show
# 查看 IP 地址
ip addr show eth0
# 查看路由
ip route show
# 查看组播组
ip maddr show eth0
性能优化
1. 减少 Advertisement 间隔
advert_interval: 1 # 默认 1 秒,可以更快切换
2. 调整健康检查频率
health_checkers:
- interval: 2s # 更频繁的检查
timeout: 1s # 更短的超时
rise: 2 # 更快恢复
fall: 2 # 更快检测故障
3. 内核参数优化
# 允许非本地 IP 绑定
echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind
# ARP 优化
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
安全建议
- 使用强密码:
auth_pass使用复杂密码 - 网络隔离: 将 VRRP 流量放在独立 VLAN
- 限制访问: 使用防火墙限制 VRRP 报文来源
- 日志审计: 定期检查状态变化日志
- 配置备份: 定期备份配置文件