场景目标
完成一轮不触碰生产数据的 GitLab 隔离恢复,证明选定备份集可恢复批准的项目与权限,明确数据缺口、耗时及上线切换的独立审批边界。
自动化与交付 · 高级
核对 GitLab 数据、配置、密钥与对象存储备份,在同版本隔离实例验证仓库、权限和附件,建立可审阅的恢复证据。
完成一轮不触碰生产数据的 GitLab 隔离恢复,证明选定备份集可恢复批准的项目与权限,明确数据缺口、耗时及上线切换的独立审批边界。
准备维护期内的 GitLab 版本、同版本同 CE/EE 类型的空演练实例、受控备份读权限及独立存储;按实际数据库/Gitaly/对象存储拓扑评审恢复流程。密钥只经批准秘密通道交付,不进入正文和日志。隔离邮件、Webhook、Runner 和生产身份写入路径,预留解压、数据库和仓库恢复空间。估时 240 分钟仅是小样本演练窗口,不包含全量恢复或版本升级,也不构成 RTO 承诺。
应用备份、对象存储和 secrets 分别保管,再按一致时间窗口恢复到同版本空实例;仓库、附件、权限和加密字段各自验收,生产入口保持不变。
点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。
备份窗口按实际安装流程核对后台任务和资源约束,已有备份优先用可追溯副本。
恢复仅覆盖确认过的空演练目标;Linux package 流程中的进程停止与启动只作用于该目标。
秘密材料仅通过受控渠道使用,恢复后重新检查加密字段和出站隔离。
分别记录对象版本与关联时间,不能靠应用备份成功推断外部对象完整。
演练实例只读写自己的对象存储,目标映射不允许落到生产资源。
核对提交、分支、Wiki、用户权限及 secrets 诊断,不以登录页正常代替验收。
抽样比对文件清单和完整性,失败模块和未覆盖项独立登记。
备份要求匹配精确版本与 CE/EE 类型,不能先升级目标再用版本不符备份证明可恢复。
阻断真实邮件、Webhook、Runner 取任务和外部自动化,不仅修改页面标题或主机名。
配置、secrets、外部对象及队列边界分开核验;没有独立恢复证据就不宣称灾备达标。
适用于 GitLab Self-Managed 的计划备份与恢复演练,本场景以 Linux package 安装为流程示例,Helm、Docker、外置数据库及 Gitaly 架构须按对应版本文档调整。备份任务成功不等于可恢复;本内容未在目标环境执行,不能据此声明灾备达标。
将应用备份、对象存储、配置与 secrets 分别登记,并以一致的时间窗口建立关联。恢复目标使用独立数据库、存储和网络,先验证无生产写入路径,再检查业务数据和授权。恢复阶段不同时升级 GitLab,不自动切换域名、Runner 或用户流量。
明确批准的恢复点与恢复时间目标,保留备份摘要、实例版本、存储映射和完整演练时间线;受控样本的仓库提交、附件、权限及加密字段均经验证,生产实例未受影响,失败项和不在备份范围内的项目有责任人。
登记实例标识、GitLab 精确版本和 CE/EE 类型、数据库/Gitaly/对象存储拓扑、恢复点与预算;指定执行、业务验收和停止决策人。以下仅供获准登录 Linux package 实例后读取运行信息,不执行备份或停止服务,输出经脱敏后归档。
sudo gitlab-rake gitlab:env:info
sudo gitlab-ctl status版本与资产清单一致,恢复点注明时区、数据范围和允许丢失窗口;备份源、恢复目标及权限分别明确,不能只填写一台模糊主机名。
资产或权限不符则停止,保持现有业务运行;先补齐方案,不通过临时升权或在生产就地试恢复解决信息不足。
逐项确认应用备份覆盖的数据库、仓库、附件、LFS、Packages 等实际启用功能;对象存储和配置、secrets、TLS/SSH 材料按安装形态另行备份。Redis/Sidekiq 待执行任务不应假定在应用备份中。只记录秘密材料的受控引用和关联时间,不把明文与加密数据放在同一公开归档。
每个启用功能都有备份对象、时间范围、负责人和缺失处置;备份访问权限与密钥解密权限分离,恢复者能经授权获得必要材料。
发现对象桶或密钥缺失则停止恢复排期;保留现有备份,禁止删除旧备份腾空间或用新生成 secrets 冒充原密钥。
新增备份属于获批的资源密集操作,先检查容量与业务窗口,并按官方维护流程确认后台任务无待执行或运行项、窗口内不会进入新任务,再按实际安装文档执行;不能擅停生产任务来补这一条件。若已有可用备份,则使用只读副本并查找该窗口的任务状态证据。记录备份任务日志、大小、摘要以及对象存储清单,区分普通归档与 server-side repository 备份,后者所需外部备份对象必须完整保留。下例仅计算文件摘要,不证明可恢复。
sha256sum -- '<APPROVED_BACKUP_ARCHIVE>'备份任务完整结束且无跳过对象未说明,副本摘要与来源一致;后台任务排空和无运行任务的窗口证据齐全,对象版本及必要备份链连续,备份时间与恢复目标对应。既有备份缺少任务状态证据时明确标注一致性缺口,不宣称完整一致。
任务失败或校验不符时保留日志,停止分发该副本并重新选择可信备份;不要把不完整归档标记为成功,不能覆盖唯一已知可用副本。
在独立演练资源部署与备份完全相同版本、相同 CE/EE 类型的 GitLab;先验证空实例本身工作正常,再核对所有数据库端点、Gitaly 存储名和对象桶指向演练资源。阻断出站邮件、Webhook、Runner 获取任务与其他外部自动化,不能只靠不同页面标题区分生产。不要复用含现有数据的目标。
恢复目标无业务存量,独立数据库与存储经双人核对;防火墙、路由与服务配置证明它不能写生产系统,演练主机能获取批准的备份副本。
任何生产依赖引用或隔离漏洞均为停止条件;撤销本次演练入口而不是停生产服务,修正后重新预检。
按部署形态恢复匹配的 secrets 和必要配置,并把地址、存储桶、邮件、LDAP 等指向安全演练配置;不是原样覆盖所有生产配置。Linux package 的配置应用按该版本官方步骤执行,确认存储名称与备份数据匹配。应用配置后再次检查出站隔离;不输出密钥值,不将 secrets 存进 Git。
目标版本和配置映射再次签核,密钥材料可被应用读取且权限正确,外部自动化仍阻断;已有恢复数据未因错误初始化被覆盖。
密钥不匹配、映射缺失或配置检查失败时保持隔离并停止;回到演练实例原配置副本,不轮换生产秘密来绕过问题。
由批准的执行人在已确认空演练实例按对应官方流程恢复。Linux package 流程需先停连接数据库的 Puma 与 Sidekiq,按备份 ID 执行恢复,完成后再按官方要求启动和检查。恢复会覆盖目标数据库;本步骤不提供可直接批量执行的生产覆盖命令。记录开始/结束时间、每个子任务和异常,不跳过失败模块继续宣称整体成功。
恢复命令及所有子任务结果明确,实际目标始终为演练资源;服务启动后仓库存储可访问,日志不存在未处置的版本、数据库或密钥错误。
目标身份变化、版本不符或中途失败立即停止后续动作;保留演练副本供定位,经批准重建新的空演练实例后重试,不在含部分恢复数据的实例上反复覆盖。
使用批准的普通测试用户和只读凭据,抽查项目可见性、权限拒绝路径、精确提交、分支、Wiki、LFS、附件与制品;对加密数据运行官方 secrets 诊断并只保留结果摘要。以已知提交和文件校验清单对照,而非仅看登录页;禁止在演练实例启用真实流水线发送制品或通知。
受控样本读取得到期望提交和内容,无越权访问,必要加密字段能正常使用且不泄露;逐项记录通过、失败或未覆盖,不用抽样结果冒充全量验证。
发现缺数据或权限异常停止验收,保留证据追溯备份范围与一致性窗口;不从生产随意补单个对象掩盖完整性问题。
交付恢复证据包:备份 ID、时间和摘要、目标身份、操作记录、数据缺口、实际耗时、业务确认及后续负责人。演练结束后按保留审批处理副本和临时凭据。真正灾难切流需另行解决原实例写入隔离、DNS/SSH 信任、身份与 Runner 接入及恢复后新写入归属,本次不自动切流。
业务与运维共同签署演练结论,恢复点与时间目标分别评估,未覆盖项可追踪;生产服务保持原状态,临时访问已按约定回收。
未达目标则登记缺口和下一轮演练,不回写生产数据。发生正式切流后的新写入不能靠切回旧 DNS 自动合并,需独立数据恢复方案。