Linux中國

GitHub 是如何遷移 MySQL 集群的

任務

去年我們把 GitHub 上的大部分數據移到了新的數據中心,這個中心有世界頂級的硬體資源和網路平台。自從使用了 MySQL 作為我們的後端系統的基礎,我們一直期望著一些改進來大大提高資料庫性能,但是在數據中心使用全新的硬體來部署一套全新的集群環境並不是一件簡單的工作,所以我們制定了一套計劃和測試工作,以便數據能平滑過渡到新環境。

準備工作

像我們這種關於架構上的巨大改變,在執行的每一步都需要收集數據指標。新機器上安裝好了基本的操作系統,接下來就是測試新配置下的各種性能。為了模擬真實的工作負載環境,我們使用 tcpdump 工具從舊的集群那裡複製正在發生的 SELECT 請求,並在新集群上重新回放一遍。

MySQL 調優是個繁瑣的細緻活,像眾所周知的 innodbbufferpoolsize 這個參數往往能對 MySQL 性能產生巨大的影響。對於這類參數,我們必須考慮在內,所以我們列了一份參數清單,包括 innodbthreadconcurrency,innodbiocapacity,和 innodbbufferpoolinstances,還有其它的。

在每次測試中,我們都很小心地只改變一個參數,並且讓一次測試至少運行12小時。我們會觀察響應時間的變化曲線,每秒的響應次數,以及有可能會導致並發性降低的參數。我們使用 「SHOW ENGINE INNODB STATUS」 命令列印 InnoDB 性能信息,特別觀察了 「SEMAPHORES」 一節的內容,它為我們提供了工作負載的狀態信息。

當我們在設置參數後對運行結果感到滿意,然後就開始將我們最大的數據表格之一遷移到一套獨立的集群上,這個步驟作為整個遷移過程的早期測試,以保證我們的核心集群有更多的緩存池空間,並且為故障切換和存儲功能提供更強的靈活性。這步初始遷移方案也引入了一個有趣的挑戰:我們必須維持多條客戶連接,並且要將這些連接指向到正確的集群上。

除了硬體性能的提升,還需要補充一點,我們同時也對處理進程和拓撲結構進行了改進:我們添加了延時拷貝技術,更快、更高頻地備份數據,以及更多的讀拷貝空間。這些功能已經準備上線。

列出任務清單,三思後行

每天有上百萬用戶的使用 GitHub.com,我們不可能有機會等沒有人用了才進行實際數據切換。我們有一個詳細的任務清單來執行遷移:

我們還規划了一個維護期,並且在我們的博客中通知了大家,讓用戶注意到這件事情。

遷移時間到

太平洋時間星期六上午5點,我們的遷移團隊上線集合對話,同時數據遷移正式開始:

我們將 GitHub 網站設置為維護模式,並在 Twitter 上發表聲明,然後開始按上述任務清單的步驟開始工作:

13 分鐘後,我們確保新的集群能正常工作:

然後我們讓 GitHub.com 脫離維護模式,並且讓全世界的用戶都知道我們的最新狀態:

大量前期的測試工作與準備工作,讓我們將維護期縮到最短。

檢驗最終的成果

在接下來的幾周時間裡,我們密切監視著 GitHub.com 的性能和響應時間。我們發現遷移後網站的平均載入時間減少一半,並且在99%的時間裡,能減少三分之二

我們學到了什麼

功能劃分

在遷移過程中,我們採用了一個比較好的方法是:將大的數據表(主要記錄了一些歷史數據)先遷移過去,空出舊集群的磁碟空間和緩存池空間。這一步給我們留下了更多的資源用於「熱」數據,將一些連接請求分離到多套集群裡面。這步為我們之後的勝利奠定了基礎,我們以後還會使用這種模式來進行遷移工作。

測試測試測試

為你的應用做驗收測試和回歸測試,越多越好,多多益善,不要嫌多。從老集群複製數據到新集群的過程中,如果進行驗收測試和響應狀態測試,得到的數據是不準的,如果數據不理想,這是正常的,不要驚訝,不要試圖拿這些數據去分析原因。

合作的力量

對基礎架構進行大的改變,通常需要涉及到很多人,我們要像一個團隊一樣為共同的目標而合作。我們的團隊成員來自全球各地。

團隊成員地圖:

本次合作新創了一種工作流程:我們提交更改(pull request),獲取實時反饋,查看修改了錯誤的 commit —— 全程沒有電話交流或面對面的會議。當所有東西都可以通過 URL 提供信息,不同區域的人群之間的交流和反饋會變得非常簡單。

一年後……

整整一年時間過去了,我們很高興地宣布這次數據遷移是很成功的 —— MySQL 性能和可靠性一直處於我們期望的狀態。另外,新的集群還能讓我們進一步去升級,提供更好的可靠性和響應時間。我將繼續記錄這些優化過程。

via: https://github.com/blog/1880-making-mysql-better-at-github

作者:samlambert 譯者:bazz2 校對:wxy

本文由 LCTT 原創翻譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國