wip v1.0.0

This commit is contained in:
loveuer
2025-12-08 22:23:45 +08:00
commit bece440c47
35 changed files with 4893 additions and 0 deletions

269
deployment/COMPATIBILITY.md Normal file
View File

@@ -0,0 +1,269 @@
# VRRP 环境兼容性说明
## 支持的环境
### ✅ 完全支持
- **物理服务器**: 完全支持所有功能
- **本地虚拟机(网络配置正确)**:
- KVM/QEMU: 完全支持
- Proxmox VE: 完全支持
- VMware ESXi: 需要启用混杂模式
- VirtualBox: 需要桥接网络 + 混杂模式
- Hyper-V: 需要外部网络交换机
### ⚠️ 部分支持
- **某些私有云环境**: 取决于网络配置
- **Docker 容器**: 需要 `--privileged``--net=host` 模式
- **Kubernetes**: 需要 hostNetwork 模式
### ❌ 不支持
- **AWS EC2**: 不支持组播,无法运行 VRRP
- **阿里云 ECS**: 不支持组播,无法运行 VRRP
- **Azure VM**: 默认不支持,需要特殊配置
- **Google Cloud**: 默认不支持组播
- **大多数公有云**: 网络虚拟化层面禁用了组播
## 为什么云环境不支持 VRRP
1. **组播协议限制**: VRRP 使用 IP 组播地址 224.0.0.18,云环境网络虚拟化层通常过滤组播流量
2. **安全考虑**: 云厂商不希望用户自行管理 IP 漂移,避免 IP 冲突
3. **网络架构**: SDN (软件定义网络) 架构不支持传统的 MAC 地址漂移
## 云环境替代方案
### AWS
```yaml
方案1: Elastic IP (EIP)
- 使用 AWS API 动态绑定/解绑 EIP
- 结合健康检查脚本实现故障切换
方案2: Application Load Balancer (ALB)
- 7层负载均衡
- 自动健康检查和故障切换
方案3: Network Load Balancer (NLB)
- 4层负载均衡
- 支持静态 IP
```
### 阿里云
```yaml
方案1: 高可用虚拟IP (HaVip)
- 阿里云提供的 VRRP 替代方案
- 支持主备切换
方案2: 负载均衡 SLB
- 4层/7层负载均衡
- 自动健康检查
```
### Azure
```yaml
方案1: Azure Load Balancer
- 标准负载均衡器
- 支持高可用性
方案2: Azure Traffic Manager
- DNS 级别的流量管理
- 支持多区域故障切换
```
## 虚拟化环境配置指南
### VMware ESXi
1. 选择虚拟机
2. 编辑设置 → 网络适配器
3. 展开 "高级选项"
4. 混杂模式: **允许**
5. MAC 地址更改: **允许**
6. 伪传输: **允许**
### VirtualBox
1. 虚拟机设置 → 网络
2. 连接方式: **桥接网卡**
3. 高级 → 混杂模式: **全部允许**
4. 高级 → 接入网线: **勾选**
### KVM/libvirt
```xml
<interface type='bridge'>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
```
### Proxmox VE
默认配置即可支持,使用 vmbr0 桥接网络。
## 检测脚本使用
运行环境检测脚本:
```bash
# 下载并运行检测脚本
sudo ./deployment/check-env.sh
```
脚本会自动检测:
1. ✓ 运行权限root
2. ✓ 操作系统兼容性
3. ✓ 网络接口状态
4. ✓ VIP 添加能力
5. ✓ VRRP 协议支持
6. ✓ 防火墙配置
7. ✓ 内核参数
8. ✓ 服务冲突检测
9. ✓ 组播支持
10. ✓ 虚拟化环境
11. ✓ 云环境限制
## 常见问题排查
### 1. VIP 无法添加
**症状**: `ip addr add` 命令失败
**可能原因**:
- 权限不足(需要 root
- IP 地址冲突
- 网络接口不存在或未启动
- 子网掩码错误
**解决方法**:
```bash
# 检查网卡状态
ip link show eth0
# 检查 IP 冲突
arping -I eth0 192.168.1.100
# 手动测试添加
sudo ip addr add 192.168.1.100/24 dev eth0
```
### 2. VIP 添加成功但无法 Ping 通
**可能原因**:
- 防火墙阻止 ICMP
- 路由配置错误
- ARP 表未更新
- 网络隔离VLAN
**解决方法**:
```bash
# 发送免费 ARP
arping -c 3 -A -I eth0 192.168.1.100
# 检查路由
ip route show
# 检查防火墙
iptables -L -n | grep ICMP
```
### 3. VRRP 报文无法发送/接收
**症状**: 双节点无法选举 Master
**可能原因**:
- 组播被过滤
- 防火墙阻止协议 112
- 网络交换机禁用组播
- 虚拟机混杂模式未启用
**解决方法**:
```bash
# 抓包验证 VRRP 报文
sudo tcpdump -i eth0 proto 112 -v
# 检查组播路由
ip maddr show eth0
# 添加防火墙规则
sudo iptables -A INPUT -p 112 -j ACCEPT
sudo iptables -A OUTPUT -p 112 -j ACCEPT
```
### 4. 云环境 VRRP 不工作
**确认方法**:
```bash
# 运行检测脚本
sudo ./deployment/check-env.sh
# 手动检查云环境
curl -s -m 1 http://169.254.169.254/latest/meta-data/instance-id
```
**解决方案**: 使用云厂商提供的高可用方案(见上方"云环境替代方案"
## 网络环境要求
### 必需条件
- [x] 二层网络连通(同一 VLAN/子网)
- [x] 支持组播224.0.0.18
- [x] 允许 ARP 广播
- [x] 网卡支持混杂模式(虚拟机环境)
### 推荐配置
- [x] 千兆以上网络
- [x] 低延迟网络(< 10ms
- [x] 禁用 STP 或配置 PortFast交换机
- [x] 专用 VLAN生产环境
## 测试步骤
### 1. 基础网络测试
```bash
# 测试网卡连通性
ping -c 3 <对端IP>
# 测试组播连通性(需要两台机器)
# 机器 A
iperf3 -s -B 224.0.0.18
# 机器 B
iperf3 -c 224.0.0.18 -u -b 1M
```
### 2. 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
# 从其他机器 ping VIP
ping 192.168.1.100
# 删除 VIP
sudo ip addr del 192.168.1.100/24 dev eth0
```
### 3. VRRP 功能测试
```bash
# 使用最小配置启动
sudo ./go-alived --config config.mini.yaml --debug
# 另一个终端监控网卡
watch -n 1 "ip addr show eth0 | grep inet"
# 抓包验证
sudo tcpdump -i eth0 proto 112 -v
```
## 生产环境部署建议
1. **使用专用网络**: VRRP 流量与业务流量隔离
2. **配置监控**: 监控 VIP 状态VRRP 状态变化
3. **测试故障切换**: 定期测试主备切换是否正常
4. **文档记录**: 记录网络拓扑IP 分配故障处理流程
5. **备份配置**: 定期备份 go-alived 配置文件
## 参考文档
- [VRRP RFC 3768](https://tools.ietf.org/html/rfc3768)
- [Linux IP 命令手册](https://man7.org/linux/man-pages/man8/ip.8.html)
- [iptables VRRP 配置](https://www.netfilter.org/)