107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # 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 集群
 | ||
| - 数据持久化保证
 | ||
| - 符合生产环境标准
 | ||
| - 可以安全地重启和维护 |