FastDFS是一個開源的輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲,文件同步,文件訪問(文件上傳,文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站,視頻網站等等。FastDFS爲互聯網量身定製,充分考慮了冗餘備份,負載均衡,線性擴容等機制,並注重高可用,高性能等指標,使用FastDFS很容易搭建一套高性能的文件服務器集羣提供文件上傳,下載等服務。FastDFS服務端有兩個角色:跟蹤器(tracker)和存儲節點(storage)。跟蹤器主要做調度工作,在訪問上起負載均衡的作用,存儲節點存儲文件,完成文件管理的所有功能。
1.安裝環境裝備
跟蹤服務器:192.168.29.128
存儲服務器:192.168.29.129
服務器環境:Centos7
數據目錄:/opt/fastDFS/fastDFSDatadir
2.跟蹤服務器和存儲服務器均執行如下操作
2.1 編譯安裝所需依賴包
# yum install make cmake gcc gcc-c++
2.2 解壓libfastcommon-master.zip(需提前上傳或下載libfastcommon-master.zip到/usr/local/src目錄)
# cd /usr/local/src/
# unzip libfastcommon-master.zip
# cd libfastcommon-master
2.3 編譯安裝
# ./make.sh
# ./make.sh install
libfastcommon 默認安裝到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
2.4 因爲 FastDFS 主程序設置的lib目錄是/usr/local/lib,所以需要創建軟鏈接
# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
2.5 解壓FastDFS(需提前上傳或下載FastDFS_v5.05.tar.gz到/opt/fastDFS目錄下)
# cd /opt/fastDFS
# tar -zxvf FastDFS_v5.05.tar.gz
# cd FastDFS
2.6 編譯安裝
# ./make.sh
# ./make.sh install
採用默認安裝的方式安裝,安裝後的相應文件與目錄:
A.服務腳本在:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
B.配置文件在(樣例配置文件)
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
C.命令工具在/usr/bin/目錄下的:
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file
stop.sh
restart.sh
2.7 因爲FastDFS服務腳本設置的bin目錄是/usr/local/bin,但實際命令安裝在/usr/bin,可以進入/user/bin目錄使用以下命令查看fastDFS的相關命令:
因此需要修改FastDFS服務腳本中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged和/etc/init.d/fdfs_tracker兩個腳本中的/usr/local/bin修改成/usr/bin:
# vi /etc/init.d/fdfs_trackerd
使用查找替換命令進統一修改:%s+/usr/local/bin+/usr/bin
# vi /etc/init.d/fdfs_storaged
使用查找替換命令進統一修改:%s+/usr/local/bin+/usr/bin
3.配置 FastDFS 跟蹤器(192.168.29.128)
3.1 複製FastDFS跟蹤器樣例配置文件,並重命名:
# cd /etc/fdfs/
# cp tracker.conf.sample tracker.conf
3.2 創建數據目錄
# mkdir -p /opt/fastDFS/fastDFSDatadir/tracker
3.3 編輯跟蹤器配置文件
# vi /etc/fdfs/tracker.conf
修改內容如下:
disabled=false
port=22122
base_path=/opt/fastDFS/fastDFSDatadir/tracker
其他配置信息保持默認,具體配置參數可以參考:FastDFS配置參數詳解
3.4 防火牆中打開跟蹤器端口
3.5 啓動Tracker
# /etc/init.d/fdfs_trackerd start
(初次成功啓動,會在/opt/fastDFS/fastDFSDatadir/tracker目錄下創建data,logs兩個目錄)
4.配置FastDFS存儲(192.168.29.129)
4.1 複製FastDFS存儲器樣例配置文件,並重命名
# cd /etc/fdfs/
# cp storage.conf.sample storage.conf
4.2 創建數據目錄
# mkdir -p /opt/fastDFS/fastDFSDatadir/storage
4.3 編輯存儲器樣例配置文件
# vi /etc/fdfs/storage.conf
修改的內容如下:
disabled=false
port=23000
base_path=/opt/fastDFS/fastDFSDatadir/storage
store_path0=/opt/fastDFS/fastDFSDatadir/storage
tracker_server=192.168.29.128:22122
http.server_port=8888
其他配置信息保持默認,具體配置參數可以參考:FastDFS配置參數詳解
4.4 防火牆中打開存儲器端口
4.5 啓動 Storage
# /etc/init.d/fdfs_storaged start
(初次成功啓動,會在/opt/fastDFS/fastDFSDatadir/storage目錄下創建data,logs兩個目錄)
5.文件上傳測試(192.168.29.128)
5.1 複製FastDFS客戶端樣例配置文件,並重命名
# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
5.2 修改Tracker服務器中的客戶端配置文件
# vi /etc/fdfs/client.conf
修改內容如下
base_path=/opt/fastDFS/fastDFSDatadir/tracker
tracker_server=192.168.29.128:22122
5.3 執行如下文件上傳命令
# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/fastDFS/FastDFS_v5.05.tar.gz
返回ID號:group1/M00/00/00/wKgdgVkKT42AU1H4AAVFOL7FJU4.tar.gz
能返回以上文件ID,說明文件上傳成功
6. 在每個存儲節點上安裝Nginx模塊
6.1 fastdfs-nginx-module作用說明
FastDFS通過Tracker服務器,將文件放在Storage服務器存儲,但是同組存儲服務器之間需要進入文件複製,有同步延遲的問題。假設Tracker服務器將文件上傳到了192.168.29.128,上傳成功後文件ID已經返回給客戶端。此時FastDFS存儲集羣機制會將這個文件同步到同組存儲192.168.29.129,在文件還沒有複製完成的情況下,客戶端如果用這個文件ID在192.168.29.129上取文件,就會出現文件無法訪問的錯誤。而fastdfs-nginx-module可以重定向文件連接到源服務器取文件,避免客戶端由於複製延遲導致的文件無法訪問錯誤。(解壓後的fastdfs-nginx-module在nginx安裝時使用)
6.2 上傳 fastdfs-nginx-module_v1.16.tar.gz 到/usr/local/src
6.3 解壓
# cd /usr/local/src/
# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
6.4 修改fastdfs-nginx-module的config配置文件
# cd fastdfs-nginx-module/src
# vi config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改爲:CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
(注意:這個路徑修改是很重要的,不然在Nginx編譯的時候會報錯)
6.5 編譯安裝Nginx的時候添加fastdfs-nginx-module
如果對Nginx編譯安裝不熟悉的話,可以參考我之前的博客:Nginx編譯安裝詳細教程及常用命令介紹
這裏只需在配置Nginx參數的時候 使用如下命令添加模塊
# ./configure --prefix=/opt/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src
6.6 複製fastdfs-nginx-module源碼中的配置文件到/etc/fdfs目錄,並修改
# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vi /etc/fdfs/mod_fastdfs.conf
修改以下配置:
connect_timeout=10
base_path=/tmp
tracker_server=192.168.29.128:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/opt/fastDFS/fastDFSDatadir/storage
6.7 複製FastDFS的部分配置文件到/etc/fdfs目錄
# cd /opt/fastDFS/FastDFS/conf
# cp http.conf mime.types /etc/fdfs/
6.8 在/fastdfs/storage文件存儲目錄下創建軟連接,將其鏈接到實際存放數據的目錄
ln -s /opt/fastDFS/fastDFSDatadir/storage/data /opt/fastDFS/fastDFSDatadir/storage/data/M00
6.9 配置Nginx
在http節點下添加以下server配置
server{
listen 8888;
server_name localhost;
location ~/group([0-9])/M00{
ngx_fastdfs_module;
}
}
A.8888端口值是要與/etc/fdfs/storage.conf中的http.server_port=8888相對應,因爲http.server_port默認爲 8888,如果想改成80,則要對應修改過來
B.Storage對應有多個group的情況下,訪問路徑帶group名,如/group1/M00/00/00/xxx,對應的 Nginx 配置爲:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
C.如查下載時如發現老報404,將nginx.conf第一行user nobody修改爲user root後重新啓動
6.10 防火牆中打開Nginx的8888端口
6.11 重啓Nginx
6.12 訪問http://192.168.29.129:8888/group1/M00/00/00/wKgdgVkKT42AU1H4AAVFOL7FJU4.tar.gz下載剛剛上傳的文件,如果成功下載,則說明配置都成功了
注意:千萬不要使用kill -9命令強殺FastDFS進程,否則可能會導致binlog數據丟失
源碼地址:https://github.com/happyfish100/
下載地址:http://sourceforge.net/projects/fastdfs/files/
官方論壇:http://bbs.chinaunix.net/forum-240-1.html