mgmt/docs/CONSUL_PERSISTENCE_FIX.md

107 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Consul 持久化存储修复方案
## 🚨 问题诊断
**根本原因:你的 Consul 集群确实没有配置持久化存储!**
### 当前问题:
1. **数据目录** `/opt/nomad/data/consul` 只是容器内临时目录
2. **没有 volume 挂载** - 重启后数据完全丢失
3. **缺少 onecloud1 节点** - 配置与实际运行状态不一致
### 影响:
-**Consul 服务发现正常** - 这部分数据在内存中
-**KV 存储数据丢失** - 所有配置、tokens、证书都没了
-**ACL 配置丢失** - 权限设置重置
-**服务配置丢失** - 注册的服务元数据丢失
## 🔧 修复方案
### 第一步:配置持久化存储
**在每个 Consul 节点上运行:**
```bash
# 在 ch4, ash3c, warden 节点上分别执行
./scripts/setup-consul-persistent-storage.sh
```
**这个脚本会:**
1. 创建 `/opt/consul/data` 目录
2. 设置正确的权限 (nomad:nomad)
3. 在 Nomad 配置中添加 host volume
4. 重启 Nomad 客户端
### 第二步:部署持久化 Consul
**停止当前 job**
```bash
nomad job stop consul-cluster-nomad
```
**部署新配置:**
```bash
nomad job run infrastructure/nomad/nomad-jobs/consul-cluster/consul-cluster-persistent.nomad
```
### 第三步:恢复数据
**如果有备份数据:**
```bash
# 从 Consul KV 备份恢复
consul kv import @backup.json
# 或从快照恢复
consul snapshot restore backup.snap
```
**如果没有备份:**
- 需要重新配置所有 KV 数据
- 重新设置 Cloudflare tokens
- 重新注册服务
## 🎯 新配置的优势
### 持久化存储:
- **Host Volume** - 数据存储在宿主机 `/opt/consul/data`
- **重启安全** - 重启 job 不会丢失数据
- **跨 allocation** - 数据在 allocation 之间保持
### 改进配置:
- **统一 bootstrap-expect=3** - 所有节点都知道集群大小
- **健康检查** - 自动监控服务状态
- **日志级别** - 便于调试
- **服务注册** - 自动注册到 Consul
## 📋 执行清单
### 准备阶段:
- [ ] 备份当前 KV 数据 (如果还有)
- [ ] 记录当前服务注册状态
- [ ] 准备重新配置的数据
### 执行阶段:
- [ ] 在 ch4 节点运行存储配置脚本
- [ ] 在 ash3c 节点运行存储配置脚本
- [ ] 在 warden 节点运行存储配置脚本
- [ ] 停止当前 Consul job
- [ ] 部署持久化 Consul job
- [ ] 验证集群状态
### 验证阶段:
- [ ] 检查 Consul 集群状态
- [ ] 验证 leader 选举
- [ ] 测试 KV 存储
- [ ] 恢复关键配置数据
## 🚨 重要提醒
**这是一个严重的架构缺陷!**
- 生产环境的 Consul 集群没有持久化存储是不可接受的
- 这相当于把银行的金库建在沙滩上
- 必须立即修复,否则随时可能再次丢失数据
**修复后的好处:**
- 真正的高可用 Consul 集群
- 数据持久化保证
- 符合生产环境标准
- 可以安全地重启和维护