FastDFS 分布式文件系統(tǒng)詳解

什么是文件系統(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

trackerstorage 其實都是 fastdfs隅茎,只不過啟動時通過不同的配置文件啟動辟犀,所扮演的角色不同而已堂竟。也就是說跃捣,安裝 trackerstorage 就是在安裝 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í)更輕松噢 ~


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趁曼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棕洋,更是在濱河造成了極大的恐慌挡闰,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拍冠,死亡現(xiàn)場離奇詭異尿这,居然都是意外死亡,警方通過查閱死者的電腦和手機庆杜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門射众,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人晃财,你說我怎么就攤上這事叨橱。” “怎么了断盛?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵罗洗,是天一觀的道長。 經(jīng)常有香客問我钢猛,道長伙菜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任命迈,我火速辦了婚禮贩绕,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘壶愤。我一直安慰自己淑倾,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布征椒。 她就那樣靜靜地躺著娇哆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碍讨,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天治力,我揣著相機與錄音,去河邊找鬼垄开。 笑死琴许,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的溉躲。 我是一名探鬼主播榜田,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼锻梳!你這毒婦竟也來了箭券?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤疑枯,失蹤者是張志新(化名)和其女友劉穎辩块,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荆永,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡废亭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了具钥。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片豆村。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖骂删,靈堂內(nèi)的尸體忽然破棺而出掌动,到底是詐尸還是另有隱情,我是刑警寧澤宁玫,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布粗恢,位于F島的核電站,受9級特大地震影響欧瘪,放射性物質(zhì)發(fā)生泄漏眷射。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一佛掖、第九天 我趴在偏房一處隱蔽的房頂上張望妖碉。 院中可真熱鬧,春花似錦苦囱、人聲如沸嗅绸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春羹铅,著一層夾襖步出監(jiān)牢的瞬間蚀狰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工职员, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留麻蹋,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓焊切,卻偏偏與公主長得像扮授,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子专肪,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361