優步完成了主要MySQL集羣組的升級,提升了性能和安全性

作者 | Matt Saunders

譯者 | 劉雅夢

策劃 | 丁曉昀

優步(Uber)對其 MySQL 數據庫集羣組進行了重大的改進,版本從 5.7 升級到了 8.0。該團隊希望利用 MySQL 新版本性能和併發性相關的改進,因爲 MySQL 5.7 在 2023 年 10 月已經過保,不再維護。這項工作耗時一年多,涉及到升級三個地區 19 個生產區域的 2100 多個集羣和 16000 個節點。

在優步(Uber)的博客文章中,Siddharth Singh 等人解釋說,MySQL 基礎設施包含數 PB 的數據,每秒處理超過 300 萬次查詢。因此,在升級過程中儘量減少中斷是至關重要的。爲了幫助實現這一點,優步(Uber)工程團隊自動化了一個系統,以引導每個集羣完成多階段的升級過程,而無需人工干預。Singh 繼續解釋了他們是如何選擇並行升級策略而不是選擇就地升級策略的。這一決定是由於他們需要儘量最小化停機時間、降低風險,並進行更好的測試。

並行升級過程涉及幾個階段。首先,優步(Uber)爲集羣中的每個 MySQL 5.7 節點在同一區域或地區添加了相應的 MySQL 8.0 副本節點。隨後進行了爲期一週的監控,以觀測系統的性能並檢測任何問題。當這個“滲透期”結束之後,工程師們將流量從 5.7 版本的副本節點中轉移出來,並將每個集羣的 MySQL 8.0 節點提升爲主節點。最後,將所有的 MySQL 5.7 節點從集羣中刪除,完成向 8.0 版本的轉型。

系統的穩定性和數據的完整性是升級期間的首要關注點。該團隊的計劃是,如果檢測到任何服務降級,就立即回滾到 MySQL 5.7,直到他們有足夠的信心將 MySQL 8.0 節點提升爲主節點。之後,將不再支持回滾到 5.7 版本,因此需要避免回滾。

這次升級也面臨着挑戰。升級到 MySQL 8.0 後,一些集羣的查詢執行計劃發生了變化,從而導致了延遲和資源消耗的增加。通過與數據庫軟件公司 Percona 的合作,優步(Uber)確定並實施了受影響集羣的修復程序。其他問題還包括:

一些不兼容的查詢和配置

默認字符集和排序規則設置的更改

需要升級客戶端庫以兼容 MySQL 8.0。

優步(Uber)並不是唯一一家分享如何更好地大規模啓動這一重大升級的公司。正如 InfoQ 今年早些時候所報道的那樣,GitHub 也進行了類似的升級,也從 5.7 升級到了 8.0,並分享了一些經驗教訓。在升級的衆多發現中,GitHub 還遇到了一些問題,例如當使用的客戶端中使用了不同的框架和語言時,從 8.0 到 5.7 的反向複製會中斷,從而縮短了潛在的回滾窗口。它們還會觸發複製缺陷,並在運行具有較大 WHERE IN 值的查詢時遇到崩潰。

Percona 的 Przemysław Malkowski 也發表一篇介紹如何避免在 MySQL 升級到 8.0 時發生故障的詳細文章,該文章強調了在升級之前很難測試與寫相關的工作負載,並強調了數據丟失、查詢速度慢、潛在停機和客戶端應用程序不兼容的可能性。Malkowski 還解釋瞭如何在必要時進行降級。

通過升級到 MySQL 8.0,其他組織也都從中獲益了。Arzooo 的 Jyoti Ranjan Parida 在一篇 Medium 文章中解釋了升級的一些好處:

新特性,例如窗口函數、通用表表達式和 JSON 增強等

更好的性能,改進的索引和查詢執行

更好的密碼過期策略

改進的資源管理,支持更高效的查詢

組多源複製

Parida 還解釋了升級時需要注意的一些事情,並提供了一份全面的先決條件操作清單,例如:

確保數據類型和函數沒有過時

刪除孤立的文件和無效觸發器

避免使用不受支持的分區表

解決關鍵字違規問題

使用新數據字典消除命名衝突

更新過時的 SQL 模式

檢查 ENUM/SET 列的長度

通過共享表空間重新定位表分區

使用 ASC 或 DESC 修改舊的 GROUP BY 子句

縮短較長的外鍵名稱

考慮將 utf8mb3 轉換爲 utf8mb4,以獲得更好的 Unicode 支持

儘管遇到了一些障礙,優步(Uber)的升級還是帶來了顯著的性能提升。服務器端的基準測試顯示,在高併發情況下,插入延遲改善了 29%,讀取延遲改善了 33%,更新延遲改善了 47%。在客戶端,一些查詢的速度提高了 78%,整體的數據庫鎖定時間縮短了 94%。

作者介紹

Matt Saunders是 Adaptavist 首席技術官的 DevOps 主管。幫助團隊使用 DevOps、平臺工程和雲原生工具和相關技術,以快速高效地交付可靠、高質量的軟件,同時儘量減少壓力。他曾與複雜的企業、小型初創企業、中小企業以及介於兩者之間的所有企業合作過。還共同組織了倫敦的 DevOps 聚會小組,該小組擁有 10000 多名成員,每月舉辦一次非常受歡迎的行業活動。

https://www.infoq.com/news/2024/10/uber-mysql-80-upgrade/

聲明:本文由 InfoQ 翻譯,未經許可禁止轉載。