天天看點

手遊業務MySQL資料庫虛拟化漫談 | By 肖力

作者簡介

肖力, 資深運維專家,擁有15年運維經驗,就職于金山西山居,擔任系統運維經理,曾就職于盛大遊戲,在運維圈有極大的影響力。國内最頂尖的KVM專家之一,從2009年開始研究KVM技術,是國内較早在生産環境大規模實踐KVM的人之一,積累了非常豐富的經驗。

熱衷于技術傳播,一直在無私地為運維領域的發展做貢獻,維護有微信訂閱号“KVM虛拟化實踐”,分享了大量KVM和運維領域的幹貨内容,同時還營運着多個運維相關的微信群。此外,他還是華章“運維前線”系列圖書的總策劃,無償地在組織大量願意無私分享經驗的運維工程師們來參與寫作。

作者

  • 肖力(原著)

編輯

  • 葉金榮(文章整理)

内容簡介

資深運維專家肖力談手遊業務MySQL虛拟化方案

手遊業務MySQL服務特點

  1. 目前手遊業務大多是采用Redis和MySQL相結合的方案;
  2. Redis則用于遊戲業務中目前狀态資料的存儲,而MySQL一般用于資料持久化存儲以及事務控制、資料一緻性保證;
  3. 手遊業務中的MySQL資料庫一般負載不高。

正因為MySQL負載不高,才需要想辦法提高資源使用率,這裡可以有兩個思路:

  • 單機多執行個體;
  • 虛拟化技術。

這兩種方法各有優缺點,我們接下來各自分析對比下。

1、單機多執行個體

在同一個OS下啟動多個mysqld程序,監聽多個端口。

優點:

  • 計算資源使用率相對較高,因為沒有虛拟化層的損耗;
  • 适合中小企業,因為無需額外維護KVM等虛拟化元件。

缺點:

  • 隔離性相對較差,不同業務的MySQL執行個體間可能會因為業務瞬間突增而互相影響;
  • 定制化相對麻煩,不同執行個體要使用不同的MySQL版本,操作配置比較麻煩;
  • 不同執行個體無法都使用預設的3306端口,除非事先綁定多個IP,相對較複雜。

2、虛拟化技術

在每個虛拟機隻運作一個資料庫執行個體。

  • 友善推動資料庫部署标準化、模版化,為後續推進快速部署打好基礎;
  • 通過虛拟化技術,實作資料庫服務快速批量部署,公有雲RDS一般也是這麼做的;
  • 具備良好的隔離性,一個執行個體中的OS或資料庫故障不影響其他執行個體下的服務。
  • 多了虛拟化層,增加一部分計算資源消耗;
  • 每個虛拟化執行個體使用單獨的IP,網絡管理上更複雜;
  • 手遊業務資料庫虛拟化方案可以考慮KVM結合Docker的方案。

資料庫使用KVM虛拟化方案需要關注下面的幾個要點:

  1. 服務穩定性,業務的穩定是一切基礎,再好的方案也不能影響業務的穩定,否則都是耍流氓;
  2. 避免性能瓶頸,資料庫服務主要的瓶頸在于磁盤I/O,好在手遊業務的壓力一般不太大。不過上線前也要做足測試,對潛在的性能需求要有預估。遇到高負載時可直接使用SSD或者PCIe SSD裝置,在KVM虛拟化中也可将SSD直接以裸盤方式挂載到KVM執行個體上。
  3. 服務可靠性,可從下面兩個方面提升服務可靠性:

1)資料庫層面,可采用主從複制、定期實體&邏輯備份(全備+差異備份)、備份恢複等機制;

2)虛拟化層面,可采用共享存儲、虛拟機快照等。共享存儲優先選擇企業級儲存設備,要注意虛拟機快照并不能保證資料庫的完整性。

資料庫使用Docker技術

資料庫服務基于Docker技術,有效平衡了單機多執行個體以及KVM虛拟化兩種方案,其資源損耗小,又具備虛拟化靈活部署和隔離性等優點。

但目前Docker技術仍有諸多限制:

  • 其使用AUFS檔案系統,更容易造成磁盤I/O性能瓶頸(可配置SSD盤緩解I/O壓力);
  • Docker的執行個體不支援熱遷移(可和KVM結合,利用KVM實作熱遷移);
  • Docker的網絡子產品上也有瓶頸。

上述這些因素決定了目前在Docker裡跑MySQL還有待進一步完善,我們也相信随着Docker技術的不斷改進,這些限制或者瓶頸會越來越少,更适大規模運作MySQL等服務。