summary
2016-01-28,GitHub 主数据中心因公用事业公司进行电力维护导致市电中断,随后现场发电机未能按预期接管,造成该数据中心短时间掉电。受此影响,GitHub 的数据库主节点(MySQL)及一系列核心服务在故障切换与恢复过程中多次中断,部分 webhook 投递在故障窗口内丢失。
timeline
电力维护触发市电中断,发电机切换出现延迟/失败,数据中心短暂掉电。GitHub 将流量切到次级设施并恢复数据库主节点,过程中 Web/API/Git 多次抖动。团队随后进行数据一致性检查与 webhook 补偿,整体恢复历时数小时。
root_cause
外部电力维护叠加现场发电/切换机制未能无缝接管,导致主数据中心掉电;数据库主节点故障切换与恢复流程在压力下暴露出可靠性问题。
amplifiers
① 单数据中心强依赖:主设施掉电即影响全局。② 发电/切换冗余不足:市电中断后未能瞬时接管。③ 故障切换链路复杂:数据库主节点恢复拖慢整体。④ 部分异步投递(webhook)在窗口内丢失。
mitigation
将流量与核心服务切换到可用设施;恢复数据库主节点并做一致性校验;对丢失的 webhook 做补偿。GitHub 后续强化多数据中心能力与发电流程。
lessons
核心服务应跨可用区/数据中心部署;发电与切换需定期演练;数据库主节点故障切换应自动化且快速;异步投递需有持久队列与重放。
checklist
① 关键设施实现多活/跨区冗余。② 定期演练发电与切换。③ 数据库主节点自动化 failover。④ webhook 等异步任务持久化+可重放。