京東容器化MySQL生產實踐
京東容器數據庫系統,MySQL Docker容器實例達到萬級以上。架構簡單可靠,Docker容器計算平臺與MySQL集群管理平臺解耦處理。為描述方便,京東容器化數據庫系統命名為CM(Containerized MySQL),底層京東Docker容器計算平臺命名為JDOS。
本文重點介紹JDOS如何支持CM。CM是更大的話題,后續數據庫團隊會分享相關實踐。
介紹
CM依賴京東堅實的JDOS技術,MySQL Docker容器實例達到萬級以上。
CM借助JDOS技術優勢獲得主要3個方面的技術收益:
- CM借助Docker容器資源隔離能力,有效支持同一宿主物理機上多MySQL實例直接資源隔離,極大提高數據庫實例部署密度,有效提升資源使用率。
- CM借助Docker容器資源平滑升級能力,方便數據庫實例平滑擴容需求。
- CM借助JDOS平臺資源池化提供管理容器生命周期API能力,實現用戶自助上下線數據庫以及自動化運維。
本文會從架構設計,性能測試等方面說明京東CM落地實踐過程。
整體架構
CM與JDOS解耦,CM負責管理MySQL主從等集群方式的生命周期管理;京東JDOS負責單個MySQL容器實例生命周期管理。
京東Docker容器集群分多Region,多POD部署,且不同集群之間網絡互通,有效支持每個MySQL實例可被業務系統直接調用,確保***的網絡延遲性能。
MySQL集群實例
- 優先級、配額
數據庫cluster根據業務重要性劃分不同的優先級,京東的劃分更加細致,這里我們簡化分2種優先級:核心系統,非核心系統。
云數據庫管理平臺只需要在調用京東JDOS平臺API時候,帶上priority=0,即可表示創建的是核心系統依賴的數據庫。京東JDOS平臺會強制把屬于該cluster的多MySQL實例調度到不同的機架,且不資源“超配”。
底層資源云化和核算成本需求,會針對按事業部配給一定的配額,所在的創建數據庫集群實例成功后,自動從該部門扣除對應的資源值,反之銷毀會歸還配額到部門。
- 監控、告警
數據庫cluster自身DB層面的告警由云數據庫集群平臺提供。涉及到底層計算、網絡、存儲等資源層面的告警,由底層京東Docker容器平臺提供數據給云數據庫集群。
JDOS架構
JDOS是京東統一數據中心計算,網絡,存儲管理平臺。除支持CM外,也支持京東全部的業務系統運行環境。
JDOS系統基于京東扎實的Openstack,Docker等開源技術的持續研發能力,提供穩定,高性能的計算資源平臺。每個組件都是獨立服務部署,采用MQ互相交互信息,京東重構了主要的核心組件服務,使JDOS平臺可以支持更大的集群規模,目前穩定在6K臺物理計算節點。重新設計JDOS升級功能,做到平滑無感知,有效支撐長時間運行容器的穩定性。
JDOS控制節點
JDOS控制節點服務組件,借助Haproxy做PooL模式部署,有效避免單點和負載能力問題。
控制節點3臺物理機,分別跨在不同的機架上,避免Tor交換機,機架電力,服務器等故障影響。
控制節點服務組件混合部署,進一步提升控制節點每個服務組件的高可用和負載能力。
比如計算服務API,鏡像服務API,認證服務API,網絡服務API,存儲服務API進程混部同一臺物理機。
JDOS計算節點
計算節點管理網絡與虛擬化數據網絡使用不同的網口進行隔離,全萬兆網絡環境,對數據庫的網絡環境支持非常好。特別京東在虛擬化網絡技術方向的扎實積累,基本可以做到虛擬化網絡損耗控制在2%以下。
調度
調度架構簡單,負載可擴展。
主要思想是,先一系列filter掉不滿足要求的計算節點,然后打分,***做排序,選擇***并返回調度結果。
- 資源分區調度
按Region,POD,Zone,物理機等4個層面劃分計算區域,調度算法靈活可配確保業務特點與計算硬件環境特點結合適配。如CM的機器全部是SSD的硬盤,所以JDOS會在每個數據中心提供CM SSD Zone的tag,把CM的創建請求優先調度到具有SSD硬盤的計算Zone。
- 親和性和反親和性調度
創建全新數據庫集群實例如一主一層,JDOS調度器會把這2個MySQL容器實例分布到不同的機架。
業務多從庫需求,要求從庫是高性能讀,JDOS調度器會根據performance_slave=True標記,盡可能把從庫創建到網絡繁忙度較小的機架,并與主在相同的物理POD,甚至同一個Tor交換機下面的不同物理機上。
業務增加備份性質的從庫需求,JDOS調度器會根據DB_Cluster_ID=uuid, backup_slave=True標記,強制把從庫創建避免已經有該DB_cluser_ID所在的宿主機,以及機架甚至POD。
- 可擴展性
底層JDOS資源池的擴容性,按使用率,有計劃進行擴容底層物理計算資源。
CM每個庫使用資源的平滑擴容,比如CPU,內存,網絡,磁盤空間均支持平滑擴容功能。
采用直接重置修改cgroup的配置,即可達到平滑擴容的目的。
結合京東設計的cpu set與cpu share并存的資源隔離策略,提升資源使用率。
MySQL實例性能
性能測試環境部署圖
測試環境硬件配置
多容器實例基準測試
測試模型
場景描述
基礎數據為:8個容器,每個容器基礎數據量為1000W(532M),單表加壓,每個表10W行記錄,同時對多個容器發起相同的請求,測試響應情況,并對比同等線程數下物理機的情況。
容器測試數據
物理機數據
穩定性測試
場景描述
單容器1000W基礎數據,單表請求10W數據,8容器并發運行24小時。
性能表現
CPU表現
磁盤表現
網絡表現
【本文來自51CTO專欄作者張開濤的微信公眾號(開濤的博客),公眾號id: kaitao-1234567】