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