好久沒(méi)有寫(xiě)文章了鹤竭。今天的主角FastCFS讓我有興致拿起鍵盤(pán)太闺,向大家來(lái)推薦它。
FastCFS項(xiàng)目背景介紹
FastCFS 項(xiàng)目在gitee和github上同時(shí)開(kāi)源蝴韭,地址分別為:-
作者是存儲(chǔ)系統(tǒng)方面的大佬余慶老師咏尝,如果你對(duì)FastCFS不熟悉,但是FastDFS我相信大家都耳熟能詳褂傀,F(xiàn)astDFS作為一款分布式對(duì)象存儲(chǔ)系統(tǒng)忍啤,以開(kāi)源、簡(jiǎn)潔仙辟、易用同波、高性能而著稱,像一股清流深受大家喜歡叠国。
說(shuō)回今天的主角FastCFS未檩。
當(dāng)前,云原生已經(jīng)成為應(yīng)用開(kāi)發(fā)者在選擇架構(gòu)設(shè)計(jì)時(shí)的首選粟焊,Kubernetes(以下簡(jiǎn)稱k8s)逐漸成為云原生時(shí)代的基礎(chǔ)設(shè)施冤狡,熟悉k8s的同學(xué)都知道k8s中網(wǎng)絡(luò)和存儲(chǔ)是兩大難點(diǎn)。
特別是支持云原生的存儲(chǔ)系統(tǒng)项棠,大家在選擇的時(shí)候都沒(méi)有比較好的解決方案悲雳,商業(yè)話的存儲(chǔ)買(mǎi)不起,開(kāi)源的云原生存儲(chǔ)要么性能達(dá)不到要求香追,要么運(yùn)維復(fù)雜合瓢,并且基本上都是不是國(guó)人開(kāi)發(fā)的,比如:Ceph透典,OpenEBS晴楔,Longhorn等。
在這樣的背景下峭咒,F(xiàn)astCFS在余慶老師團(tuán)隊(duì)努力下橫空出世税弃。
私底下問(wèn)了余老師,這個(gè)項(xiàng)目他2020年1月份全職開(kāi)發(fā)讹语,到現(xiàn)在已經(jīng)有兩年了時(shí)間了钙皮。在現(xiàn)在這樣的社會(huì)環(huán)境下,余老師不忘初心的做法確實(shí)令人由衷的敬佩,忍不住想給他點(diǎn)贊短条。FastCFS秉承了fastDFS的氣質(zhì):簡(jiǎn)潔导匣、開(kāi)源、高性能茸时、支持云原生贡定,關(guān)鍵是符合中國(guó)人的使用習(xí)慣,好交流(有需求或建議直接用中文撩他可都,哈哈)缓待。
FastCFS 介紹
官方的一句話介紹是:
可以跑數(shù)據(jù)庫(kù)的高性能通用分布式文件系統(tǒng)
不過(guò)我覺(jué)得更準(zhǔn)確的是:
FastCFS是一款開(kāi)源的,支持云原生的高性能分布式存儲(chǔ)系統(tǒng)渠牲。
余老師在他的技術(shù)文章中提到:
FastCFS在保證數(shù)據(jù)強(qiáng)一致的前提下旋炒,同時(shí)做到了高性能,完全滿足數(shù)據(jù)庫(kù)對(duì)IO性能和數(shù)據(jù)一致性的嚴(yán)格要求签杈。軟件本身不應(yīng)該成為系統(tǒng)的性能瓶頸瘫镇,這是我奉行的原則并一直為之實(shí)踐。若有朋友發(fā)現(xiàn)FastCFS在高端服務(wù)器上性能發(fā)揮不出來(lái)答姥,歡迎來(lái)找我(tiguan)铣除。
這是一種霸氣且有底氣的態(tài)度,并且更難的是FastCFS完全自主研發(fā)鹦付,用C語(yǔ)言原生實(shí)現(xiàn)尚粘,除了依賴libfuse實(shí)現(xiàn)文件掛載外,不依賴任何第三方軟件敲长。
那么FastCFS是怎么做的呢郎嫁?
FastCFS的基本概念和核心組件
FastCFS分成服務(wù)端、客戶端潘明、 CSI三個(gè)部分行剂,另外還貼心的提供了運(yùn)維工具。
- 服務(wù)端有三個(gè)核心組件是 FastStore 钳降、 FastDIR、FastAuth腌巾。
- 客戶端是利用libfuse實(shí)現(xiàn)的文件掛載服務(wù)遂填,可以直接以文件的方式訪問(wèn)FastCFS的存儲(chǔ)系統(tǒng)
- FastCFS CSI 是一個(gè)基于k8s CSI標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的,用于支持k8s來(lái)使用FastCFS澈蝙,實(shí)現(xiàn)存儲(chǔ)卷的創(chuàng)建吓坚、加載和讀寫(xiě)操作。
1灯荧、FastDIR介紹
FastDIR作為通用分布式文件系統(tǒng)FastCFS核心組件之一礁击,F(xiàn)astDIR是一款高性能、大容量分布式目錄服務(wù),除了支持文件系統(tǒng)基本特性外哆窿,還實(shí)現(xiàn)了如下特性:
- 支持全部類型:如socket链烈、字符設(shè)備、符號(hào)鏈接等挚躯,還支持硬鏈接强衡;
- 文件鎖:完全支持POSIX文件鎖,支持按范圍加/解鎖码荔;
- 文件擴(kuò)展屬性(x-attribute)漩勤,V2.0開(kāi)始支持,用于保存存儲(chǔ)池相關(guān)屬性缩搅。
FastDIR支持命名空間越败,一個(gè)命名空間對(duì)應(yīng)一套目錄結(jié)構(gòu),多個(gè)命名空間的目錄結(jié)構(gòu)相互獨(dú)立硼瓣,可以通過(guò)命名空間隔離不同應(yīng)用究飞。FastCFS 對(duì)應(yīng)k8s的支持就是通過(guò)存儲(chǔ)池來(lái)實(shí)現(xiàn)的,一個(gè)存儲(chǔ)池對(duì)應(yīng)FastDIR的一個(gè)命名空間巨双,在k8s中對(duì)應(yīng)的一個(gè)PV噪猾。
另外FastDIR通過(guò)插件方式實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)引擎,采用binlog + 存儲(chǔ)引擎插件筑累,按需加載inode數(shù)據(jù)袱蜡,單機(jī)以有限內(nèi)存(如64GB)支持100億級(jí)的海量文件。
2慢宗、FastStore介紹
上次來(lái)自余老師的技術(shù)文章坪蚁,由上圖可以看出 FastStore對(duì)服務(wù)器和數(shù)據(jù)均采用分組方式,服務(wù)器分組簡(jiǎn)稱 SG镜沽,為物理分組敏晤;數(shù)據(jù)分組簡(jiǎn)稱 DG,為邏輯分組缅茉。FastStore的server各自管理數(shù)據(jù)塊(文件塊)索引嘴脾,數(shù)據(jù)塊的元數(shù)據(jù)采用無(wú)中心的分布式架構(gòu)。FastStore本質(zhì)是一個(gè)分布式KV系統(tǒng)蔬墩,key是數(shù)據(jù)塊所屬的對(duì)象ID(inode) + 偏移量(offset)译打,value是數(shù)據(jù)塊內(nèi)容。FastStore采用的數(shù)據(jù)路由規(guī)則:數(shù)據(jù)塊key按數(shù)據(jù)分組數(shù)(DGC)求模得出所在的數(shù)據(jù)分組拇颅,即:block_hash_code % DGC奏司。
因此,部署集群需要注意:
DGC一旦確定就不可更改樟插,否則將導(dǎo)致數(shù)據(jù)訪問(wèn)混亂韵洋!
如果數(shù)據(jù)增長(zhǎng)遠(yuǎn)超預(yù)期需要增大DGC竿刁,只能搭建一套新集群,在新舊兩套集群并存的情況下搪缨,把原有數(shù)據(jù)手工遷移到新集群食拜,遷移完成后切換到新集群。
另外勉吻,為了便于以后增加SG進(jìn)行擴(kuò)容监婶,DG數(shù)量(DGC)必須事先充足地預(yù)估數(shù)據(jù)規(guī)模后確定下來(lái),生產(chǎn)環(huán)境建議最小配置 256齿桃。友情提示:盡可能樂(lè)觀地預(yù)估數(shù)據(jù)增長(zhǎng)規(guī)模惑惶,寧多勿少,不存在過(guò)猶不及的問(wèn)題短纵。
FastStore架構(gòu)有如下特點(diǎn):
* 基于數(shù)據(jù)塊的無(wú)中心設(shè)計(jì)(類一致性Hash)带污,理論上可以無(wú)限擴(kuò)容;
* 分組方式(SG和DG)香到,簡(jiǎn)單高效鱼冀;
* 數(shù)據(jù)分組內(nèi)采用Master/Slave結(jié)構(gòu),簡(jiǎn)單有效的數(shù)據(jù)一致性保證悠就。
3千绪、FastAuth
FastAuth的目的就是為了更好地對(duì)接虛擬機(jī)和K8s,實(shí)現(xiàn)了存儲(chǔ)池和訪問(wèn)權(quán)限控制梗脾,并支持配額荸型。
FastAuth核心功能就是用戶和權(quán)限體系,為了保證高性能且不依賴第三方組件炸茧,auth模塊精心設(shè)計(jì)瑞妇,采用基于session的分布式訪問(wèn)控制,session由Auth server生成并分發(fā)給上次提到的FastDIR 和FastStore兩大組件 梭冠,實(shí)現(xiàn)了session本地驗(yàn)證辕狰。
一句話總結(jié):FastCFS的用戶權(quán)限體系采用集中管理,分布式驗(yàn)證的做法控漠,做到了極致性能蔓倍。
4、FastCFS-Fuse客戶端
FastCFS-Fuse客戶端是基于FUSE的標(biāo)準(zhǔn)文件接口已經(jīng)實(shí)現(xiàn)盐捷〖砹常可以使用FastCFS的fused模塊mount到本地,為數(shù)據(jù)庫(kù)毙驯、虛擬機(jī)以及其他使用標(biāo)準(zhǔn)文件接口的應(yīng)用提供存儲(chǔ),同時(shí)也方便運(yùn)維人員去查看文件內(nèi)容灾测。
5爆价、FastCFS CSI
FastCFS CSI 垦巴, 是標(biāo)準(zhǔn)的容器存儲(chǔ)接口實(shí)現(xiàn),該驅(qū)動(dòng)器為容器編排器k8s管理FastCFS類型卷的生命周期提供 CSI 支持铭段。
主要功能包括
- 靜態(tài)供應(yīng) - 創(chuàng)建一個(gè)新的或遷移現(xiàn)有的 FastCFS 卷, 然后從 FastCFS 卷創(chuàng)建持久卷 (PV) 并使用 PersistentVolumeClaim (PVC) 從容器中消費(fèi) PV骤宣。
- 動(dòng)態(tài)供應(yīng) - 使用PersistentVolumeClaim (PVC)請(qǐng)求 Kuberenetes 代表用戶創(chuàng)建 FastCFS 卷,并從容器內(nèi)部消費(fèi)該卷序愚,支持StorageClass憔披。
- 掛載選項(xiàng) - 可以通過(guò)在持久卷 (PV) 中指定掛載選項(xiàng),來(lái)定義卷的掛載方式爸吮。
- 卷擴(kuò)充 - 擴(kuò)充卷的大小芬膝。
需要注意的是:FastCFS-CSI 不支持刪除靜態(tài)卷。PV 規(guī)范中的 persistentVolumeReclaimPolicy
必須設(shè)置為 Retain
形娇,以避免在 csi-provisioner 中嘗試刪除 PV锰霜。
隨便提一句,F(xiàn)astCFS CSI 有兩種實(shí)現(xiàn)桐早,一種是fastCFS-fuse客戶端和fuse客戶端代理模式癣缅。
以上對(duì)應(yīng)FastCFS的基本概念和組成,來(lái)自于余老師的技術(shù)博客文章哄酝,可能有表述錯(cuò)誤或者理解偏差友存,請(qǐng)直接移步余老師博客:https://my.oschina.net/u/3334339
總結(jié):
FastCFS定位為一款強(qiáng)一致性、高性能陶衅、高可用屡立、支持百億級(jí)海量文件的通用分布式文件系統(tǒng),可以作為MySQL万哪、PostgresSQL侠驯、Oracle等數(shù)據(jù)庫(kù),k8s和NAS的后端存儲(chǔ)奕巍。
到現(xiàn)在2022年1月份最新版本是V3.1.0已經(jīng)具備了基本生產(chǎn)可用的狀態(tài)吟策,經(jīng)過(guò)筆者的測(cè)試性能正如余老師所說(shuō)非常好(后面的文章會(huì)提到)。當(dāng)然在文檔的止、自動(dòng)化擴(kuò)容檩坚、監(jiān)控、運(yùn)維上還有一些欠缺诅福,但是這些都在一步一步的按計(jì)劃進(jìn)行中匾委,并且速度非常快氓润。
做一款產(chǎn)品非常不容易赂乐,做一款分布式云原生存儲(chǔ)產(chǎn)品更加困難,讓我們一起參與到FastCFS的共建中咖气,讓FastCFS早日成為云原生存儲(chǔ)的標(biāo)桿挨措。
本篇對(duì)FastCFS的介紹先到此挖滤,后面會(huì)把筆者部署體驗(yàn)FastCFS集群,并在k8s中通過(guò)CSI連通FastCFS集群的過(guò)程寫(xiě)出來(lái)浅役,希望能夠幫助到搭建FastCFS碰到問(wèn)題的同學(xué)斩松,或者想嘗試FastCFS的同學(xué)。