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