一、分布式文件系統
分布式文件系統 (Distributed File System) 是一個軟件/軟件服務器,這個軟件可以用來管理文件,但這個軟件所管理的文件通常不是在一個服務器節點上,而是在多個服務器節點上,這些服務器節點通過網絡相連構成一個龐大的文件存儲服務器集群,這些服務器都用于存儲文件資源,通過分布式文件系統來管理這些服務器上的文件。
常見的分布式文件系統有:FastDFS、GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS等,
GFS(Google File System)
--------------------------------------
Google公司為了滿足本公司需求而開發的基于Linux的專有分布式文件系統
HDFS
--------------------------------------
Hadoop 實現的一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS
Lustre
---------------------------------------
是一個大規模的、安全可靠的,具備高可用性的集群文件系統,它是由SUN公司開發和維護的
Ceph
---------------------------------------
是加州大學圣克魯茲分校的Sage weil攻讀博士時開發的分布式文件系統
GridFS
---------------------------------------
GridFS是MongoDB之上的分布式文件系統,其利用了MongoDB的分布式存儲機制并通過MongoDB來存儲文件數據和文件元數據
MogileFS
---------------------------------------
由memcahed的開發公司danga,開發的一款采用perl開發的產品,目前國內使用mogielFS的有圖片托管網站yupoo等
mooseFS
---------------------------------------
相對比較輕量級,對master服務器有單點依賴,用perl編寫,性能相對較差
分布式文件系統與傳統文件系統對比:
二、什么是FastDFS
FastDFS是一個開源的輕量級分布式文件系統,為互聯網應用量身定做,簡單、靈活、高效,采用C語言開發,由阿里巴巴開發并開源,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的在線服務,如相冊網站、視頻網站等等。
FastDFS為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,并注重高可用、高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。
三、FastDFS發展歷史
1、2008年4月項目啟動,7月發布第一個版本V1.00,兩年時間內持續升級到V1.29
2、2010年8月推出V2.00
3、2011年6月推出V3.00
4、2012年10月推出V4.00
5、2013年12月推出V5.00
6、2017年3月推出V5.10
7、2018年6月推出V5.12(截止目前最新版)
8、詳細發展歷史查看:?https://github.com/happyfish100/fastdfs/blob/master/HISTORY
9、FastDFS系統架構從第一個版本發布后一直沒有大的調整,高版本完全兼容低版本的數據,可以做到平滑升級,推薦更新升級到最新版本;
10、FastDFS代碼托管在github上:https://github.com/happyfish100/fastdfs
四、FastDFS整體架構
FastDFS文件系統由兩大部分構成,一個是客戶端,一個是服務端;客戶端通常指我們的程序,比如我們的Java程序去連接FastDFS、操作FastDFS,那我們的Java程序就是一個客戶端;FastDFS提供專有API訪問,目前提供了 C、Java 和 PHP 幾種編程語言的API,用來訪問FastDFS文件系統;
服務端由兩個部分構成:一個是跟蹤器(tracker),一個是存儲節點(storage);跟蹤器(tracker)主要做調度工作,在內存中記錄集群中存儲節點storage的狀態信息,是前端Client和后端存儲節點storage的樞紐;因為相關信息全部在內存中,Tracker server的性能非常高,一個較大的集群(比如上百個group)中有3臺就足夠了;存儲節點(storage)用于存儲文件,包括文件和文件屬性(meta data)都保存到存儲服務器磁盤上,完成文件管理的所有功能:文件存儲、文件同步和提供文件訪問等;
TIP:
所需要安裝包版本對應關系名稱版本號
| libfastcommon | 1.0.36 |
| fastdfs | 5.11 |
| nginx | 1.12.2 |
| fastdfs-nginx-module | 1.20 |
| fastdfs-client-java | 1.27-SNAPSHOT |
?
五、FastDFS下載
? ? ? ? ? ?FastDFS沒有Windows版本,不能在Windows下使用;FastDFS需要安裝部署在Linux環境下;下載地址:https://github.com/happyfish100/fastdfs/releases,下載安裝版本為FastDFS5.11
六、FastDFS安裝
安裝前的準備 檢查Linux上是否安裝了 gcc、libevent、libevent-devel,執行如下yum命令檢查:yum list installed | grep gccyum list installed | grep libeventyum list installed | grep libevent-devel如果沒有安裝,則需進行安裝,執行如下命令安裝:yum install gcc libevent libevent-devel -y安裝 libfastcommon 庫 libfastcommon 庫是 FastDFS 文件系統運行需要的公共 C 語言函數庫安裝libfastcommon 庫的步驟如下 下載 libfastcommon 源代碼包 下載地址:https://github.com/happyfish100安裝包地址:https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz解壓下載下來的tar.gz壓縮包:tar -zxvf libfastcommon-1.0.36.tar.gz切換到解壓后的libfastcommon目錄:cd libfastcommon-1.0.36執行make腳本進行編譯:./make.sh 注意:第4步make編譯的時候如果報錯,需解決錯誤后再次進行make,通常發生錯誤是由于Linux缺少某些依賴庫導致,根據錯誤提示解決錯誤執行make install進行安裝:./make.sh install至此 libfastcommon 庫安裝完畢安裝FastDFS FastDFS才是我們真正的分布式文件系統,安裝步驟如下: 下載FastDFS,下載地址:https://github.com/happyfish100/fastdfs/releases下載安裝包:wget?https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz??-O fastdfs-5.11.tar.gz解壓下載下來的tar.gz包:tar -zxvf fastdfs-5.11.tar.gz切換到解壓后的目錄:cd fastdfs-5.11執行編譯: ./make.sh然后再執行安裝 ./make.sh install 至此FastDFS安裝完成,安裝后所有編譯出來的文件存放在/usr/bin目錄下,所有配置文件存放在/etc/fdfs目錄下,使用命令查看:ll /usr/bin/fdfs*另外注意需要把解壓后的fastdfs-5.11/conf目錄下的兩個文件拷貝到/etc/fdfs/? cp http.conf /etc/fdfs/cp mime.types /etc/fdfs/這兩個文件后續需要用到,所以先拷貝過去,原因:讓fastdfs-nginx-module的配置文件調用
七、FastDFS配置
FastDFS安裝后配置文件位于/etc/fdfs/目錄下,修改該目錄下的配置文件把所有的.sample后綴都去掉,使用 mv 命令改文件名,去掉文件名后綴。盡量使用cp復制在改名(備份,備份,備份) 修改tracker.conf文件 base_path=/opt/fastdfs/tracker新建?mkdir -p /opt/fastdfs/tracke不然會報:修改storage.conf文件 base_path=/opt/fastdfs/storagestore_path0=/opt/fastdfs/storage/filestracker_server=192.168.184.133:22122新建文件夾:mkdir -p /opt/fastdfs/storagemkdir -p /opt/fastdfs/storage/files如果配置store_path0該配置了,就得創鍵file文件,如果不配置則默認使用base_path然后啟動FastDFS
八、FastDFS啟動
FastDFS服務啟動需要啟動兩個腳本: 啟動FastDFS的tracker服務,在任意目錄下執行:fdfs_trackerd /etc/fdfs/tracker.conf啟動FastDFS的storage服務,在任意目錄下執行:fdfs_storaged /etc/fdfs/storage.conf首次啟動storage后,它會在配置的路徑下創建存儲文件的目錄,前提是配置的路徑要存在,不存在服務都起不來,所以上面七步驟中有提示要創鍵文件夾查看啟動進程:ps -ef | grep fdfs ,有啟動的執行命令即為啟動成功;查看storage是否已經登記到了tracker下:fdfs_monitor /etc/fdfs/storage.conf
九、FastDFS關閉
關閉FastDFS,執行如下命令: 關閉tracker執行命令,在任意目錄下執行:fdfs_trackerd /etc/fdfs/tracker.conf stop關閉storage執行命令,在任意目錄下執行:fdfs_storaged /etc/fdfs/storage.conf stop或者kill關閉fastdfs,但不建議kill -9 強制關閉,因為可能會導致文件信息不同步問題
十、FastDFS重啟
重啟FastDFS,執行如下命令: 重啟tracker執行命令:fdfs_trackerd /etc/fdfs/tracker.conf restart重啟storage執行命令:fdfs_storaged /etc/fdfs/storage.conf restart
十一、FastDFS測試
FastDFS安裝完成之后,可以使用fdfs_test腳本測試文件上傳,執行命令:測試之前,需要修改client.conf配置文件,修改兩個配置: base_path=/opt/fastdfs/clienttracker_server=192.168.184.133:22122新建文件夾:mkdir -p /opt/fastdfs/client測試文件上傳,執行命令: fdfs_test /etc/fdfs/client.conf upload /root/testfastfds.txt測試文件刪除,執行命令: fdfs_delete_file ?/etc/fdfs/client.conf? group1/M00/00/00/wKi4hVzVCW-AR0ZTAAAAIIe1k0c233_big.txtFastDFS生成的文件目錄結構及名稱示例: ?
//一道亮麗的風景線//
十二、安裝Nginx的FastDFS擴展模塊
概述 已經上傳到FastDFS文件系統中的文件,我們如何在瀏覽器中訪問呢?FastDFS?V4.05 以后的版本就把內置 HTTP服務去掉了,所以我們測試上傳成功了,但是卻無法訪問。FastDFS提供了一個Nginx擴展模塊,利用該模塊,我們可以通過Nginx訪問已經上傳到FastDFS上的文件下載 下載fastdfs的nginx擴展模塊源代碼:wget?https://github.com/happyfish100/fastdfs-nginx-module/archive/73869650b6171fd6e5bf81b5b8caa89f021d6c7b.zip?-O fastdfs-nginx-module.zip解壓下載下來的fastdfs-nginx-module.zip 文件:unzip fastdfs-nginx-module.zip安裝Nginx并且添加fastDFS模塊 下載nginx:wget http://nginx.org/download/nginx-1.12.2.tar.gz解壓下載下來的nginx文件,執行命令:tar -zxvf nginx-1.12.2.tar.gz切換至解壓后的nginx主目錄,執行命令:cd nginx-1.12.2切換到解壓后的nginx-1.12.1目錄下,執行configure命令: ./configure --prefix=/usr/local/fastdfs/nginx_fdfs --add-module=/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src其中--prefix是指定nginx安裝路徑,--add-module指定fastDFS的nginx模塊的源代碼路徑執行命令進行編譯:make執行命令進行安裝:make install以上安裝Nginx的FastDFS擴展模塊注意事項 我們知道,nginx是C語言開發,因此同樣需要gcc,還需要安裝pcre,因為nginx的http模塊需要用到pcre,還需要zlib,它提供了解壓縮,還需要openssl,Nginx的安裝需要Linux安裝相關的幾個庫,否則編譯會出現錯誤,這幾個庫分別是:gcc編譯器是否安裝? 檢查是否安裝:yum list installed | grep gcc執行安裝:yum install gcc -yopenssl庫是否安裝? 檢查是否安裝:yum list installed | grep openssl執行安裝:yum install openssl openssl-devel -ypcre庫是否安裝? 檢查是否安裝:yum list installed | grep pcre執行安裝:yum install pcre pcre-devel -yzlib庫是否安裝? 檢查是否安裝:yum list installed | grep zlib執行安裝:yum install zlib zlib-devel -y一次性安裝,執行如下命令: yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y配置 將/home/soft/fastdfs/fastdfs-nginx-module-73869650b6171fd6e5bf81b5b8caa89f021d6c7b/src目錄下的mod_fastdfs.conf文件拷貝到 /etc/fdfs/目錄下,這樣才能正常啟動Nginx mod_fastdfs.conf 專門配置Nginx的擴展模塊的修改mod_fastdfs.conf配置文件: base_path=/opt/fastdfs/nginx_modtracker_server=192.168.184.133:22122store_path0=/opt/fastdfs/storage/filesurl_have_group_name = true創鍵文件夾:mkdir -p /opt/fastdfs/nginx_mod其他路徑都存在所以不用創鍵配置Nginx的配置文件 #攔截請求路徑中包含 /group[1-9]/M0[0-9] 的請求,使用 fastdfs的Nginx 模塊進行轉發:
location ~ /group[1-9]/M0[0-9] {
? ? ?ngx_fastdfs_module;
}如果出現404訪問不到,檢查一下 url_have_group_name = false,如果為false改為true啟動與測試 啟動帶有fastdfs模塊的Nginx重啟fastDFS服務進程,執行如下命令:(不重啟也可以) fdfs_trackerd /etc/fdfs/tracker.conf restartfdfs_storaged /etc/fdfs/storage.conf restart重新上傳一個文件進行測試驗證:fdfs_test /etc/fdfs/client.conf upload /root/testfastfdsnginx.txt在瀏覽器訪問上傳的文件,顯示訪問成功當遇到400錯誤, 檢查配置/etc/fdfs/mod_fastdfs.confurl_have_group_name=true ?該配置表示訪問路徑中是否需要帶有group1,改為true表示路徑中需要有group1
十三、FastDFS提供的主要功能
? ?upload:上傳文件,download:下載文件,delete:刪除文件
十四、FastDFS文件系統的Java客戶端
前提你電腦安裝了maven使用mvn命令操作一下就行了fastDFS文件系統Java客戶端是指采用Java語言編寫的一套程序,專門用來訪問fastDFS文件系統由于maven倉庫里沒有該依賴所以:下載官方的源代碼:https://github.com/happyfish100/fastdfs-client-java/archive/master.zip解壓fastdfs-client-java-master,采用maven命令編譯成jar安裝到本地maven庫:mvn clean install在Java程序中使用它提供的API來訪問fastDFS文件系統
十五、FastDFS開發示例
使用Java客戶端,編程操作fastDFS分布式文件系統:
引入依賴:
<dependency><groupId>org.csource</groupId><artifactId>fastdfs-client-java</artifactId><version>1.27-SNAPSHOT</version>
</dependency>
代碼:
在類路徑中配置該文件:fdfs_client.conf配置,tracker_server可以配置多個,配置多個tracker_server連接集群
connect_timeout = 2
network_timeout = 30
charset = UTF-8
tracker_server=192.168.184.133:22122
代碼:
public class FastService {public static void main(String[] args) throws IOException, MyException {//1、初始化配置連接信息ClientGlobal.init("fdfs_client.conf");//檢查加載配置結果System.out.println("加載配置結果:ClientGlobal.configInfo(): " + ClientGlobal.configInfo());//2、創建一個Tracker的客戶端對象TrackerClient trackerClient = new TrackerClient();//3、通過Tracker的客戶端對象,獲取到一個Tracker服務器對象TrackerServer trackerServer = trackerClient.getConnection();//4、通過Tracker的客戶端對象和Tracker服務器對象,獲取到一個Storage服務器對象StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);//5、通過Tracker服務器對象和Storage服務器對象,構造一個Storage客戶端對象StorageClient storageClient = new StorageClient(trackerServer, storageServer);//有了上面的5步,接下來就可以正式去操作FastDFS了//文件上傳String[] strArray = storageClient.upload_file("G:/test.txt", "txt", null);for (String str : strArray) {System.out.println(str);}//文件下載,返回值0表示下載成功,其他值都是下載失敗,比如:-1, 1, -22 都是失敗的//strArray[0] group_name//strArray[1] remote_filename//G:/測試下載.txt local_filenameint download = storageClient.download_file(strArray[0], strArray[1], "G:/測試下載.txt");System.out.println("下載結果:"+download);//文件刪除,返回值0表示刪除成功,其他值都是刪除失敗,比如:-1, 1, -22 都是失敗的//int delete = storageClient.delete_file(strArray[0], strArray[1]);//System.out.println("刪除結果:"+delete);}}
fastdfs-client-java-master里面的README.md說的很清楚了
?
總結
以上是生活随笔為你收集整理的FastDFS分布式文件系统介绍及单机版安装的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。