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

419 lines
8.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# go-alived 使用文档
## 命令概览
```bash
go-alived # 运行 VRRP 服务(默认命令)
go-alived run # 运行 VRRP 服务
go-alived test # 测试环境是否支持 VRRP
go-alived --help # 显示帮助信息
go-alived --version # 显示版本信息
```
## 1. 环境测试 (test)
在部署 go-alived 之前,建议先运行环境检测:
```bash
# 基本检测(自动选择网卡)
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)
```bash
# 使用默认配置文件运行
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. 信号控制
```bash
# 重载配置(发送 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
```
## 配置文件
### 最小配置示例
```yaml
# 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"
```
### 完整配置示例
```yaml
# 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: 直接运行
```bash
# 编译
go build -o go-alived .
# 运行测试
sudo ./go-alived test --test-interface eth0
# 启动服务
sudo ./go-alived --config config.yaml --debug
```
### 方式 2: Systemd 服务
```bash
# 使用安装脚本
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 服务高可用
**配置示例**
```yaml
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: 数据库主备
**主节点配置**
```yaml
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
```
**备节点配置**
```yaml
vrrp_instances:
- name: "DB_MASTER"
interface: "eth0"
priority: 90 # 优先级较低
virtual_ips:
- "192.168.1.200/24"
track_scripts:
- "check_mysql"
```
### 场景 3: 多 VIP 负载均衡
```yaml
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"
```
## 故障排查
### 查看日志
```bash
# Systemd 日志
sudo journalctl -u go-alived -f
# 查看最近 100 行
sudo journalctl -u go-alived -n 100
# 查看某个时间段
sudo journalctl -u go-alived --since "1 hour ago"
```
### 抓包调试
```bash
# 抓取 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
```bash
# 添加 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
```
### 检查网卡状态
```bash
# 查看网卡
ip link show
# 查看 IP 地址
ip addr show eth0
# 查看路由
ip route show
# 查看组播组
ip maddr show eth0
```
## 性能优化
### 1. 减少 Advertisement 间隔
```yaml
advert_interval: 1 # 默认 1 秒,可以更快切换
```
### 2. 调整健康检查频率
```yaml
health_checkers:
- interval: 2s # 更频繁的检查
timeout: 1s # 更短的超时
rise: 2 # 更快恢复
fall: 2 # 更快检测故障
```
### 3. 内核参数优化
```bash
# 允许非本地 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. **配置备份**: 定期备份配置文件
## 更多资源
- [GitHub 仓库](https://github.com/loveuer/go-alived)
- [部署文档](deployment/README.md)
- [兼容性说明](deployment/COMPATIBILITY.md)
- [测试指南](TESTING.md)