GitHub MySQL 基础设施升级总结
升级背景与动机
GitHub 最近将其 MySQL 基础设施从 5.7 版本升级到了 8.0 版本。这一升级的主要动机是 MySQL 5.7 已经到达生命周期终点,且需要利用 MySQL 8.0 提供的最新安全补丁、错误修复和性能增强。
基础设施规模与配置
GitHub 的 MySQL 基础设施包括超过 1200 台主机,这些主机是 Azure 虚拟机和裸金属主机的混合体,管理着超过 300 TB 的数据,并在 50 多个数据库集群中每秒处理 550 万次查询。为了确保高可用性,GitHub 采用了主从集群配置。数据分区策略包括水平和垂直分片,以适应特定产品领域和超出单个主集群容量的大型领域。
升级准备与实施
升级的准备工作始于 2022 年 7 月。由于 MySQL 基础设施的关键性,数据库团队对服务级别目标(SLOs)和协议(SLAs)有特定要求。由于工作负载的多样性和操作规模,升级阶段涉及基础设施准备、确保应用程序兼容性以及在团队内保持透明沟通。
升级过程首先从滚动副本升级开始,每个阶段都经过仔细监控后再进行下一步。团队随后更新了复制拓扑,在当前 5.7 主节点下设置了一个 8.0 主候选节点。提升 MySQL 8.0 主机为主节点时,没有直接对主节点进行升级。随后升级了辅助服务器以确保一致性,最后进行了彻底的清理阶段。
回滚策略与挑战
GitHub 的升级策略中,能够在必要时回滚到 MySQL 5.7 是一个重要方面。为了管理这一点,GitHub 解决了如字符集差异和角色管理功能等兼容性问题,确保版本之间的无缝过渡。在升级过程中,团队遇到了 Vitess 升级的挑战,包括复制延迟和错误,需要部署特定的 MySQL 版本并仔细管理工作负载。他们还遇到了在持续集成(CI)环境中通过的查询在生产环境中失败的实际问题。
升级经验与教训
升级过程持续了一年多,涉及多个团队,并强调了有效观察平台、稳健的测试计划和可靠的回滚能力的重要性。团队学到了客户端配置一致性的价值,这在成功回滚中至关重要。这一经验强调了具有良好理解和标准化连接配置的好处。
关键总结与启示
这次升级的一个关键启示是数据分区策略在以前努力中的关键作用。这一策略允许更针对性的升级,并最大限度地减少了过程中未知变量的风险。MySQL 集群从五个扩展到当前的 50 个,也突显了增强观察能力、先进工具和管理更大集群的高效流程的必要性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。