GitHub.com跑了1200多台MySQL主机,如何无缝升级到8.0?
GitHub 团队近日分享了他们将 GitHub.com 的底层数据库无缝升级到 MySQL 8.0 的经验。
据介绍,GitHub 使用 MySQL 来存储大量关系数据,因此在不影响网站服务级别目标 (SLO) 的情况下升级主机集群(1200 多台 MySQL 主机)绝非易事。其团队表示,为了升级到 MySQL 8.0,他们规划、测试和升级本身总共花费了一年多的时间,并且需要 GitHub 内部多个团队的协作。
GitHub 的 MySQL 基础设施概览:
-
由 1200 多台主机组成,包括数据中心中的 Azure 虚拟机和裸机主机
-
存储超过 300 TB 的数据,并在 50 多个数据库集群中每秒处理 550 万次查询
-
每个集群都配置为具有主副设置的高可用性
-
分区存储数据 —— 利用水平和垂直分片来扩展 MySQL 集群,以及使用 MySQL 集群来存储特定产品领域的数据。此外还为大结构域 (large-domain) 提供了水平分片的 Vitess 集群,这些区域的增长超出了单主 MySQL 集群的规模
-
庞大的工具生态,包括 Percona Toolkit、gh-ost、orchestrator、freno 和用于操作主机集群的内部自动化工具
由于需要操作两个版本的 MySQL,因此 GitHub 内部使用的工具和自动化设施需要能够兼容处理混合版本,并了解 5.7 和 8.0 之间新的、不同的或已弃用的语法。
为了满足可用性标准,GitHub 团队采取了逐步升级策略,满足在整个过程中进行 checkpoint 和回滚的需求。下面是他们制定的升级计划:
-
步骤 1:升级滚动副本 (rolling replica)
-
步骤 2:升级备份拓扑 (replication topology)
-
步骤 3:将 MySQL 8.0 主机提升为主集群
-
步骤 4:升级面向内部的实例类型
-
步骤 5:清理,确认集群不需要回滚并成功升级到 MySQL 8.0 后,删除 5.7 服务器。验证工作会至少经历一个完整的 24 小时流量周期,以确保在高峰流量期间不会出现问题。
至于为什么要升级到 MySQL 8.0,GitHub 团队表示主要是因为 MySQL 5.7 的生命周期即将结束。此外升级后可以获得最新安全补丁、错误修复和性能增强的 MySQL 版本。他们还希望测试 8.0 中的新功能并从中受益,包括即时 DDL、隐形索引和压缩的 bin 日志等。
详细的技术细节查看:https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/
本文文字及图片出自 OSC开源社区
你也许感兴趣的:
- MariaDB消亡史
- 3700 万美元“卖身救命”,泥潭深陷的 MariaDB 准备退市
- MySQL 中引入对 JavaScript 的支持
- MySQL 支持 JavaScript,目前处于预览阶段
- 无中断升级 1200 多台 MySQL 服务器,GitHub 是如何做到的
- 全方位对比 Postgres 和 MySQL (2023 版)
- MySQL 小心了:MariaDB 会取代你!
- 译 | MariaDB 和 MySQL 全面对比:选择数据库需要考虑这几点
- 译 | 永远不要在MySQL中使用utf8,改用utf8mb4
- MySQL 一千个不用 Null 的理由
你对本文的反应是: