作者簡介
肖力, 資深運維專家,擁有15年運維經驗,就職于金山西山居,擔任系統運維經理,曾就職于盛大遊戲,在運維圈有極大的影響力。國内最頂尖的KVM專家之一,從2009年開始研究KVM技術,是國内較早在生産環境大規模實踐KVM的人之一,積累了非常豐富的經驗。
熱衷于技術傳播,一直在無私地為運維領域的發展做貢獻,維護有微信訂閱号“KVM虛拟化實踐”,分享了大量KVM和運維領域的幹貨内容,同時還營運着多個運維相關的微信群。此外,他還是華章“運維前線”系列圖書的總策劃,無償地在組織大量願意無私分享經驗的運維工程師們來參與寫作。
作者
- 肖力(原著)
編輯
- 葉金榮(文章整理)
内容簡介
資深運維專家肖力談手遊業務MySQL虛拟化方案
手遊業務MySQL服務特點
- 目前手遊業務大多是采用Redis和MySQL相結合的方案;
- Redis則用于遊戲業務中目前狀态資料的存儲,而MySQL一般用于資料持久化存儲以及事務控制、資料一緻性保證;
- 手遊業務中的MySQL資料庫一般負載不高。
正因為MySQL負載不高,才需要想辦法提高資源使用率,這裡可以有兩個思路:
- 單機多執行個體;
- 虛拟化技術。
這兩種方法各有優缺點,我們接下來各自分析對比下。
1、單機多執行個體
在同一個OS下啟動多個mysqld程序,監聽多個端口。
優點:
- 計算資源使用率相對較高,因為沒有虛拟化層的損耗;
- 适合中小企業,因為無需額外維護KVM等虛拟化元件。
缺點:
- 隔離性相對較差,不同業務的MySQL執行個體間可能會因為業務瞬間突增而互相影響;
- 定制化相對麻煩,不同執行個體要使用不同的MySQL版本,操作配置比較麻煩;
- 不同執行個體無法都使用預設的3306端口,除非事先綁定多個IP,相對較複雜。
2、虛拟化技術
在每個虛拟機隻運作一個資料庫執行個體。
- 友善推動資料庫部署标準化、模版化,為後續推進快速部署打好基礎;
- 通過虛拟化技術,實作資料庫服務快速批量部署,公有雲RDS一般也是這麼做的;
- 具備良好的隔離性,一個執行個體中的OS或資料庫故障不影響其他執行個體下的服務。
- 多了虛拟化層,增加一部分計算資源消耗;
- 每個虛拟化執行個體使用單獨的IP,網絡管理上更複雜;
- 手遊業務資料庫虛拟化方案可以考慮KVM結合Docker的方案。
資料庫使用KVM虛拟化方案需要關注下面的幾個要點:
- 服務穩定性,業務的穩定是一切基礎,再好的方案也不能影響業務的穩定,否則都是耍流氓;
- 避免性能瓶頸,資料庫服務主要的瓶頸在于磁盤I/O,好在手遊業務的壓力一般不太大。不過上線前也要做足測試,對潛在的性能需求要有預估。遇到高負載時可直接使用SSD或者PCIe SSD裝置,在KVM虛拟化中也可将SSD直接以裸盤方式挂載到KVM執行個體上。
- 服務可靠性,可從下面兩個方面提升服務可靠性:
1)資料庫層面,可采用主從複制、定期實體&邏輯備份(全備+差異備份)、備份恢複等機制;
2)虛拟化層面,可采用共享存儲、虛拟機快照等。共享存儲優先選擇企業級儲存設備,要注意虛拟機快照并不能保證資料庫的完整性。
資料庫使用Docker技術
資料庫服務基于Docker技術,有效平衡了單機多執行個體以及KVM虛拟化兩種方案,其資源損耗小,又具備虛拟化靈活部署和隔離性等優點。
但目前Docker技術仍有諸多限制:
- 其使用AUFS檔案系統,更容易造成磁盤I/O性能瓶頸(可配置SSD盤緩解I/O壓力);
- Docker的執行個體不支援熱遷移(可和KVM結合,利用KVM實作熱遷移);
- Docker的網絡子產品上也有瓶頸。
上述這些因素決定了目前在Docker裡跑MySQL還有待進一步完善,我們也相信随着Docker技術的不斷改進,這些限制或者瓶頸會越來越少,更适大規模運作MySQL等服務。