各位OceanBase运维同仁,备OCP异常是生产环境常见故障——漏洞扫描强制升级Docker、磁盘写满、证书过期,都可能导致备OCP直接“躺平”。
今天我整理了一份完整的备OCP重装与主备关系修复指南 ,全程基于真实故障复盘,每一步都有操作要点+避坑提示 ,新人也能照着做完。
一、什么场景需要这套流程?
- 漏洞扫描 :安全团队要求升级Docker版本,升级失败容器起不来
- 磁盘写满 :备OCP所在节点日志积压,容器无法写入
- 证书过期 :HTTPS证书未续期,备OCP直接拒绝服务
核心原则 :不要在主OCP上乱删配置,严格按照“先卸载、再清元数据、后重建”的顺序。
二、完整操作步骤(共8步)
第一步:卸载异常备OCP
登录OAT,找到异常的备OCP实例,点击 “卸载” 。
注意 :卸载时不要勾选 “删除数据目录”,避免后续无法找回配置信息。
第二步:清除主OCP中的备OCP元数据
主OCP → 系统管理 → OCP多集群模式 → 找到已卸载的备OCP记录 → 点击删除 。
这一步很多人漏掉,导致重建时提示“集群名已存在”。
第三步:OAT重新安装OCP
- 点击右上角 “安装产品” → “安装OCP”
- 填写基本信息:
- OCP版本:选择与主OCP一致的版本
- 产品名称、密码、安装服务器IP
- 关键配置 :打开“多集群模式”,角色选 “备集群” ,填写OCP集群名称(建议与旧集群一致)
- MetaDB租户配置:按业务需求填写即可
第四步:等待任务暂停,完成MetaDB接管
安装任务会执行到 “takeover_metadb” 步骤自动暂停 。
此时浏览器访问 http://备OCP_IP:8080 ,填写主OCP的Meta租户root用户连接串 ,点击确认。
第五步:添加备OCP上的所有主机
备OCP页面 → 主机 → 添加主机
逐台填写备OCP所在集群的服务器IP、SSH端口、密码,等待添加成功。
第六步:接管之前的OB集群
备OCP页面 → 集群 → 接管集群
填写待接管集群的sys租户连接串 (含用户名、密码、tenant=sys),点击提交。
第七步:【核心】修复主OCP元数据,恢复主备租户拓扑关系
这是全网目前最完整的解决方案 。
备OCP重建后,主OCP的元数据表里不会自动建立主备租户的关联关系 ,导致拓扑图无法显示、切换指令可能失败。
登录主OCP的meta租户,进入ocp库,执行以下SQL:
sql
UPDATE mc_ob_tenant t1 JOIN mc_ob_tenant t2 ON t1.tenant_name = t2.tenant_name SET t1.primary_tenant_id = t2.tenant_id, t1.log_transport_mode = ‘LOG_BACKUP’, t1.primary_tenant_ocp_cluster_id = t2.ocp_cluster_id WHERE t1.cluster_name = ‘obcluster3’ – 替换为备租户所在集群名 AND t2.cluster_name = ‘obcluster2’ – 替换为主租户所在集群名 AND t1.role = ‘STANDBY’;
执行前必做 :
- 先
SELECT *验证数据范围是否正确 - 务必在主OCP的meta租户执行,不是在备OCP
第八步:接管OBProxy
备OCP页面 → OBProxy管理 → 接管现有OBProxy实例,确保备OCP能正常管控代理服务。
三、验证结果
- 备OCP页面可正常打开,无报错
- 接管的OB集群状态为“运行中”
- 最关键 :进入租户详情页,主备关系拓扑图恢复正常显示
- 尝试在主租户建表,备租户延迟同步正常
四、避坑总结
| 坑点 | 后果 | 解决方案 |
|---|---|---|
| 卸载时勾选删除数据目录 | 元数据彻底丢失,只能全量重搭 | 卸载时只卸容器,不删数据 |
| 重建时换了集群名 | 主备识别异常,租户接管失败 | 集群名必须与原来一致 |
| 漏掉第7步SQL | 拓扑图空白,切换指令可能失效 | 必须手动修复元数据 |
备OCP重装并不复杂,但细节极易踩坑。以上流程已在多个生产环境验证,欢迎收藏备用。
如果你在操作中遇到其他报错,欢迎评论区贴图,我帮你一起看日志。
【标签】 #OCP #运维实战 #高可用 #故障恢复