海量文件存儲及FastDFS容器化部署及訪問

一. 背景

? ? ?當(dāng)我們需要存儲海量文件的時候毕谴,可能想到的幾種方式:

? ? ? ? ?1.? ?將文件存儲于本地文件系統(tǒng)中拦英,然后將其路徑存儲于關(guān)系型數(shù)據(jù)庫入客。

? ? ? ? ? 2.? 部署HDFS邦尊,將文件存儲于HDFS分布式文件系統(tǒng)中,然后記錄其存儲路徑关拒。

? ? ? ? ? 3.? 通過HBase MOB機(jī)制進(jìn)行小文件的存儲佃蚜。

? ? ? ? ? 4.? 將文件存儲于FastDFS這樣的分布式文件系統(tǒng)中/

? ? ? ?如何選擇存儲方式會對文件的讀寫性能產(chǎn)生大的影響,因此需要根據(jù)使用場景匹配其適合的存儲場景:

? ? ? ? ? 1. 第一種是最傳統(tǒng)的軟件系統(tǒng)的存儲方式着绊,僅適合存儲數(shù)量較少爽锥,臨時使用,可周期性刪除的文件的畔柔,由于文件存儲在本地氯夷,因此文件的安全,存儲的擴(kuò)展都不能得到支持靶擦,如若沒有定時刪除機(jī)制遲早會將磁盤寫滿腮考,對系統(tǒng)和應(yīng)用的穩(wěn)定性產(chǎn)生影響。

? ? ? ? ? 2. 第二種方式是大數(shù)據(jù)的常用存儲手段玄捕,由于hdfs中namenode的元數(shù)據(jù)數(shù)量限制及其有限節(jié)點性能的壓力踩蔚,不適合存儲海量的小文件(如互聯(lián)網(wǎng)應(yīng)用中的用戶頭像)以及數(shù)據(jù)頻繁的更新的場景。hdfs中適合存儲大文件枚粘,并且適合一次寫入多次讀取的批量計算的情況馅闽。

? ? ? ? ? 3.? 第三種方式通過HBase 的MOB機(jī)制進(jìn)行文件的存儲,這種方式因為涉及到圖片的壓縮會帶來region性能的下降馍迄,因此存儲小于10K的文件比較適合福也,如果超過100K的文件會經(jīng)常造成regionserver不可用的問題。

? ? ? ? ? 4.? 第四種方式FastDFS本文主要討論攀圈,適合海量小文件的分布式存儲暴凑,支持storage從節(jié)點的橫向擴(kuò)展,結(jié)合storage負(fù)載均衡機(jī)制赘来,可大大提高海量小文件的訪問性能现喳。Fastdfs不適合存儲GB以上的大文件凯傲,會造成傳輸超時等問題。

二. Fastdfs原理

????????FastDFS是一個開源的輕量級分布式文件系統(tǒng)嗦篱,它對文件進(jìn)行管理冰单,功能包括:文件存儲、文件同步灸促、文件訪問(文件上傳球凰、文件下載)等,解決了大容量存儲和負(fù)載均衡的問題腿宰,特別適合以中小文件(4KB < file_size <500MB)為載體的在線服務(wù),如相冊網(wǎng)站缘厢、視頻網(wǎng)站等等吃度。

fastdfs架構(gòu)

三. FastDFS容器化安裝

? ? FastDFS本地化安裝比較復(fù)雜,需要大量的配置及相關(guān)插件安裝贴硫,不利于分布式環(huán)境的部署和遷移椿每。因此將其所有的配置容器化打包為docker鏡像進(jìn)行部署,僅僅需要一兩步即可完成英遭,使用起來非常方便间护。本文采用的是已經(jīng)封裝好的鏡像。

????1挖诸、服務(wù)規(guī)劃

服務(wù)規(guī)劃

????2汁尺、節(jié)點先安裝docker服務(wù)

? ? ? ????? vm1,vm2,vm3 節(jié)點都執(zhí)行。

? ? ? ? ????參考:https://www.cnblogs.com/yufeng218/p/8370670.html

????3多律、獲取FastDFS容器鏡像

? ??????? ? vm1,vm2,vm3 節(jié)點都執(zhí)行痴突。

? ? ? ? ????執(zhí)行命令:docker pull?delron/fastdfs

? ? ?4.? 啟動tracker服務(wù):

????????????vm3節(jié)點執(zhí)行。

? ? ? ????? 執(zhí)行命令:docker run -dti --network=host --name tracker -eTRACKER_SERVER=192.168.1.53:22122-v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

? ? ? ? ? ? 注:可根據(jù)實際需要修改掛在本地卷路徑狼荞,當(dāng)前掛載在本地/var/fdfs/tracker下)

? ? ???5.? 啟動storage服務(wù):

? ??????????vm1,vm2,vm3 節(jié)點都執(zhí)行辽装。

? ??????????執(zhí)行命令:docker run -dti --network=host --name storage -eTRACKER_SERVER=192.168.1.53:22122-v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

? ???????????(注:可根據(jù)實際需要修改掛在本地卷路徑,當(dāng)前掛載在本地/var/fdfs/storage下)

? ????? 6. 啟動成功后相味,可以在本地路徑下找到其掛在目錄(每個存儲節(jié)點都一樣):

文件目錄

四. FastDFS命令行文件操作

? ? ?通過命令行的方式來操作文件拾积,由于FastDFS的命令都被封裝在容器環(huán)境中需要進(jìn)入容器中進(jìn)行操作:

? ? 1. 查看已經(jīng)運行容器

docker ps

? ? 2. 進(jìn)入tracker或者storage容器?

????????執(zhí)行命令:docker exec -it 45a8fde90694 /bin/bash

? ? 3. 上傳文件到fastdfs集群:

? ? ? ? 執(zhí)行命令:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /anaconda-post.log

? ? ? ? 命令返回:group1/M00/00/00/wKgBNF0R_kuAOCx_AAAuyAYKcJ4393.log

????????其中:?/anaconda-post.log為需要上傳的文件絕對路徑

? ? 4. 退出容器

? ? ? ? 執(zhí)行命令:exit

? ? 5. 查看已上傳的文件

????????在本地系統(tǒng)中路徑/var/fdfs/storage/data/00/00/下查看已經(jīng)上傳的文件wKgBNF0R_kuAOCx_AAAuyAYKcJ4393.log,fastdfs會將上傳的文件重命名為一個隨機(jī)的名稱。

查看文件實際存儲

五. 通過http方式直接訪問文件

?? ? 若需要直接通過瀏覽器訪問存儲的文件(例如圖片)丰涉,需要用到FastDFS的http服務(wù)(默認(rèn)8888端口)拓巧。其訪問方式如下:

????http://192.168.1.51:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

????http://192.168.1.52:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

????http://192.168.1.53:8888/group1/M00/00/00/group1/M00/00/00/wKgBNV0SytyAYKipANXq6U4HsAU139.jpg

獨立地址訪問

????FastDFS的HTTP服務(wù)較為簡單,即需要直接訪問某一個storage的地址一死,而無法提供統(tǒng)一的地址負(fù)載均衡等高性能的服務(wù)玲销。因此需要我們手動配置nginx來實現(xiàn)這三臺服務(wù)器統(tǒng)一的訪問及負(fù)載均衡。

????此處nginx同樣使用容器進(jìn)行部署(docker pull nginx:1.15)摘符,nginx.conf文件主要配置如下:

負(fù)載均衡配置

? ? 即訪問192.168.1.51:8808鏈接會被隨機(jī)映射到實際的vm1贤斜,vm2策吠,vm3三臺服務(wù)器上獲取數(shù)據(jù),這樣就解決了統(tǒng)一訪問鏈接和負(fù)載均衡的問題瘩绒,如下:

統(tǒng)一地址訪問

六. 通過java操作FastDFS的文件操作

? ? 1. 新建maven項目猴抹,在pom中添加依賴:

maven包依賴

? ? 2. 添加fastdfs操作配置文件fdfs_client.conf:

配置文件
配置信息(與/etc/fdfs/client.conf一致)

? ????2. fastdfs操作類:

? ? ? ? ? 文件上傳:

文件上傳

?? ? ? 文件下載:

文件下載

??? ? ?文件刪除:

文件刪除

??? ? ?文件信息獲取:

文件信息獲取

七. FastDFS在企業(yè)中的應(yīng)用

? ? ? ? 海量的小文件的頻繁讀取锁荔,包括:

?????????????-文檔蟀给、圖片、音頻阳堕、視頻

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末跋理,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子恬总,更是在濱河造成了極大的恐慌前普,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,599評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件壹堰,死亡現(xiàn)場離奇詭異拭卿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贱纠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評論 3 385
  • 文/潘曉璐 我一進(jìn)店門峻厚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谆焊,你說我怎么就攤上這事惠桃。” “怎么了辖试?”我有些...
    開封第一講書人閱讀 158,084評論 0 348
  • 文/不壞的土叔 我叫張陵刽射,是天一觀的道長。 經(jīng)常有香客問我剃执,道長誓禁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,708評論 1 284
  • 正文 為了忘掉前任肾档,我火速辦了婚禮摹恰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘怒见。我一直安慰自己俗慈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,813評論 6 386
  • 文/花漫 我一把揭開白布遣耍。 她就那樣靜靜地躺著闺阱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舵变。 梳的紋絲不亂的頭發(fā)上酣溃,一...
    開封第一講書人閱讀 50,021評論 1 291
  • 那天瘦穆,我揣著相機(jī)與錄音,去河邊找鬼赊豌。 笑死扛或,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碘饼。 我是一名探鬼主播熙兔,決...
    沈念sama閱讀 39,120評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艾恼!你這毒婦竟也來了住涉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,866評論 0 268
  • 序言:老撾萬榮一對情侶失蹤钠绍,失蹤者是張志新(化名)和其女友劉穎舆声,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體五慈,經(jīng)...
    沈念sama閱讀 44,308評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,633評論 2 327
  • 正文 我和宋清朗相戀三年主穗,在試婚紗的時候發(fā)現(xiàn)自己被綠了泻拦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,768評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡忽媒,死狀恐怖争拐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晦雨,我是刑警寧澤架曹,帶...
    沈念sama閱讀 34,461評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站闹瞧,受9級特大地震影響绑雄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奥邮,卻給世界環(huán)境...
    茶點故事閱讀 40,094評論 3 317
  • 文/蒙蒙 一万牺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洽腺,春花似錦脚粟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,850評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至藕坯,卻和暖如春团南,著一層夾襖步出監(jiān)牢的瞬間噪沙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,082評論 1 267
  • 我被黑心中介騙來泰國打工已慢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留曲聂,地道東北人。 一個月前我還...
    沈念sama閱讀 46,571評論 2 362
  • 正文 我出身青樓佑惠,卻偏偏與公主長得像朋腋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膜楷,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,666評論 2 350

推薦閱讀更多精彩內(nèi)容