什么是文件系統(tǒng)
文件系統(tǒng)是操作系統(tǒng)用于在磁盤或分區(qū)上組織文件的方法和數(shù)據(jù)結(jié)構(gòu)。磁盤空間是什么樣的我們并不清楚,但文件系統(tǒng)可以給我們呈現(xiàn)一個非常清晰的表象殊轴,我們可以創(chuàng)建、刪除袒炉、修改和復(fù)制這些文件,而實現(xiàn)這些功能的軟件就是文件系統(tǒng)樊零。操作系統(tǒng)中負責(zé)管理和存儲文件信息的軟件被稱為文件管理系統(tǒng)我磁,簡稱文件系統(tǒng)。
文件系統(tǒng)是操作系統(tǒng)的一個重要組成部分驻襟,通過對操作系統(tǒng)所管理的存儲空間的抽象夺艰,向用戶提供統(tǒng)一的、對象化的訪問接口沉衣,屏蔽對物理設(shè)備的直接操作和資源管理。也就是說,文件系統(tǒng)解決了普通用戶使用磁盤存儲數(shù)據(jù)的問題解取。
文件系統(tǒng)的發(fā)展史
根據(jù)計算環(huán)境和所提供功能的不同银萍,文件系統(tǒng)可劃分為以下幾種。
單機文件系統(tǒng)
特點:用于操作系統(tǒng)和應(yīng)用程序的本地存儲肥隆。
缺點:數(shù)據(jù)無法在多臺機器之間共享既荚。
代表:EXT2、EXT3栋艳、EXT4恰聘、NTFS、FAT、FAT32晴叨、XFS凿宾、JFS 等等。
網(wǎng)絡(luò)文件系統(tǒng)
特點:基于現(xiàn)有以太網(wǎng)架構(gòu)兼蕊,實現(xiàn)不同服務(wù)器之間傳統(tǒng)文件系統(tǒng)的數(shù)據(jù)共享初厚。
缺點:兩臺服務(wù)器不能同時訪問修改,性能有限遍略。
代表:NFS惧所、CIFS 等等,比如下圖 Windows 主機之間進行網(wǎng)絡(luò)文件共享就是通過微軟公司自己的 CIFS 服務(wù)實現(xiàn)的绪杏。
分布式文件系統(tǒng)
數(shù)據(jù)量越來越多下愈,在一個操作系統(tǒng)管轄的范圍存不下了,那么就分配到更多的操作系統(tǒng)管理的磁盤中蕾久,但是不方便管理和維護势似,因此迫切需要一種系統(tǒng)來管理多臺機器上的文件,這就是分布式文件管理系統(tǒng)僧著。
分布式文件系統(tǒng)(Distributed File System)是一種允許文件通過網(wǎng)絡(luò)在多臺主機上共享的文件系統(tǒng)履因,可以讓多機器上的多用戶進行文件分享和存儲。在這樣的文件系統(tǒng)中盹愚,客戶端并非直接訪問底層的數(shù)據(jù)存儲區(qū)塊栅迄,而是通過網(wǎng)絡(luò),以特定的通信協(xié)議和服務(wù)器溝通皆怕。DFS 為分布在網(wǎng)絡(luò)上任意位置的資源提供一個邏輯上的樹形文件系統(tǒng)結(jié)構(gòu)毅舆,讓用戶訪問分布在網(wǎng)絡(luò)上的共享文件更加簡便。所有高層次的文件系統(tǒng)都是以低層次的傳統(tǒng)文件系統(tǒng)為基礎(chǔ)愈腾,實現(xiàn)了更高級的功能憋活。
特點:在傳統(tǒng)文件系統(tǒng)上,通過額外模塊實現(xiàn)數(shù)據(jù)跨服務(wù)器分布虱黄,并且自身集成 RAID 保護功能悦即,可以保證多臺服務(wù)器同時訪問、修改同一個文件系統(tǒng)橱乱。性能優(yōu)越辜梳,擴展性強,可靠性高仅醇。
缺點:部分類型存在單點故障風(fēng)險冗美。
代表:HDFS(ASF)、MogileFS(LiveJournal)析二、FastDFS(余慶)粉洼、Lustre(Oracle)节预、GlusterFS(RedHat)等等。
通用型
通用分布式文件系統(tǒng)和傳統(tǒng)的本地文件系統(tǒng)(如 EXT4属韧、NTFS 等)相對應(yīng)安拟。典型代表:Lustre、MooseFS宵喂。
優(yōu)點:傳統(tǒng)文件系統(tǒng)的操作方式糠赦,對開發(fā)者門檻較低。
缺點:系統(tǒng)復(fù)雜性較高锅棕,需要支持若干標準的文件操作拙泽,如:目錄結(jié)構(gòu)、文件讀寫權(quán)限裸燎、文件鎖等顾瞻。系統(tǒng)整體性能有所降低,因為要支持 POSIX 標準(可移植操作系統(tǒng)接口 Portable Operating System Interface of UNIX)德绿。
POSIX 全稱:可移植操作系統(tǒng)接口荷荤。當 Unix 誕生之后,各個廠商都實現(xiàn)了自己的 Unix 系統(tǒng)移稳,導(dǎo)致接口不統(tǒng)一蕴纳,基于不同的操作系統(tǒng)開發(fā)變得極其混亂,為了解決這一問題个粱,便有了 POSIX 標準古毛。
總結(jié):POSIX 標準的誕生就是為了統(tǒng)一操作系統(tǒng)的接口,方便開發(fā)者開發(fā)應(yīng)用程序都许,寫出可移植的代碼程序喇潘。基于 POSIX 標準的庫函數(shù)都是可以在此標準的操作系統(tǒng)平臺上移植梭稚。
專用型
專用分布式文件系統(tǒng)基于谷歌文件系統(tǒng)論文(Google File System)的設(shè)計思想而來,文件上傳后不能修改絮吵。使用專有 API 對文件進行訪問弧烤,也可稱為分布式文件存儲服務(wù)。典型代表:HDFS蹬敲、MogileFS暇昂、FastDFS。
優(yōu)點:系統(tǒng)復(fù)雜性較低伴嗡,不需要支持若干標準的文件操作急波,如:目錄結(jié)構(gòu)、文件讀寫權(quán)限瘪校、文件鎖等澄暮。系統(tǒng)整體性能較高名段,因為無需支持 POSIX 標準,系統(tǒng)更加高效泣懊。
缺點:采用專有 API 對文件進行訪問伸辟,對開發(fā)者門檻較高,一般都是直接封裝成工具類進行使用馍刮。
文件服務(wù)器的發(fā)展史
隨著互聯(lián)網(wǎng)圖片信夫、視頻時代的到來,對文件的處理成為各個業(yè)務(wù)系統(tǒng)面臨的巨大挑戰(zhàn)卡啰,亟需搭建特有的文件服務(wù)器解決文件共享的問題静稻。
本地文件服務(wù)器
特點:本地文件服務(wù)器是指文件數(shù)據(jù)直接存儲在本地節(jié)點中。比如直接在項目目錄下建立文件夾存放項目文件資源匈辱,如果按不同類型再細分振湾,可以在項目目錄下繼續(xù)創(chuàng)建不同的子目錄用于區(qū)分。
優(yōu)點:簡單便捷梅誓,項目可以直接引用恰梢,訪問方便。
缺點:文件與代碼混合存儲不便于管理梗掰,隨著文件的增多影響項目發(fā)布上線周期嵌言。
獨立文件服務(wù)器
特點:搭建一臺獨立的服務(wù)器用于文件存儲使用,項目上傳文件時及穗,先通過 ftp 或者 ssh 將文件上傳至服務(wù)器某個目錄下摧茴,再通過 Ngnix 或者 Apache Http Server 反向代理此目錄,返回一個獨立域名的文件 URL 地址埂陆,前端通過這個 URL 地址即可直接訪問文件苛白。
優(yōu)點:獨立存儲,可以方便擴容焚虱、容災(zāi)和數(shù)據(jù)遷移购裙。方便做圖片訪問請求的負載均衡,方便應(yīng)用各種緩存策略(HTTP Header鹃栽、Proxy Cache 等)躏率,也更加方便遷移到 CDN。而且圖片訪問是很消耗服務(wù)器資源的(因為會涉及到操作系統(tǒng)的上下文切換和磁盤 I/O 操作)民鼓,分離出來以后薇芝,Web/App 服務(wù)器可以更專注發(fā)揮動態(tài)處理的能力。
缺點:單機存在性能瓶頸丰嘉,容災(zāi)夯到、垂直擴展性差。
分布式文件服務(wù)器
特點:分布式文件系統(tǒng)一般包括訪問的仲裁饮亏,文件的存儲耍贾,文件的容災(zāi)三大塊阅爽。仲裁模塊相當于文件服務(wù)器的大腦,根據(jù)一定的算法來決定文件存儲的位置逼争。文件存儲模塊負責(zé)保存文件优床。容災(zāi)模塊負責(zé)文件數(shù)據(jù)的相互備份。
優(yōu)點:彈性伸縮誓焦,性能優(yōu)越胆敞,擴展性強,可靠性高杂伟。
缺點:系統(tǒng)復(fù)雜度稍高移层,需要更多服務(wù)器。
FastDFS 簡介
FastDFS 就是我們上述所說的專用分布式文件系統(tǒng)赫粥,接下來我們就詳細了解它的核心概念观话,架構(gòu)體系及環(huán)境的搭建與使用。
FastDFS 是基于 C 語言開發(fā)的越平,是一個輕量級開源的高性能分布式文件系統(tǒng)频蛔。主要功能有:文件存儲、文件同步秦叛、文件訪問(文件上傳/下載)晦溪,解決了大容量的文件存儲和高并發(fā)訪問的問題,文件存取時實現(xiàn)了負載均衡挣跋。FastDFS 特別適合中大型網(wǎng)站以文件為載體的在線服務(wù)三圆,適合存儲 4KB ~ 500MB
之間的小文件,如照片共享網(wǎng)站避咆、視頻共享網(wǎng)站(圖片舟肉、文檔、音頻查库、視頻等等)路媚。
FastDFS 是一款國產(chǎn)開源軟件,作者余慶樊销,項目開源地址 Github:https://github.com/happyfish100/fastdfs 官方論壇:http://bbs.chinaunix.net/forum-240-1.html
FastDFS 架構(gòu)
Client
客戶端磷籍,實現(xiàn)文件上傳下載的服務(wù)器,就是我們自己的項目所部署在的服務(wù)器现柠。通過專有接口,使用 TCP/IP 協(xié)議與跟蹤服務(wù)器或存儲服務(wù)器進行數(shù)據(jù)交互弛矛。FastDFS 向使用者提供基本文件訪問接口够吩,比如 upload、download丈氓、append周循、delete 等强法,以客戶端庫的方式提供給用戶使用湾笛。
Tracker Server
跟蹤服務(wù)器嚎研,負責(zé)文件訪問的調(diào)度和負載均衡蓖墅,負責(zé)管理所有的 Storage Server 和 group 組/卷临扮。
Storage Server
存儲服務(wù)器,負責(zé)文件存儲,文件同步/備份,提供文件訪問接口罕偎,文件元數(shù)據(jù)管理。以 group 為單位,每個 group 內(nèi)可以有多臺 Storage Server蚂且,數(shù)據(jù)互為備份队寇,達到容災(zāi)的目的佳遣。每個 Storage 在啟動以后會主動連接 Tracker,告知自己所屬 group 等存儲相關(guān)信息窒舟,并保持周期性心跳惠豺。
Group
組风宁, 也可稱為 Volume 卷戒财。同組內(nèi)服務(wù)器上的文件是完全相同的饮寞,同一組內(nèi)的 Storage Server 之間是對等的孝扛,文件上傳苦始、刪除等操作可以在任意一臺 Storage Server 上進行陌选。
Metadata
文件系統(tǒng)中存儲的數(shù)據(jù)分為數(shù)據(jù)和元數(shù)據(jù)兩部分柠贤,數(shù)據(jù)是指文件中的實際數(shù)據(jù),即文件的實際內(nèi)容邻吭;而元數(shù)據(jù)是用來描述一個文件特征的系統(tǒng)數(shù)據(jù)囱晴,諸如訪問權(quán)限畸写、文件擁有者以及文件數(shù)據(jù)塊的分布信息等等氓扛。如果文件是一張圖片采郎,元數(shù)據(jù)就是圖片的寬蒜埋,高等等。
FastDFS 存儲策略
為了支持大容量存儲待错,Storage 存儲服務(wù)器采用了分組(或分卷)的方式火俄。存儲系統(tǒng)由一個或多個組組成烛占,組與組之間的文件是相互獨立的忆家,所有組的文件容量累加就是整個存儲系統(tǒng)中的文件容量德迹。一個組可以由一臺或多臺存儲服務(wù)器組成胳搞,一個組下的存儲服務(wù)器中的文件都是相同的肌毅,組中的多臺存儲服務(wù)器起到了冗余備份和負載均衡的作用悬而。
當組中增加了新的服務(wù)器時,系統(tǒng)會自動同步已有的文件袭蝗,同步完成后到腥,系統(tǒng)自動將新增的服務(wù)器切換至線上提供服務(wù)乡范。
當存儲空間不足時晋辆,可以動態(tài)添加組闰蚕,只需要增加一臺或多臺服務(wù)器没陡,并將它們配置為一個新的組盼玄,即可擴大存儲系統(tǒng)的容量埃儿。當你的某個應(yīng)用或者模塊(對應(yīng)的 group)的并發(fā)過高的時候,可以直接在 group 中增加若干個 Storage 來實現(xiàn)負載均衡精钮。
為了避免單個目錄下的文件數(shù)太多轨香,當 Storage 第一次啟動時臂容,會在每個數(shù)據(jù)存儲目錄中創(chuàng)建 2 級子目錄脓杉,每級 256 個球散,總共 65536 個目錄,上傳的文件會以 hash 的方式被路由到其中某個子目錄下吼畏,然后將文件數(shù)據(jù)直接作為一個本地文件存儲到該目錄泻蚊。
FastDFS 安裝
下載資源
直接通過 Github:https://github.com/happyfish100 下載 libfastcommon
性雄,fastdfs
秒旋,fastdfs-nginx-module
三個項目對應(yīng)的壓縮包或者使用 git 命令下載迁筛,或者通過資源地址:https://sourceforge.net/projects/fastdfs/files/ 下載细卧。
-
libfastcommon
:從fastdfs
項目和fastdht
項目中提取出來的公共 C 函數(shù)庫贪庙。 -
fastdfs
:FastDFS 核心項目翰苫。 -
fastdfs-nginx-module
:Nginx 整合 FastDFS 時 Nginx 需要添加的模塊資源。
安裝依賴
FastDFS 是基于 C 語言開發(fā)的屈扎,安裝它之前必須先安裝它所依賴的環(huán)境助隧。
yum install -y make cmake gcc gcc-c++
安裝公共函數(shù)庫
上傳資源 libfastcommon-master.zip
至服務(wù)器 /usr/local/src
目錄后并解壓。
# 安裝 unzip 用于解壓
yum install -y unzip
# 解壓 libfastcommon 至當前所在目錄
unzip libfastcommon-master.zip
編譯并安裝滓技。
# 進入解壓后的 libfastcommon-master 目錄
cd libfastcommon-master
# 編譯并安裝
./make.sh && ./make.sh install
libfastcommon
默認安裝在 /usr/lib64
和 /usr/include/fastcommon
兩個目錄中令漂,并且會在 /usr/lib
目錄中創(chuàng)建軟鏈接叠必。
安裝 FastDFS
上傳資源 fastdfs-master.zip
至服務(wù)器 /usr/local/src
目錄后并解壓纬朝。
# 解壓 fastdfs 至當前所在目錄
unzip fastdfs-master.zip
編譯并安裝共苛。
# 進入解壓后的 libfastcommon-master 目錄
cd fastdfs-master
# 編譯并安裝
./make.sh && ./make.sh install
fastdfs
默認安裝在以下位置:
-
/usr/bin
:可執(zhí)行文件 -
/etc/fdfs
:配置文件 -
/etc/init.d
:主程序代碼 -
/usr/include/fastdfs
:插件組
啟動 Tracker
tracker
和 storage
其實都是 fastdfs
隅茎,只不過啟動時通過不同的配置文件啟動辟犀,所扮演的角色不同而已堂竟。也就是說跃捣,安裝 tracker
和 storage
就是在安裝 fastdfs
疚漆,然后通過每個角色具體的配置文件啟動即可。
查看 /etc/fdfs
目錄下所有配置文件闻镶。
[root@localhost ~]# ls /etc/fdfs/
client.conf.sample storage.conf.sample storage_ids.conf.sample tracker.conf.sample
-
client.conf.sample
:客戶端的配置文件铆农,測試用 -
storage.conf.sample
:存儲器的配置文件 -
tracker.conf.sample
:跟蹤器的配置文件
編輯 tracker.conf
配置文件墩剖。
# 拷貝文件 tracker.conf.sample 并重命名為 tracker.conf
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
# 編輯 tracker.conf 配置文件
vi /etc/fdfs/tracker.conf
配置文件中的配置項還是蠻多的岭皂,這里暫且關(guān)注以下幾個即可爷绘,后期根據(jù)實際情況再對其他配置項作出調(diào)整土至。
# 允許訪問 tracker 服務(wù)器的 IP 地址陶因,為空則表示不受限制
bind_addr =
# tracker 服務(wù)監(jiān)聽端口
port = 22122
# tracker 服務(wù)器的運行數(shù)據(jù)和日志的存儲父路徑(需要提前創(chuàng)建好)
base_path = /fastdfs/tracker
# tracker 服務(wù)器 HTTP 協(xié)議下暴露的端口
http.server_port = 8080
啟動 tracker
服務(wù)坑赡。
# 創(chuàng)建 tracker 服務(wù)器的運行數(shù)據(jù)和日志的存儲父路徑
mkdir -p /fastdfs/tracker
# 啟動 tracker 服務(wù)
service fdfs_trackerd start
# 查看 tracker 服務(wù)狀態(tài)
service fdfs_trackerd status
# 重啟 tracker 服務(wù)
service fdfs_trackerd restart
# 停止 tracker 服務(wù)
service fdfs_trackerd stop
啟動 Storage
編輯 storage.conf
配置文件毅否。
# 拷貝文件 storage.conf.sample 并重命名為 storage.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
# 編輯 storage.conf 配置文件
vi /etc/fdfs/storage.conf
配置文件中的配置項還是蠻多的螟加,這里暫且關(guān)注以下幾個即可捆探,后期根據(jù)實際情況再對其他配置項作出調(diào)整黍图。
# storage 組名/卷名助被,默認為 group1
group_name = group1
# 允許訪問 storage 服務(wù)器的 IP 地址揩环,為空則表示不受限制
bind_addr =
# storage 服務(wù)器的運行數(shù)據(jù)和日志的存儲父路徑(需要提前創(chuàng)建好)
base_path = /fastdfs/storage/base
# storage 服務(wù)器中客戶端上傳的文件的存儲父路徑(需要提前創(chuàng)建好)
store_path0 = /fastdfs/storage/store
# storage 服務(wù)器 HTTP 協(xié)議下暴露的端口
http.server_port = 8888
# tracker 服務(wù)器的 IP 和端口
tracker_server = 192.168.10.101:22122
啟動 storage
服務(wù)丰滑。
# 創(chuàng)建 storage 服務(wù)器的運行數(shù)據(jù)和日志的存儲父路徑
mkdir -p /fastdfs/storage/base
# 創(chuàng)建 storage 服務(wù)器中客戶端上傳的文件的存儲父路徑
mkdir -p /fastdfs/storage/store
# 啟動 storage 服務(wù)
service fdfs_storaged start
# 查看 storage 服務(wù)狀態(tài)
service fdfs_storaged status
# 重啟 storage 服務(wù)
service fdfs_storaged restart
# 停止 storage 服務(wù)
service fdfs_storaged stop
查看 /fastdfs/storage/store
目錄可以看到 Storage 服務(wù)器創(chuàng)建了 65536
個文件夾用于存儲客戶端上傳的文件炫刷。
Client 操作
FastDFS 向使用者提供基本文件訪問接口柬唯,比如 upload、download剧腻、append涂屁、delete 等拆又,以客戶端庫的方式提供給用戶使用帖族。
在 Tracker 服務(wù)器的機器上編輯 tracker.conf
配置文件竖般。
# 拷貝文件 client.conf.sample 并重命名為 client.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
# 編輯 client.conf 配置文件
vi /etc/fdfs/client.conf
修改配置文件中以下兩處內(nèi)容即可涣雕。
# client 客戶端的運行數(shù)據(jù)和日志的存儲父路徑(需要提前創(chuàng)建好)
base_path = /fastdfs/client
# tracker 服務(wù)器的 IP 和端口
tracker_server = 192.168.10.101:22122
記得 mkdir -p /fastdfs/client
創(chuàng)建 Client 目錄挣郭。
上傳
選擇 Tracker Server
如上圖所示侄非,Storage Server 會定期向 Tracker Server 發(fā)送自己的所屬 group 等存儲相關(guān)信息。如果 Tracker Server 是集群環(huán)境肤无,因為各個 Tracker 之間的關(guān)系是對等的宛渐,所以客戶端上傳時可以選擇任意一個 Tracker窥翩。
選擇 group
當 Tracker 收到客戶端上傳文件的請求時寇蚊,會為該文件分配一個可用的 group 用于存儲仗岸,當選定了 group 以后就要決定給客戶端分配 group 中的哪個 Storage Server扒怖。
如上圖所示盗痒,tracker.conf
配置文件中 group 的可選規(guī)則有:
-
round robin
:所有的 group 間輪詢 -
specify group
:指定一個具體的 group -
load balance
:優(yōu)先選擇剩余存儲空間多的 group
選擇 Storage Server
當分配好 Storage Server 以后俯邓,客戶端會向 Storage Server 發(fā)送上傳文件請求稽鞭,Storage Server 會為文件分配一個具體的數(shù)據(jù)存儲目錄川慌。
如上圖所示梦重,storage.conf
配置文件中文件分發(fā)的可選規(guī)則有:
-
round robin
:在 group 中的所有 Storage 間輪詢 -
random
:隨機琴拧,按 hash code 分發(fā)
生成 file_id
選定存儲目錄以后蚓胸,Storage 會為文件生一個 file_id沛膳,由 Storage Server IP锹安、文件創(chuàng)建時間叹哭、文件大小风罩、文件 crc32 和一個隨機數(shù)組成超升,然后將這個二進制串進行 base64 編碼室琢,轉(zhuǎn)換為字符串研乒。
生成文件名
當文件存儲到某個子目錄后雹熬,即認為該文件存儲成功竿报,接下來會為該文件生成一個文件名烈菌,文件名由 group名稱/存儲目錄/兩級子目錄/file_id.后綴名
拼接而成芽世。
FastDFS文件上傳返回信息解讀
-
group1
:組名/卷名济瓢。文件上傳成功以后所在的 Storage 組名稱蔑鹦,由 Storage 服務(wù)器返回嚎朽。 -
M00
:虛擬磁盤路徑哟忍。與 Storage 配置文件中磁盤選項store_path*
對應(yīng)魁索。如果配置了store_path0
則是M00
粗蔚,如果配置了store_path1
則是M01
饶火,以此類推肤寝。比如:store_path0 = /fastdfs/storage/store
鲤看,M00
則表示:/fastdfs/storage/store/data
找筝。 -
/02/44
:數(shù)據(jù)兩級目錄袖裕。Storage 服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄急鳄,用于存儲數(shù)據(jù)文件堰酿。 -
wKgDrE34E8wAAAAAAAAGkEIYJK42378
:file_id疾宏,由 Storage Server IP、文件創(chuàng)建時間触创、文件大小灾锯、文件 crc32 和一個隨機數(shù)組成,然后將這個二進制串進行 base64 編碼嗅榕,轉(zhuǎn)換為字符串顺饮。 -
group1/M00/02/44/wKgDrE34E8wAAAAAAAAGkEIYJK42378.sh
:文件名。
方式一
上傳命令格式為:fdfs_upload_file /etc/fdfs/client.conf 要上傳的文件
兼雄。
[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/china.jpg
group1/M00/00/00/wKgKZl9skn6AHZKUAADhaCZ_RF0650.jpg
文件上傳成功以后吟逝,會返回該文件在 Storage 服務(wù)器中的存儲位置及隨機生成的文件名。其中 group1
表示 Storage 組名/卷名赦肋,M00
是一個虛擬目錄块攒,表示 /fastdfs/storage/store/data/
真實路徑中的 data
目錄。
如下圖所示佃乘,查看 Storage 服務(wù)器發(fā)現(xiàn)該文件已成功上傳囱井。
方式二
或者使用:fdfs_test /etc/fdfs/client.conf upload 要上傳的文件
。
[root@localhost ~]# fdfs_test /etc/fdfs/client.conf upload /usr/local/src/china.jpg
This is FastDFS client test program v6.07
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/
for more detail.
[2020-09-24 20:59:11] DEBUG - base_path=/fastdfs/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.10.102, port=23000
group_name=group1, ip_addr=192.168.10.102, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg
source ip address: 192.168.10.102
file timestamp=2020-09-24 20:59:11
file size=57704
file crc32=645874781
example file url: http://192.168.10.102/group1/M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518_big.jpg
source ip address: 192.168.10.102
file timestamp=2020-09-24 20:59:11
file size=57704
file crc32=645874781
example file url: http://192.168.10.102/group1/M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518_big.jpg
通過 fdfs_test
的方式上傳文件趣避,會返回該文件上傳成功以后詳細的相關(guān)信息庞呕。
-
group_name
:Storage 組名/卷名 -
remote_filename
:上傳成功文件的存儲路徑及文件名 -
source_ip address
:上傳成功文件所在的 Storage 服務(wù)器的 IP 地址 -
file timestamp
:上傳成功文件時的時間戳 -
file size
:上傳成功文件的文件大小 -
example file url
:上傳成功文件的 url 地址,配合 Nginx 可以直接訪問 -
storage_upload_slave_by_filename
:FastDFS 的文件主/從特性程帕,由主文件產(chǎn)生從文件
如下圖所示住练,查看 Storage 服務(wù)器發(fā)現(xiàn)該文件已成功上傳。后綴為 jpg-m
的文件存放了上傳成功文件的元數(shù)據(jù)信息愁拭。
查看元數(shù)據(jù)信息如下:
[root@localhost ~]# more /fastdfs/storage/store/data/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg-m
ext_namejpgfile_size115120height80width160
下載
客戶端 upload file 成功以后讲逛,會拿到一個 Storage 生成的文件名,接下來客戶端根據(jù)這個文件名即可訪問到該文件岭埠。跟 upload file 一樣盏混,在 download file 時客戶端可以選擇任意 Tracker Server。客戶端發(fā)送 download 請求給某個 Tracker,必須帶上文件名信息入录,Tracke 從文件名中解析出該文件的 group、大小、創(chuàng)建時間等信息启盛,然后為該請求選擇一個 Storage 用于提供讀取服務(wù)蹦掐。
方式一
下載命令格式為:fdfs_download_file /etc/fdfs/client.conf group_name/remote_filename
。
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg
方式二
或者使用:fdfs_test /etc/fdfs/client.conf download group_name remote_filename
僵闯。
fdfs_test /etc/fdfs/client.conf download group1 M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg
刪除
方式一
刪除命令格式為:fdfs_delete_file /etc/fdfs/client.conf 要刪除的文件
卧抗。
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518.jpg
Tips:刪除文件操作會將元數(shù)據(jù)文件一并刪除。
方式二
或者使用:fdfs_test /etc/fdfs/client.conf delete group_name remote_filename
鳖粟。
fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKgKZl9smB-AVBRKAADhaCZ_RF0518_big.jpg
至此 FastDFS 的核心概念社裆,架構(gòu)體系及環(huán)境的搭建與使用就到這里。說到文件服務(wù)器的使用向图,我們最終的目的是通過 HTTP 實現(xiàn)對文件的訪問泳秀,但是此時還無法通過 HTTP 對文件進行訪問标沪,這就需要借助其他工具來實現(xiàn)了,Nginx 就是一個不錯的選擇嗜傅,它是一個高性能的 HTTP 和反向代理 Web 服務(wù)器金句。下一篇我們就使用 Nginx 整合 FastDFS 實現(xiàn)文件服務(wù)器的搭建。
本文采用 知識共享「署名-非商業(yè)性使用-禁止演繹 4.0 國際」許可協(xié)議
吕嘀。
大家可以通過 分類
查看更多關(guān)于 FastDFS
的文章违寞。
?? 您的點贊
和轉(zhuǎn)發(fā)
是對我最大的支持。
?? 關(guān)注公眾號 哈嘍沃德先生
「文檔 + 視頻」每篇文章都配有專門視頻講解偶房,學(xué)習(xí)更輕松噢 ~