生產(chǎn)環(huán)境下把數(shù)據(jù)庫裝進(jìn) Docker,靠譜嗎?
說到底,大佬們反對(duì)在生產(chǎn)里容器化數(shù)據(jù)庫,并不是因?yàn)樗麄儗?duì)新技術(shù)有“宗教”般的偏見,而是因?yàn)槟切翱印庇稚钣侄啵捍鎯?chǔ)驅(qū)動(dòng)會(huì)翻車、I/O性能要打折、數(shù)據(jù)持久化隨時(shí)說拜拜、網(wǎng)絡(luò)橋接讓延遲跑來打招呼,監(jiān)控和 DBA協(xié)作也變得像是把“解魔方”和“玩接力”合二為一。
一、存儲(chǔ)驅(qū)動(dòng):深坑浮沉錄
1. 驅(qū)動(dòng)一掛,數(shù)據(jù)就散
Docker常用的Overlay2、AUFS等存儲(chǔ)驅(qū)動(dòng),在高并發(fā)寫入下偶爾會(huì)“內(nèi)核熊抱”(kernel panic),一不留神就把數(shù)據(jù)庫文件系統(tǒng)搞崩潰,讓你懷疑人生。
2. Volume 掛載也有“玻璃心”
即使你乖乖用 Volume、Bind Mount,跨主機(jī)的NFS或云盤也可能鬧“網(wǎng)絡(luò)抖動(dòng)焦慮癥”,一會(huì)同步成功、一會(huì)兒又恍若失憶,數(shù)據(jù)一致性得自行加“打地鼠”玩法才能保證。
二、I/O性能:內(nèi)核調(diào)皮癥發(fā)作
1. “虛擬化開銷”那點(diǎn)事
數(shù)據(jù)庫是I/O大胃王,Docker的文件系統(tǒng)與網(wǎng)絡(luò)虛擬化會(huì)帶來5%~15%左右的性能損耗,讓你在高峰期忍不住想把容器給“踢出門”
2. 網(wǎng)絡(luò)橋接的“馬拉松”
默認(rèn)的Docker bridge網(wǎng)絡(luò)要經(jīng)過一層NAT,數(shù)據(jù)庫節(jié)點(diǎn)互聯(lián)或客戶端訪問都得繞個(gè)大彎,稍微對(duì)時(shí)延敏感,就能讓事務(wù)性能像蝸牛賽跑,削足適履真心有點(diǎn)尷尬
三、運(yùn)維復(fù)雜度:從“輕松”到“魔塔”
1. “三合一”監(jiān)控挑戰(zhàn)
為了確保一切運(yùn)行順暢,讓你能夠安心休息,建議將Prometheus、cAdvisor與pg_stat_statements及performance_schema結(jié)合起來使用。這樣,你就可以全面監(jiān)控宿主機(jī)、容器進(jìn)程以及數(shù)據(jù)庫的內(nèi)部指標(biāo)了。這樣一來,即使遇到問題也能及時(shí)發(fā)現(xiàn)并解決,避免小問題變成大麻煩哦。
2. DBA 同學(xué)表示“不開心”
傳統(tǒng)DBA負(fù)責(zé)一個(gè) “實(shí)體機(jī)+專業(yè)存儲(chǔ)”的堡壘,而現(xiàn)在 DevOps “狂擼容器”,權(quán)限、流程和工具鏈全亂成一鍋粥——DBA 同學(xué)想做事都要先跟 DevOps 打招呼,感覺自己變成了“運(yùn)維二號(hào)”
四、總結(jié)
把數(shù)據(jù)庫裝進(jìn) Docker,還不如請(qǐng)個(gè)財(cái)神爺來管。
容器化確實(shí)給微服務(wù)帶來自由與彈性,但數(shù)據(jù)庫這類“重裝甲”裝備,給它套上Docker-boots之前,請(qǐng)務(wù)必三思:
- 你的存儲(chǔ)驅(qū)動(dòng)穩(wěn)不穩(wěn)?
- 性能損耗能不能接受?
- 運(yùn)維監(jiān)控有無“滿血”方案?
- DBA 和開發(fā)/運(yùn)維能否和諧共舞?
- 備份和高可用策略是否落地?
如果答案都“OK”,恭喜你!但多數(shù)人還是——不如開 VM,或上云托管服務(wù),畢竟靠譜和省心才是生產(chǎn)環(huán)境的終極追求。