wip v1.0.0
This commit is contained in:
419
USAGE.md
Normal file
419
USAGE.md
Normal file
@@ -0,0 +1,419 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user