124 lines
2.8 KiB
Markdown
124 lines
2.8 KiB
Markdown
# 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 <ash3c-ip>
|
||
telnet <ash3c-ip> 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 <network-name>
|
||
```
|
||
|
||
## 推荐的修复流程
|
||
|
||
### 立即解决方案(单节点)
|
||
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-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: 如果使用了持久化卷,数据不会丢失。但建议在修复前备份重要数据。
|
||
|
||
## 监控和维护
|
||
|
||
### 健康检查
|
||
```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. 节点间网络测试结果 |