2.8 KiB
2.8 KiB
Consul 集群故障排除指南
问题诊断
发现的问题
- DNS 解析失败:服务间无法通过服务名相互发现
- 网络连通性问题:
ash3c节点网络配置异常 - 跨节点通信失败:
no route to host错误 - 集群无法形成:持续的 "No cluster leader" 错误
根本原因
- 网络配置问题
- 防火墙或网络策略可能阻止了 Consul 集群通信端口
解决方案
当前部署方案(使用 Nomad + Podman)
目前集群已从 Docker Swarm 迁移到 Nomad + Podman,使用 consul-cluster-nomad.nomad 文件部署 Consul 集群。
网络诊断步骤
1. 检查节点状态
nomad node status
2. 检查网络连通性
# 在 master 节点上测试到 ash3c 的连通性
ping <ash3c-ip>
telnet <ash3c-ip> 8301
3. 检查防火墙设置
# 确保以下端口开放
# 8300: Consul server RPC
# 8301: Consul Serf LAN
# 8302: Consul Serf WAN
# 8500: Consul HTTP API
# 8600: Consul DNS
4. 检查 Podman 网络
podman network ls
podman network inspect <network-name>
推荐的修复流程
立即解决方案(单节点)
- 部署单节点 Consul 以恢复服务
- 验证基本功能正常
长期解决方案(集群)
- 修复
ash3c节点的网络配置 - 确保节点间网络连通性
- 配置防火墙规则
- 重新部署集群配置
验证步骤
单节点验证
# 检查服务状态
docker service ls | grep consul
# 检查日志
docker service logs consul_consul
# 访问 Web UI
curl http://localhost:8500/v1/status/leader
集群验证
# 检查集群成员
docker exec <consul-container> consul members
# 检查领导者
docker exec <consul-container> consul operator raft list-peers
常见问题
Q: 为什么服务发现不工作?
A: 在之前的 Docker Swarm 架构中,overlay 网络在某些配置下可能存在 DNS 解析问题。当前的 Nomad + Podman 架构已解决了这些问题。
Q: 如何选择合适的网络方案?
A:
- 开发/测试环境:使用单节点或 overlay 网络
- 生产环境:推荐使用 macvlan 或主机网络以获得更好的性能和可靠性
Q: 集群恢复后数据会丢失吗?
A: 如果使用了持久化卷,数据不会丢失。但建议在修复前备份重要数据。
监控和维护
健康检查
# 定期检查集群状态
consul members
consul operator raft list-peers
日志监控
# 监控关键错误
docker service logs consul_consul | grep -E "(ERROR|WARN)"
性能监控
- 监控 Consul 的 HTTP API 响应时间
- 检查集群同步延迟
- 监控网络连接数
联系支持
如果问题持续存在,请提供以下信息:
- Docker 版本和 Swarm 配置
- 网络拓扑图
- 完整的服务日志
- 节点间网络测试结果