當前位置: 妍妍網 > 碼農

GitHub.com跑了1200多台MySQL主機,如何無縫升級到8.0?

2024-06-02碼農

轉自: OSC開源社群(ID:oschina2013)

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/