架構(gòu)深度解析:原理、選型與實(shí)踐指南)
1. 存儲(chǔ)架構(gòu)的十字路口集中與分布的本質(zhì)區(qū)別在任何一個(gè)需要處理數(shù)據(jù)的技術(shù)項(xiàng)目里存儲(chǔ)方案的選擇都是一個(gè)繞不開的決策點(diǎn)。這就像蓋房子地基怎么打決定了未來能蓋多高、能住多少人、能承受多大的風(fēng)雨。我經(jīng)歷過不少項(xiàng)目從早期的單體應(yīng)用到后來的微服務(wù)、大數(shù)據(jù)平臺(tái)幾乎每一次技術(shù)架構(gòu)的演進(jìn)都會(huì)把“存儲(chǔ)怎么搞”這個(gè)問題重新擺到桌面上來。今天我們不談那些花哨的營(yíng)銷術(shù)語就從一個(gè)一線工程師的視角掰開揉碎了聊聊集中式存儲(chǔ)和分布式存儲(chǔ)它們到底是怎么回事以及在實(shí)際項(xiàng)目中我們是怎么做選擇的。很多人一聽到“分布式”就覺得先進(jìn)、高大上聽到“集中式”就覺得過時(shí)、老古董。這其實(shí)是個(gè)很大的誤解。技術(shù)選型沒有絕對(duì)的好壞只有是否適合。集中式存儲(chǔ)就像一個(gè)超級(jí)圖書館所有的書數(shù)據(jù)都放在一個(gè)巨大的、管理完善的建筑里有專業(yè)的圖書管理員存儲(chǔ)控制器負(fù)責(zé)編目、上架、借閱。而分布式存儲(chǔ)則像是一個(gè)社區(qū)圖書交換網(wǎng)絡(luò)每家每戶服務(wù)器節(jié)點(diǎn)都拿出自己的一部分書架共同組成一個(gè)龐大的圖書池大家共同維護(hù)這個(gè)網(wǎng)絡(luò)。前者強(qiáng)在管理和效率后者勝在規(guī)模和韌性。理解這個(gè)本質(zhì)區(qū)別是做出正確決策的第一步。2. 集中式存儲(chǔ)經(jīng)典架構(gòu)的深度剖析與適用場(chǎng)景集中式存儲(chǔ)并不是一個(gè)過時(shí)的概念相反它在許多對(duì)性能、一致性和管理便利性要求極高的場(chǎng)景下依然是無可替代的基石。它的核心思想非常簡(jiǎn)單將所有的存儲(chǔ)資源硬盤集中在一個(gè)或少數(shù)幾個(gè)物理設(shè)備中通過一個(gè)統(tǒng)一的、強(qiáng)大的“大腦”存儲(chǔ)控制器來管理所有的數(shù)據(jù)讀寫、備份、快照等操作。2.1 核心架構(gòu)與工作原理一個(gè)典型的集中式存儲(chǔ)系統(tǒng)比如我們常見的高端SAN存儲(chǔ)區(qū)域網(wǎng)絡(luò)陣列或NAS網(wǎng)絡(luò)附加存儲(chǔ)設(shè)備其內(nèi)部可以看作是一個(gè)高度集成和優(yōu)化的“數(shù)據(jù)堡壘”。它的核心組件通常包括雙控制器或多控制器這是存儲(chǔ)陣列的“大腦”和“心臟”??刂破髫?fù)責(zé)執(zhí)行所有的IO輸入/輸出處理、RAID獨(dú)立磁盤冗余陣列計(jì)算、緩存管理以及與其他服務(wù)器的通信。采用雙控制器甚至多控制器是為了實(shí)現(xiàn)高可用性HA當(dāng)一個(gè)控制器故障時(shí)另一個(gè)可以無縫接管業(yè)務(wù)不會(huì)中斷。控制器本身通常擁有強(qiáng)大的多核CPU和大量的高速緩存從幾十GB到數(shù)TB不等這些緩存用于加速讀寫操作。前端端口負(fù)責(zé)與外部服務(wù)器稱為主機(jī)連接。根據(jù)協(xié)議不同可以是FC光纖通道端口、iSCSI互聯(lián)網(wǎng)小型計(jì)算機(jī)系統(tǒng)接口端口或NAS協(xié)議端口如NFS、CIFS/SMB。這些端口的速度決定了服務(wù)器訪問存儲(chǔ)的帶寬上限。后端磁盤柜與磁盤這是數(shù)據(jù)最終存放的物理介質(zhì)。磁盤通過SAS串行連接SCSI或SATA串行ATA等高速通道連接到控制器。磁盤柜可以級(jí)聯(lián)從而提供海量的存儲(chǔ)空間。磁盤的類型SSD固態(tài)硬盤、SAS機(jī)械硬盤、NL-SAS近線硬盤和RAID級(jí)別的配置如RAID 5, RAID 6, RAID 10直接決定了存儲(chǔ)的性能、容量和可靠性。存儲(chǔ)操作系統(tǒng)運(yùn)行在控制器上的專用軟件。它提供了LUN邏輯單元號(hào)創(chuàng)建、卷管理、快照、克隆、遠(yuǎn)程復(fù)制、精簡(jiǎn)配置、自動(dòng)分層等高級(jí)功能。這套系統(tǒng)經(jīng)過廠商深度優(yōu)化穩(wěn)定性和效率極高。當(dāng)一臺(tái)服務(wù)器需要讀寫數(shù)據(jù)時(shí)流程是這樣的服務(wù)器的HBA卡主機(jī)總線適配器通過FC或以太網(wǎng)網(wǎng)絡(luò)向存儲(chǔ)陣列的前端端口發(fā)起IO請(qǐng)求。存儲(chǔ)控制器接收到請(qǐng)求后先在自身的緩存中查找數(shù)據(jù)讀緩存命中則直接返回極快若未命中則通過后端通道訪問具體的硬盤進(jìn)行數(shù)據(jù)讀取或?qū)懭氩⒖赡芨戮彺妗U麄€(gè)過程由控制器全權(quán)調(diào)度和管理。2.2 集中式存儲(chǔ)的四大核心優(yōu)勢(shì)為什么在很多關(guān)鍵業(yè)務(wù)系統(tǒng)中我們依然首選集中式存儲(chǔ)因?yàn)樗峁┝朔植际酱鎯?chǔ)在短期內(nèi)難以匹敵的幾點(diǎn)確定性極致的性能與低延遲得益于強(qiáng)大的專用硬件控制器和集中的高速緩存集中式存儲(chǔ)能夠提供極其穩(wěn)定且低延遲的IO性能。對(duì)于OLTP在線事務(wù)處理數(shù)據(jù)庫(kù)如Oracle RAC, SQL Server、VDI虛擬桌面基礎(chǔ)架構(gòu)等高IOPS每秒輸入輸出操作次數(shù)和低延遲要求的場(chǎng)景高端全閃存陣列幾乎是唯一的選擇。它的性能上限明確且可以通過增加控制器緩存、使用更快的SSD來線性提升。強(qiáng)大的數(shù)據(jù)服務(wù)與一致性由于所有數(shù)據(jù)都經(jīng)由同一個(gè)或一組協(xié)同工作的控制器處理它天然保證了數(shù)據(jù)的強(qiáng)一致性。高級(jí)功能如秒級(jí)快照、零窗口的數(shù)據(jù)備份、跨數(shù)據(jù)中心的同步/異步容災(zāi)如EMC SRDF, IBM Metro Mirror其實(shí)現(xiàn)邏輯相對(duì)簡(jiǎn)單可靠。這些功能對(duì)于金融、電信等行業(yè)的核心交易系統(tǒng)至關(guān)重要。簡(jiǎn)化的管理與運(yùn)維你面對(duì)的是一個(gè)“盒子”。所有的配置、監(jiān)控、告警、升級(jí)都可以通過一個(gè)統(tǒng)一的管理界面GUI或CLI完成。擴(kuò)容通常只是往磁盤柜里插入新硬盤或者增加新的磁盤柜然后在前端界面點(diǎn)擊幾下即可。故障排查也相對(duì)集中硬件故障定位明確換硬盤、換控制器模塊。成熟與可靠集中式存儲(chǔ)經(jīng)過數(shù)十年的發(fā)展技術(shù)極其成熟。從硬件設(shè)計(jì)全冗余電源、風(fēng)扇、鏈路到軟件算法RAID 6的雙重校驗(yàn)、掉電保護(hù)緩存其可靠性已經(jīng)達(dá)到了“五個(gè)9”99.999%甚至更高的水平。廠商提供全面的技術(shù)支持和服務(wù)這是很多企業(yè)特別是傳統(tǒng)行業(yè)非常看重的。2.3 無法回避的挑戰(zhàn)與痛點(diǎn)當(dāng)然集中式存儲(chǔ)的“集中”也帶來了其固有的天花板單點(diǎn)故障風(fēng)險(xiǎn)雖然控制器、電源、鏈路都是冗余的但整個(gè)存儲(chǔ)陣列作為一個(gè)物理實(shí)體仍然存在站點(diǎn)級(jí)的單點(diǎn)故障風(fēng)險(xiǎn)。一個(gè)數(shù)據(jù)中心斷電、火災(zāi)或網(wǎng)絡(luò)中斷就會(huì)導(dǎo)致存儲(chǔ)完全不可用。解決這個(gè)問題需要配置價(jià)格極其昂貴的跨數(shù)據(jù)中心同步復(fù)制方案。擴(kuò)展性瓶頸縱向擴(kuò)展Scale-Up是其主要方式。當(dāng)性能或容量達(dá)到單個(gè)陣列的物理上限時(shí)例如控制器CPU瓶頸、前端端口帶寬瓶頸擴(kuò)展就變得非常困難和昂貴通常需要更換成更大型號(hào)的陣列數(shù)據(jù)遷移過程復(fù)雜且風(fēng)險(xiǎn)高。高昂的成本這不僅僅是硬件采購(gòu)成本還包括軟件許可很多高級(jí)功能按容量收費(fèi)、后續(xù)的維保服務(wù)費(fèi)用通常按設(shè)備原價(jià)百分比計(jì)算且逐年累積。對(duì)于海量數(shù)據(jù)PB級(jí)場(chǎng)景成本會(huì)成為不可承受之重。供應(yīng)商鎖定一旦選擇了某個(gè)廠商的集中式存儲(chǔ)你的數(shù)據(jù)格式、管理工具、復(fù)制技術(shù)都深度綁定于此廠商。未來更換供應(yīng)商的遷移成本和風(fēng)險(xiǎn)極高。3. 分布式存儲(chǔ)云原生時(shí)代的基石與原理解構(gòu)分布式存儲(chǔ)的興起與互聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)的發(fā)展密不可分。當(dāng)數(shù)據(jù)量從TB級(jí)躍升至PB、EB級(jí)當(dāng)應(yīng)用從單體轉(zhuǎn)向微服務(wù)當(dāng)基礎(chǔ)設(shè)施要求能夠跨地域、跨云部署時(shí)集中式存儲(chǔ)的架構(gòu)就顯得力不從心了。分布式存儲(chǔ)的核心思想是“化整為零聚沙成塔”。3.1 核心設(shè)計(jì)哲學(xué)與常見架構(gòu)分布式存儲(chǔ)沒有一個(gè)統(tǒng)一的硬件形態(tài)它是一套運(yùn)行在標(biāo)準(zhǔn)商用服務(wù)器X86服務(wù)器上的軟件定義存儲(chǔ)SDS系統(tǒng)。其核心設(shè)計(jì)哲學(xué)包括無中心架構(gòu)沒有專用的“控制器大腦”。所有服務(wù)器節(jié)點(diǎn)Node在邏輯上是對(duì)等的每個(gè)節(jié)點(diǎn)既提供存儲(chǔ)空間也承擔(dān)一部分?jǐn)?shù)據(jù)管理和服務(wù)功能。數(shù)據(jù)分片與冗余一份文件不會(huì)被完整地存在一個(gè)節(jié)點(diǎn)上而是被切分成多個(gè)固定大小的數(shù)據(jù)塊Chunk或Shard這些數(shù)據(jù)塊通過一致性哈希等算法分散存儲(chǔ)到集群中的多個(gè)不同節(jié)點(diǎn)上。同時(shí)為了容錯(cuò)每個(gè)數(shù)據(jù)塊會(huì)復(fù)制多份通常是3副本或使用糾刪碼Erasure Coding, EC編碼后分散存儲(chǔ)。這樣即使同時(shí)損壞多個(gè)節(jié)點(diǎn)數(shù)量在冗余策略允許范圍內(nèi)數(shù)據(jù)也不會(huì)丟失。元數(shù)據(jù)與數(shù)據(jù)分離為了高效管理海量文件需要記錄每個(gè)文件的塊分布信息即元數(shù)據(jù)。有的架構(gòu)使用獨(dú)立的元數(shù)據(jù)服務(wù)器集群如HDFS的NameNode Ceph的早期Monitors有的則將元數(shù)據(jù)也分布式存儲(chǔ)如Ceph的CRUSH算法動(dòng)態(tài)計(jì)算。目前主流的開源分布式存儲(chǔ)系統(tǒng)如Ceph、GlusterFS、MinIO 以及各大云廠商的對(duì)象存儲(chǔ)服務(wù)如AWS S3都遵循以上原則但在實(shí)現(xiàn)細(xì)節(jié)和側(cè)重點(diǎn)上有所不同。以Ceph為例它是一個(gè)非常典型的統(tǒng)一分布式存儲(chǔ)系統(tǒng)其核心是RADOS可靠的自主分布式對(duì)象存儲(chǔ)。在Ceph里數(shù)據(jù)最終都以對(duì)象Object的形式存儲(chǔ)在OSD對(duì)象存儲(chǔ)守護(hù)進(jìn)程節(jié)點(diǎn)上每個(gè)OSD對(duì)應(yīng)一塊硬盤。一個(gè)文件被切分成多個(gè)對(duì)象。這些對(duì)象歸屬于某個(gè)PG歸置組PG是數(shù)據(jù)遷移和復(fù)制的基本單位。CRUSH算法根據(jù)集群的實(shí)時(shí)拓?fù)鋱D由Monitor節(jié)點(diǎn)維護(hù)動(dòng)態(tài)計(jì)算出每個(gè)PG應(yīng)該分布在哪些OSD上從而避免了中心化的元數(shù)據(jù)查詢瓶頸。客戶端通過計(jì)算而非查詢就能直接知道數(shù)據(jù)在哪然后直接與對(duì)應(yīng)的OSD通信進(jìn)行讀寫。3.2 分布式存儲(chǔ)的顛覆性優(yōu)勢(shì)分布式存儲(chǔ)的優(yōu)勢(shì)正是針對(duì)集中式存儲(chǔ)的痛點(diǎn)而生近乎無限的橫向擴(kuò)展能力這是其最核心的優(yōu)勢(shì)。當(dāng)需要增加容量或性能時(shí)只需向集群中添加新的標(biāo)準(zhǔn)服務(wù)器節(jié)點(diǎn)即可。新節(jié)點(diǎn)加入后集群會(huì)自動(dòng)進(jìn)行數(shù)據(jù)重平衡將一部分?jǐn)?shù)據(jù)遷移到新節(jié)點(diǎn)上使負(fù)載和容量均勻分布。這個(gè)過程可以在線進(jìn)行對(duì)業(yè)務(wù)幾乎無感知。理論上只要網(wǎng)絡(luò)允許可以擴(kuò)展到成千上萬個(gè)節(jié)點(diǎn)。極高的可靠性與可用性數(shù)據(jù)多副本或糾刪碼跨節(jié)點(diǎn)、跨機(jī)架、甚至跨數(shù)據(jù)中心存放。任何單個(gè)節(jié)點(diǎn)、甚至整個(gè)機(jī)架的故障都不會(huì)導(dǎo)致數(shù)據(jù)丟失或服務(wù)中斷。系統(tǒng)會(huì)自動(dòng)檢測(cè)故障并在健康的節(jié)點(diǎn)上重建丟失的數(shù)據(jù)副本。其可靠性由軟件算法和集群規(guī)模保證而非單個(gè)硬件設(shè)備的可靠性。出色的成本效益基于廉價(jià)的商用硬件和開源軟件構(gòu)建硬件成本遠(yuǎn)低于高端存儲(chǔ)陣列。擴(kuò)容時(shí)按需增加服務(wù)器初始投資和后續(xù)擴(kuò)容成本都更加線性和平滑。軟件通常是開源或訂閱制避免了天價(jià)的許可和維保費(fèi)用。架構(gòu)靈活性與云原生親和分布式存儲(chǔ)沒有硬件形態(tài)綁定可以部署在物理機(jī)、虛擬機(jī)、私有云或公有云上。它通常提供標(biāo)準(zhǔn)化的訪問接口如對(duì)象存儲(chǔ)的S3 API、塊存儲(chǔ)的iSCSI/RBD、文件存儲(chǔ)的NFS/CIFS能夠無縫對(duì)接Kubernetes等云原生平臺(tái)實(shí)現(xiàn)存儲(chǔ)的動(dòng)態(tài)供給StorageClass非常適合微服務(wù)、容器化應(yīng)用。3.3 現(xiàn)實(shí)世界的挑戰(zhàn)與妥協(xié)分布式存儲(chǔ)并非銀彈它在帶來擴(kuò)展性和成本優(yōu)勢(shì)的同時(shí)也引入了一系列新的復(fù)雜性性能的波動(dòng)性與一致性模型由于數(shù)據(jù)跨網(wǎng)絡(luò)多次傳輸客戶端-主副本-從副本其延遲通常高于本地SSD或全閃存陣列。在集群負(fù)載高、網(wǎng)絡(luò)抖動(dòng)或數(shù)據(jù)重平衡時(shí)性能可能出現(xiàn)波動(dòng)。另外為了在高并發(fā)下保證可用性許多分布式存儲(chǔ)采用最終一致性模型這對(duì)于要求強(qiáng)一致性的數(shù)據(jù)庫(kù)類應(yīng)用是個(gè)挑戰(zhàn)雖然Ceph RBD等可以提供強(qiáng)一致性但代價(jià)是性能。運(yùn)維復(fù)雜度陡增你管理的不是一個(gè)“盒子”而是一個(gè)由數(shù)十上百臺(tái)服務(wù)器組成的“生態(tài)系統(tǒng)”。軟件版本升級(jí)、節(jié)點(diǎn)故障處理、容量規(guī)劃、性能調(diào)優(yōu)涉及網(wǎng)絡(luò)、磁盤、內(nèi)存、CPU多個(gè)層面的復(fù)雜度遠(yuǎn)超集中式存儲(chǔ)。需要團(tuán)隊(duì)具備更強(qiáng)的Linux系統(tǒng)、網(wǎng)絡(luò)和該存儲(chǔ)系統(tǒng)本身的專業(yè)知識(shí)?!奥P”等灰色故障的影響在集中式存儲(chǔ)里一塊硬盤響應(yīng)慢控制器可以很快將其標(biāo)記為故障并踢出RAID組。在分布式存儲(chǔ)如Ceph中一個(gè)OSD節(jié)點(diǎn)上的某塊硬盤變慢但未完全宕機(jī)會(huì)導(dǎo)致整個(gè)PG的讀寫操作被拖慢影響面可能很廣。檢測(cè)和處理這類“灰色故障”非常棘手。數(shù)據(jù)修復(fù)的帶寬風(fēng)暴當(dāng)一個(gè)節(jié)點(diǎn)故障后集群需要從其他副本中重建數(shù)據(jù)到新節(jié)點(diǎn)。這個(gè)過程會(huì)產(chǎn)生大量的網(wǎng)絡(luò)流量。如果集群規(guī)模大、數(shù)據(jù)量大重建過程可能持續(xù)數(shù)天期間會(huì)占用大量生產(chǎn)網(wǎng)絡(luò)帶寬影響正常業(yè)務(wù)IO。需要精心設(shè)計(jì)網(wǎng)絡(luò)架構(gòu)如分離前端業(yè)務(wù)網(wǎng)絡(luò)和后端存儲(chǔ)網(wǎng)絡(luò)和設(shè)置重建速度限制。4. 實(shí)戰(zhàn)選型指南從需求出發(fā)的決策框架了解了兩種架構(gòu)的底層邏輯和優(yōu)缺點(diǎn)后我們?cè)撊绾芜x擇我總結(jié)了一個(gè)從實(shí)際項(xiàng)目需求出發(fā)的四層決策框架它比單純對(duì)比技術(shù)參數(shù)更有用。4.1 第一層業(yè)務(wù)需求定性首先問幾個(gè)最根本的業(yè)務(wù)問題數(shù)據(jù)特征是什么是海量的圖片、視頻、日志等“溫冷”數(shù)據(jù)適合對(duì)象存儲(chǔ)還是虛擬機(jī)磁盤、數(shù)據(jù)庫(kù)文件這類需要頻繁隨機(jī)讀寫的“熱”數(shù)據(jù)需要塊存儲(chǔ)或高性能文件存儲(chǔ)性能要求到底多高量化指標(biāo)需要多少IOPS平均延遲和尾延遲P99 P999要求是多少帶寬要求多大是否有突發(fā)的性能需求一致性要求多強(qiáng)是像銀行交易一樣要求強(qiáng)一致性還是像社交網(wǎng)站點(diǎn)贊數(shù)可以接受最終一致性擴(kuò)展性預(yù)期如何未來1-3年數(shù)據(jù)量預(yù)計(jì)增長(zhǎng)多少是平穩(wěn)增長(zhǎng)還是可能爆發(fā)式增長(zhǎng)RTO恢復(fù)時(shí)間目標(biāo)與RPO恢復(fù)點(diǎn)目標(biāo)是多少系統(tǒng)允許宕機(jī)多久允許丟失多少數(shù)據(jù)4.2 第二層技術(shù)架構(gòu)匹配根據(jù)業(yè)務(wù)需求看哪種存儲(chǔ)架構(gòu)更匹配當(dāng)前和未來的技術(shù)棧傳統(tǒng)虛擬化環(huán)境VMware, Hyper-V如果運(yùn)行的是傳統(tǒng)的企業(yè)應(yīng)用ERP, CRM, 核心數(shù)據(jù)庫(kù)且對(duì)性能穩(wěn)定性要求極高集中式SAN存儲(chǔ)特別是全閃存陣列仍然是主流和穩(wěn)妥的選擇其與vSphere等平臺(tái)的集成度也最深。云原生/容器化環(huán)境Kubernetes這是分布式存儲(chǔ)的主場(chǎng)。需要為有狀態(tài)應(yīng)用StatefulSet提供動(dòng)態(tài)、可擴(kuò)展的持久化存儲(chǔ)。Ceph RBD/CephFS、基于Ceph的Rook 或者直接使用云廠商的塊存儲(chǔ)服務(wù)是更自然的選擇。大數(shù)據(jù)/AI分析平臺(tái)Hadoop, Spark海量非結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)首選對(duì)象存儲(chǔ)如Ceph RGW、MinIO或HDFS。它們成本低、擴(kuò)展易與計(jì)算框架結(jié)合緊密。混合云/多云戰(zhàn)略如果需要數(shù)據(jù)在私有云和公有云之間流動(dòng)或者避免被單一云廠商鎖定采用標(biāo)準(zhǔn)S3接口的分布式對(duì)象存儲(chǔ)如Ceph構(gòu)建私有存儲(chǔ)資源池是一個(gè)重要的戰(zhàn)略考量。4.3 第三層成本與團(tuán)隊(duì)評(píng)估這是讓技術(shù)決策落地的現(xiàn)實(shí)因素總擁有成本不僅要算硬件采購(gòu)價(jià)更要算3-5年內(nèi)的軟件許可、維保、電費(fèi)、機(jī)房空間、升級(jí)擴(kuò)容成本。分布式存儲(chǔ)的硬件成本低但可能帶來更高的人力成本。團(tuán)隊(duì)技能棧你的運(yùn)維團(tuán)隊(duì)更熟悉像管理家電一樣管理存儲(chǔ)陣列還是更擅長(zhǎng)用Ansible、Terraform編排和維護(hù)一個(gè)由上百臺(tái)服務(wù)器組成的分布式系統(tǒng)引入新技術(shù)帶來的學(xué)習(xí)成本和潛在風(fēng)險(xiǎn)必須考慮。供應(yīng)商與生態(tài)集中式存儲(chǔ)有明確的一線廠商如Dell EMC, NetApp, IBM和其服務(wù)體系。分布式存儲(chǔ)則更多依賴社區(qū)、開源發(fā)行版廠商如Red Hat Ceph或云廠商的支持。你需要評(píng)估哪種支持模式更適合你的組織。4.4 第四層混合與分層策略在實(shí)際的大型企業(yè)環(huán)境中非此即彼的選擇越來越少混合架構(gòu)成為常態(tài)。一個(gè)常見的策略是核心層性能敏感型使用集中式全閃存陣列承載核心數(shù)據(jù)庫(kù)、ERP等關(guān)鍵業(yè)務(wù)滿足其極致的低延遲和高IOPS需求。資源池層通用與擴(kuò)展型使用分布式存儲(chǔ)Ceph構(gòu)建一個(gè)統(tǒng)一的存儲(chǔ)資源池為開發(fā)測(cè)試環(huán)境、虛擬機(jī)、容器平臺(tái)、文件共享服務(wù)提供存儲(chǔ)滿足其彈性擴(kuò)展和成本控制的需求。歸檔與備份層容量型使用分布式對(duì)象存儲(chǔ)或磁帶庫(kù)存放備份數(shù)據(jù)、歷史歸檔數(shù)據(jù)、日志等訪問頻率低但容量需求巨大的數(shù)據(jù)。通過存儲(chǔ)虛擬化網(wǎng)關(guān)或云存儲(chǔ)網(wǎng)關(guān)甚至可以在上層應(yīng)用視角整合這些不同的存儲(chǔ)后端提供統(tǒng)一的訪問接口和管理界面。5. 從理論到實(shí)踐一次真實(shí)的存儲(chǔ)遷移踩坑記紙上得來終覺淺我分享一個(gè)幾年前的真實(shí)案例。當(dāng)時(shí)我們需要將一個(gè)運(yùn)行在老舊FC-SAN上的視頻管理平臺(tái)遷移到新的基于Ceph的分布式存儲(chǔ)上以支持更大的存儲(chǔ)規(guī)模和更高的并發(fā)訪問。項(xiàng)目目標(biāo)是明確的但過程充滿了“坑”。5.1 規(guī)劃階段的“理想化”評(píng)估最初我們做了標(biāo)準(zhǔn)的評(píng)估Ceph集群采用10GbE網(wǎng)絡(luò)每個(gè)OSD節(jié)點(diǎn)配置12塊HDD和2塊SSD做緩存。通過Ceph自帶的rados bench工具測(cè)試得到的順序讀寫帶寬和IOPS數(shù)據(jù)看起來完全能滿足業(yè)務(wù)需求。我們樂觀地認(rèn)為遷移就是通過存儲(chǔ)網(wǎng)關(guān)做塊設(shè)備鏡像同步的事情。注意分布式存儲(chǔ)的基準(zhǔn)測(cè)試工具如rados bench通常測(cè)試的是最佳情況下的集群內(nèi)部性能它忽略了客戶端協(xié)議轉(zhuǎn)換、網(wǎng)絡(luò)開銷、以及真實(shí)業(yè)務(wù)訪問模式混合隨機(jī)讀寫、元數(shù)據(jù)操作密集的影響。直接用這個(gè)數(shù)據(jù)對(duì)標(biāo)生產(chǎn)業(yè)務(wù)性能是第一個(gè)大坑。5.2 遷移過程中的性能“跳水”當(dāng)我們開始將第一個(gè)非核心業(yè)務(wù)的虛擬機(jī)磁盤通過iSCSI掛載Ceph RBD遷移過來后問題立刻出現(xiàn)了。業(yè)務(wù)方反饋視頻點(diǎn)播的加載速度時(shí)快時(shí)慢監(jiān)控顯示VM的磁盤延遲波動(dòng)極大從幾毫秒到幾百毫秒不等P99延遲非常高。排查過程如下首先懷疑網(wǎng)絡(luò)我們檢查了交換機(jī)端口計(jì)數(shù)沒有錯(cuò)包和擁塞。使用iperf測(cè)試節(jié)點(diǎn)間帶寬也正常。排除了基礎(chǔ)網(wǎng)絡(luò)問題。檢查Ceph集群健康狀態(tài)ceph -s顯示集群是HEALTH_OK所有OSD都在線。但ceph osd perf命令顯示有幾個(gè)OSD的commit latency提交延遲明顯高于其他節(jié)點(diǎn)。定位到“慢盤”進(jìn)一步登錄到高延遲的OSD節(jié)點(diǎn)使用iostat -x 1查看磁盤利用率。發(fā)現(xiàn)其中一塊HDD的util長(zhǎng)期接近100%await平均等待時(shí)間高達(dá)上百毫秒。這是一塊即將故障的“慢盤”。由于Ceph的CRUSH算法PG是均勻分布的任何一個(gè)包含該慢盤上PG的讀寫操作都會(huì)因?yàn)榈却@個(gè)慢盤而整體變慢。元數(shù)據(jù)瓶頸視頻業(yè)務(wù)的特點(diǎn)是海量小文件每個(gè)視頻片段。在通過文件系統(tǒng)如EXT4/XFS訪問RBD塊設(shè)備時(shí)大量的文件創(chuàng)建、刪除、查找操作會(huì)轉(zhuǎn)化為大量的隨機(jī)小IO。而HDD最不擅長(zhǎng)的就是隨機(jī)小IO。雖然我們用了SSD做緩存Ceph的Cache Tiering但緩存淘汰策略和元數(shù)據(jù)操作本身仍然給HDD層帶來了巨大壓力。5.3 調(diào)整與優(yōu)化對(duì)癥下藥找到原因后我們進(jìn)行了針對(duì)性調(diào)整硬件層面立即更換故障的“慢盤”。并重新審視硬件配置對(duì)于性能敏感的業(yè)務(wù)池后續(xù)節(jié)點(diǎn)全部采用全閃存配置SSD甚至NVMe SSD徹底告別HDD的隨機(jī)IO瓶頸。這是成本與性能的權(quán)衡但對(duì)于核心業(yè)務(wù)這筆投資是值得的。Ceph配置優(yōu)化設(shè)置osd_recovery_max_active和osd_max_backfills限制故障恢復(fù)和回填的并發(fā)度避免其占滿網(wǎng)絡(luò)和磁盤帶寬影響前臺(tái)業(yè)務(wù)。調(diào)整filestore相關(guān)參數(shù)當(dāng)時(shí)我們用的還是Filestore。我們優(yōu)化了journal的配置確保journal所在SSD的性能和可靠性。如果是現(xiàn)在我會(huì)直接選擇Bluestore后端它專為SSD設(shè)計(jì)性能更好延遲更穩(wěn)定。使用更快的網(wǎng)絡(luò)將業(yè)務(wù)網(wǎng)絡(luò)前端網(wǎng)絡(luò)和集群內(nèi)部復(fù)制網(wǎng)絡(luò)后端網(wǎng)絡(luò)物理分離并使用更高帶寬的網(wǎng)卡如25GbE或100GbE減少網(wǎng)絡(luò)競(jìng)爭(zhēng)。業(yè)務(wù)架構(gòu)適配與開發(fā)團(tuán)隊(duì)溝通將視頻文件的元數(shù)據(jù)如索引、描述信息與內(nèi)容數(shù)據(jù)分離。元數(shù)據(jù)存入一個(gè)高性能的獨(dú)立數(shù)據(jù)庫(kù)甚至可以考慮用集中式全閃存陣列支撐而海量的視頻塊數(shù)據(jù)則存入Ceph對(duì)象存儲(chǔ)RGW或?qū)iT優(yōu)化過的文件存儲(chǔ)池。這樣各取所長(zhǎng)避免了混合負(fù)載的相互干擾。這次遷移給我的核心教訓(xùn)是存儲(chǔ)選型不是簡(jiǎn)單的性能數(shù)字對(duì)比而是對(duì)業(yè)務(wù)IO模型數(shù)據(jù)模型、訪問模式、一致性要求的深度理解并與存儲(chǔ)系統(tǒng)自身特性硬件配置、軟件參數(shù)、最佳實(shí)踐進(jìn)行匹配的過程。分布式存儲(chǔ)給了我們巨大的靈活性和擴(kuò)展性但也要求我們以更精細(xì)化的方式去管理和調(diào)優(yōu)它。它更像一個(gè)需要精心照料的花園而不是一個(gè)插電即用的家電。