4.0 KiB
4.0 KiB
Consul 集群架构设计
当前架构
Consul Servers (3个)
- master (100.117.106.136) - 韩国,当前 Leader
- warden (100.122.197.112) - 北京,Voter
- ash3c (100.116.80.94) - 美国,Voter
Consul Clients (1个+)
- hcp1 (100.97.62.111) - 北京,系统级 Client
架构优势
✅ 当前设计的优点:
- 高可用 - 3个 Server 可容忍 1个故障
- 地理分布 - 跨三个地区,容灾能力强
- 性能优化 - 每个地区有本地 Server
- 扩展性 - Client 可按需添加
✅ 为什么 hcp1 作为 Client 是正确的:
- 服务就近注册 - Traefik 运行在 hcp1,本地 Client 效率最高
- 减少网络延迟 - 避免跨网络的服务注册
- 健康检查优化 - 本地 Client 可以更准确地检查服务状态
- 故障隔离 - hcp1 Client 故障不影响集群共识
扩展建议
🎯 理想的 Client 部署:
每个运行业务服务的节点都应该有 Consul Client:
┌─────────────┬─────────────┬─────────────┐
│ Server │ Client │ 业务服务 │
├─────────────┼─────────────┼─────────────┤
│ master │ ✓ (内置) │ Consul │
│ warden │ ✓ (内置) │ Consul │
│ ash3c │ ✓ (内置) │ Consul │
│ hcp1 │ ✓ (独立) │ Traefik │
│ 其他节点... │ 建议添加 │ 其他服务... │
└─────────────┴─────────────┴─────────────┘
🔧 Client 配置标准:
# hcp1 的 Consul Client 配置 (/etc/consul.d/consul.hcl)
datacenter = "dc1"
data_dir = "/opt/consul"
log_level = "INFO"
node_name = "hcp1"
bind_addr = "100.97.62.111"
# 连接到所有 Server
retry_join = [
"100.117.106.136", # master
"100.122.197.112", # warden
"100.116.80.94" # ash3c
]
# Client 模式
server = false
ui_config {
enabled = false # Client 不需要 UI
}
# 服务发现和健康检查
ports {
grpc = 8502
http = 8500
}
connect {
enabled = true
}
服务注册策略
🎯 推荐方案:
-
Nomad 自动注册 (首选)
- 通过 Nomad 的
consul配置 - 自动处理服务生命周期
- 与部署流程集成
- 通过 Nomad 的
-
本地 Client 注册 (当前方案)
- 通过本地 Consul Client
- 手动管理,但更灵活
- 适合复杂的注册逻辑
-
Catalog API 注册 (应急方案)
- 直接通过 Consul API
- 绕过同步问题
- 用于故障恢复
🔄 迁移到 Nomad 注册:
# 在 Nomad Client 配置中
consul {
address = "127.0.0.1:8500" # 本地 Consul Client
server_service_name = "nomad"
client_service_name = "nomad-client"
auto_advertise = true
server_auto_join = false
client_auto_join = true
}
监控和维护
📊 关键指标:
- Raft Index 同步 - 确保所有 Server 数据一致
- Client 连接状态 - 监控 Client 与 Server 的连接
- 服务注册延迟 - 跟踪注册到可发现的时间
- 健康检查状态 - 监控服务健康状态
🛠️ 维护脚本:
# 集群健康检查
./scripts/consul-cluster-health.sh
# 服务同步验证
./scripts/verify-service-sync.sh
# 故障恢复
./scripts/consul-recovery.sh
故障处理
🚨 常见问题:
- Server 故障 - 自动 failover,无需干预
- Client 断连 - 重启 Client,自动重连
- 服务同步问题 - 使用 Catalog API 强制同步
- 网络分区 - Raft 算法自动处理
🔧 恢复步骤:
- 检查集群状态
- 验证网络连通性
- 重启有问题的组件
- 强制重新注册服务
结论: 当前架构设计合理,hcp1 作为 Client 是正确的选择。建议保持现有架构,并考虑为其他业务节点添加 Consul Client。