mgmt/docs/CONSUL_PERSISTENCE_FIX.md

2.8 KiB
Raw Blame History

Consul 持久化存储修复方案

🚨 问题诊断

根本原因:你的 Consul 集群确实没有配置持久化存储!

当前问题:

  1. 数据目录 /opt/nomad/data/consul 只是容器内临时目录
  2. 没有 volume 挂载 - 重启后数据完全丢失
  3. 缺少 onecloud1 节点 - 配置与实际运行状态不一致

影响:

  • Consul 服务发现正常 - 这部分数据在内存中
  • KV 存储数据丢失 - 所有配置、tokens、证书都没了
  • ACL 配置丢失 - 权限设置重置
  • 服务配置丢失 - 注册的服务元数据丢失

🔧 修复方案

第一步:配置持久化存储

在每个 Consul 节点上运行:

# 在 ch4, ash3c, warden 节点上分别执行
./scripts/setup-consul-persistent-storage.sh

这个脚本会:

  1. 创建 /opt/consul/data 目录
  2. 设置正确的权限 (nomad:nomad)
  3. 在 Nomad 配置中添加 host volume
  4. 重启 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 集群
  • 数据持久化保证
  • 符合生产环境标准
  • 可以安全地重启和维护