Files
go-alived/USAGE.md
2025-12-08 22:23:45 +08:00

8.3 KiB
Raw Permalink Blame History

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

工作原理

  1. Nginx 正常时主节点priority=100持有 VIP
  2. Nginx 故障时健康检查失败主节点优先级降低100-10=90
  3. 备节点priority=90优先级更高接管 VIP
  4. 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

安全建议

  1. 使用强密码: auth_pass 使用复杂密码
  2. 网络隔离: 将 VRRP 流量放在独立 VLAN
  3. 限制访问: 使用防火墙限制 VRRP 报文来源
  4. 日志审计: 定期检查状态变化日志
  5. 配置备份: 定期备份配置文件

更多资源