2.8 KiB
2.8 KiB
Consul 持久化存储修复方案
🚨 问题诊断
根本原因:你的 Consul 集群确实没有配置持久化存储!
当前问题:
- 数据目录
/opt/nomad/data/consul只是容器内临时目录 - 没有 volume 挂载 - 重启后数据完全丢失
- 缺少 onecloud1 节点 - 配置与实际运行状态不一致
影响:
- ✅ Consul 服务发现正常 - 这部分数据在内存中
- ❌ KV 存储数据丢失 - 所有配置、tokens、证书都没了
- ❌ ACL 配置丢失 - 权限设置重置
- ❌ 服务配置丢失 - 注册的服务元数据丢失
🔧 修复方案
第一步:配置持久化存储
在每个 Consul 节点上运行:
# 在 ch4, ash3c, warden 节点上分别执行
./scripts/setup-consul-persistent-storage.sh
这个脚本会:
- 创建
/opt/consul/data目录 - 设置正确的权限 (nomad:nomad)
- 在 Nomad 配置中添加 host volume
- 重启 Nomad 客户端
第二步:部署持久化 Consul
停止当前 job:
nomad job stop consul-cluster-nomad
部署新配置:
nomad job run infrastructure/nomad/nomad-jobs/consul-cluster/consul-cluster-persistent.nomad
第三步:恢复数据
如果有备份数据:
# 从 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 集群
- 数据持久化保证
- 符合生产环境标准
- 可以安全地重启和维护