FastDFS簡介
FastDFS是一個輕量級的開源Distributed File System
FastDFS主要解決了大容量的檔案儲存體和高並發訪問的問題,檔案存取時實現了負載平衡
FastDFS實現了軟體方式的RAID,可以使用廉價的IDE硬碟進行儲存
支援儲存伺服器線上擴容
支援相同內容的檔案只儲存一份,節約磁碟空間
FastDFS只能通過Client API訪問,不支援POSIX訪問方式
FastDFS特別適合大中型網站使用,用來儲存資源檔(如:圖片、文檔、音頻、視頻等等)
系統架構
Tracing Service器:192.168.1.131(安裝到consumer)
儲存伺服器:192.168.1.51(安裝到CI伺服器)
環境:CentOS6.6
使用者:root
資料目錄 :/fastdffs(資料目錄按你的資料盤掛載路徑而定)
安裝包
FastDFS v5.05
libfastcommon-master.zip(是從 FastDFS 和 FastDHT 中提取出來的公用 C 函數庫) fastdfs-nginx-module_v1.16.tar.gz
nginx-1.6.2.tar.gz
fastdfs_client_java._v1.25.tar.gz
源碼地址:https://github.com/happyfish100/
下載地址:http://sourceforge.net/projects/fastdfs/files/
官方論壇:http://bbs.chinaunix.net/forum-240-1.html
一、所有Tracing Service器和儲存伺服器均執行如下操作
1.編譯和安裝所需的依賴包
Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr 3 00:12:21 2016 from 192.168.1.2
[root@consume ~]# yum install make cmake gcc gcc-c++
2.安裝 libfastcommon:
(1)上傳或下載 libfastcommon-master.zip 到/usr/local/src 目錄
(2)解壓
[root@consume ~]# cd /usr/local/src/
[root@consume src]# unzip libfastcommon-master.zip
[root@consume src]# cd libfastcommon-master
[root@consume libfastcommon-master]# ll
total 28
-rw-r--r--. 1 root root 2913 Feb 27 2015 HISTORY
-rw-r--r--. 1 root root 582 Feb 27 2015 INSTALL
-rw-r--r--. 1 root root 1342 Feb 27 2015 libfastcommon.spec
-rwxr-xr-x. 1 root root 2151 Feb 27 2015 make.sh
drwxr-xr-x. 2 root root 4096 Feb 27 2015 php-fastcommon
-rw-r--r--. 1 root root 617 Feb 27 2015 README
drwxr-xr-x. 2 root root 4096 Feb 27 2015 src
(3) 編譯、安裝 [root@consume libfastcommon-master]# ./make.sh
[root@consume libfastcommon-master]# ./make.sh install
# libfastcommon預設安裝到了
/usr/lib64/libfastcommon.so
/usr/lib64/libfdfsclient.so
(4)因為 FastDFS 主程式設定的 lib 目錄是/usr/local/lib,所以需要建立軟連結. [root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
安裝 FastDFS
(1)上傳或下載 FastDFS 源碼包(FastDFS_v5.05.tar.gz)到 /usr/local/src 目錄
(2)解壓
[root@consume libfastcommon-master]# cd /usr/local/src
root@consume src]# ll | grep Fast
-rw-r--r--. 1 root root 345400 Mar 25 2015 FastDFS_v5.05.tar.gz
[root@consume src]# tar -zxvf FastDFS_v5.05.tar.gz
(3)編譯、安裝(編譯前要確保已經成功安裝了 libfastcommon)
[root@consume src]# cd FastDFS
[root@consume FastDFS]# ./make.sh
[root@consume FastDFS]# ./make.sh install
採用預設安裝的方式安裝,安裝後的相應檔案與目錄:
A、服務指令碼在:
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_tracker
[root@consume FastDFS]# ls /etc/init.d | grep fdfs
fdfs_storaged
fdfs_trackerd
B、設定檔在(範例設定檔):
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
[root@consume FastDFS]# ls /etc/fdfs | grep conf
client.conf.sample
storage.conf.sample
tracker.conf.sample
C、命令工具在/usr/bin/目錄下的:
[root@consume FastDFS]# ls /usr/bin | grep fdfs
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
4)因為 FastDFS 服務指令碼設定的 bin 目錄是/usr/local/bin,但實際命令安裝在/usr/bin,可以進入
/user/bin 目錄使用以下命令查看 fdfs 的相關命令:
[root@consume FastDFS]# cd /usr/bin
[root@consume bin]# ll | grep fdfs
因此需要修改 FastDFS 服務指令碼中相應的命令路徑,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker 兩個指令碼中的/usr/local/bin 修改成/usr/bin:
使用尋找替換命令進統一修改:%s+/usr/local/bin+/usr/bin
[root@consume bin]# cd /etc/init.d
[root@consume init.d]# vi fdfs_trackerd
[root@consume init.d]# vi fdfs_storaged
跟蹤器與儲存空間設定檔都更改是為了保證檔案的同步和一致性
二、配置 FastDFS 跟蹤器(192.168.1.131)
1、複製 FastDFS 跟蹤器範例設定檔,並重新命名:
[root@consume init.d]# cd /etc/fdfs/
[root@consume fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Apr 3 19:11 client.conf.sample
-rw-r--r--. 1 root root 7829 Apr 3 19:11 storage.conf.sample
-rw-r--r--. 1 root root 7102 Apr 3 19:11 tracker.conf.sample
[root@consume fdfs]# cp tracker.conf.sample tracker.conf
2、編輯跟蹤器設定檔:
[root@consume fdfs]# vi /etc/fdfs/tracker.conf
修改的內容如下:
disabled=false
port=22122
base_path=/fastdfs/tracker
(其它參數保留預設配置,具體配置解釋請參考官方文檔說明:
http://bbs.chinaunix.net/thread-1941456-1-1.html )
3、 建立基礎資料目錄(參考基礎目錄 base_path 配置): [root@consume fdfs]# mkdir -p /fastdfs/tracker
4、 防火牆中開啟跟蹤器連接埠(預設為 22122): [root@consume fdfs]# vi /etc/sysconfig/iptables
添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
[root@consume fdfs]# cat /etc/sysconfig/iptables | grep 22122
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重啟
[root@consume fdfs]# service iptables restart
5、 啟動 Tracker: [root@consume fdfs]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server:
查看 FastDFS Tracker 是否已成功啟動:
[root@consume fdfs]# ps -ef | grep fdfs
root 3870 1 0 19:50 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 3879 3028 0 19:51 pts/0 00:00:00 grep fdfs
(初次成功啟動,會在/fastdfs/tracker 目錄下建立 data、logs 兩個目錄)
[root@consume fdfs]# ll /fastdfs/tracker/
total 8
drwxr-xr-x. 2 root root 4096 Apr 3 19:50 data
drwxr-xr-x. 2 root root 4096 Apr 3 19:50 logs
[root@consume fdfs]#
6.關閉 Tracker [root@consume fdfs]# /etc/init.d/fdfs_trackerd stop
stopping fdfs_trackerd ...
7、 設定 FastDFS 跟蹤器開機啟動:
[root@consume fdfs]# vi /etc/rc.d/rc.local
## FastDFS Tracker
/etc/init.d/fdfs_trackerd start 驗證是否設定開機啟動
[root@consume fdfs]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd is stopped
[root@consume fdfs]# reboot
Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr 3 18:44:38 2016 from 192.168.1.2
[root@consume ~]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd (pid 2152) is running...
[root@consume ~]#
三、配置 FastDFS 儲存(192.168.1.51)
1、 複製 FastDFS 儲存空間範例設定檔,並重新命名:
[root@yxq init.d]# cd /etc/fdfs
[root@yxq fdfs]# ll
total 20
-rw-r--r-- 1 root root 1461 Apr 3 21:45 client.conf.sample
-rw-r--r-- 1 root root 7829 Apr 3 21:45 storage.conf.sample
-rw-r--r-- 1 root root 7102 Apr 3 21:45 tracker.conf.sample
[root@yxq fdfs]# cp storage.conf.sample storage.conf
2、 編輯儲存空間範例設定檔:
[root@yxq fdfs]# vi /etc/fdfs/storage.conf
修改的內容如下:
disabled=false port=23000
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
tracker_server=192.168.4.131:22122
http.server_port=8888
(其它參數保留預設配置,具體配置解釋請參考官方文檔說明:
http://bbs.chinaunix.net/thread-1941456-1-1.html )
3、 建立基礎資料目錄(參考基礎目錄 base_path 配置): [root@yxq fdfs]# mkdir -p /fastdfs/storage
4、 防火牆中開啟儲存空間連接埠(預設為 23000):
[root@yxq fdfs]# vi /etc/sysconfig/iptables
添加如下連接埠行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
[root@yxq fdfs]# cat /etc/sysconfig/iptables | grep 23000
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重啟防火牆:
[root@yxq fdfs]# service iptables restart
5、 啟動 Storage: [root@yxq fdfs]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server:
看 FastDFS Storage 是否已成功啟動 [root@yxq fdfs]# ps -ef | grep fdfs
root 11997 1 0 22:16 pts/0 00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root 12000 11293 0 22:16 pts/0 00:00:00 grep fdfs
(初次成功啟動,會在/fastdfs/storage 目錄下建立data、logs 兩個目錄) [root@yxq fdfs]# ll /fastdfs/storage/
6、 關閉 Storage: [root@yxq fdfs]# /etc/init.d/fdfs_storaged stop
stopping fdfs_storaged ...
7、 設定 FastDFS 儲存空間開機啟動: [root@yxq fdfs]# vi /etc/rc.d/rc.local
添加:
## FastDFS Storage
/etc/init.d/fdfs_storaged start
四、檔案上傳測試(192.168.4.121)
1、修改 Tracker 伺服器中的用戶端設定檔:
[root@consume ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
[root@consume ~]# vi /etc/fdfs/client.conf
修改
base_path=/fastdfs/tracker
tracker_server=192.168.1.131:22122
執行如下命令
[root@consume ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz
group1/M00/00/00/wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
(能返回以上檔案ID,說明檔案上傳成功)
以也可以在儲存伺服器根據group1查看
[root@yxq fdfs]# ll /fastdfs/storage/data/00/00/
total 340
-rw-r--r-- 1 root root 345400 Apr 3 22:27 wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
[root@yxq fdfs]# date
Sun Apr 3 22:31:54 PDT 2016
[root@yxq fdfs]#
六、在每個儲存節點上安裝nginx(只需要在儲存節點伺服器上安裝即可)
1.fastdfs-nginx-module作用說明:
FastDFS通過Tracker伺服器,將檔案放在Storage伺服器儲存,但是同組儲存伺服器之間需要進入檔案複製,有同步延遲問題。
假設Tracker伺服器將檔案 上傳到了192.168.1.51,上傳成功後檔案ID已經返回給用戶端。此時FastDFS儲存叢集機制會將這個檔案
同步到儲存192.168.1.52,在檔案還沒有複製完成的情況下,用戶端如果用這個檔案 ID在192.168.1.52上取檔案,就會出現檔案無
法訪問的錯誤,而fastdfs-nginx-module可以重新導向檔案串連到原始伺服器取檔案,避免用戶端由於複寫延遲導致的檔案無法訪問錯
誤。(解壓後的fastdfs-nnginx-module在nginx安裝時使用)
2.上傳fastdfs-nginx-module_v1.16.tar.gz到/usr/local/src中(開始已經上傳)
3.解壓
[root@yxq src]# ls
FastDFS FastDFS_v5.05.tar.gz ng
fastdfs_client_java._v1.25.tar.gz libfastcommon-master re
fastdfs-nginx-module_v1.16.tar.gz libfastcommon-master.zip re
[root@yxq src]# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
4、修改fastdfs-nginx-module的config設定檔
[root@yxq src]# cd fastdfs-nginx-module/src
[root@yxq 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/"
5.上傳當前穩定版本Nginx(nginx-1.6.2.tar.gz) 到/usr/local/src目錄
6.安裝編譯Nginx所需的依賴包
[root@yxq src]# yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel
7.編譯安裝Nginx(添加fastdfs-nginx-module模組)
[root@yxq src]# cd /usr/local/src/
[root@yxq src]# tar -zxvf nginx-1.6.2.tar.gz
[root@yxq src]# cd nginx-1.6.2
[root@yxq nginx-1.6.2]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
[root@yxq nginx-1.6.2]# make && make install
8、複製fastdfs-nginx-module源碼中的設定檔到/etc/fdfs目錄 ,並修改
[root@yxq nginx-1.6.2]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改以下配置
connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.131:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/fastdfs/storage
9、複製FastDFS的部分設定檔到/etc/fdfs目錄
[root@yxq nginx-1.6.2]# cd /usr/local/src/FastDFS/conf
[root@yxq conf]# cp http.conf mime.types /etc/fdfs/
10、在/fastdfs/storage檔案儲存體目錄 下建立軟串連,將其串連到實際存放資料的目錄
[root@yxq conf]# ln -s /fastdfs/storage/data /fastdfs/storage/data/M00
11、配置Nginx
簡潔版nginx配置範例
root@yxq conf]# cd /usr/local/nginx/
[root@yxq nginx-1.6.2]# cd conf
[root@yxq conf]# ls
fastcgi.conf koi-utf mime.types scgi_params win-utf
fastcgi_params koi-win nginx.conf uwsgi_params
[root@yxq conf]# vi nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group([0-9]) /M00{
#alias /fastdfs/storage/data;
ngx_fastdfs_module;
}
#error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
}
注意、說明
A.8888連接埠值是要與/etc/fdfs/storage.conf的http.server_port=8888相對應
因為http.server_port預設為8888,如果想改成80,則要對應修改過來
B.Storage對應有多個group的情況下,訪問路徑帶group名,如/group1/M00/00/xxx,
對應的Nginx配置為
location ~/group([0-9]) /M00{
ngx_fastdfs_module;
}
C.如查下載時如發現老報404,將nginx.conf第一行的user nobody修改為user root後重啟
12.防火牆中開啟Nginx的8888連接埠
[root@yxq conf]# vi /etc/sysconfig/iptables
添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# cat /etc/sysconfig/iptables | grep 8888
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# service iptables restart
13、啟動Nginx
[root@yxq conf]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=15553
(重啟Nginx的命令為:/usr/local/nginx/sbin/nginx -s reload
[root@yxq conf]# /usr/local/nginx/sbin/nginx -s reload
ngx_http_fastdfs_set pid=15557
[root@yxq conf]# ps -ef | grep ngx_http_fastdfs_set
root 15561 11293 0 23:25 pts/0 00:00:00 grep ngx_http_fastdfs_set
[root@yxq conf]#
)
14、通過瀏覽器訪問測試上傳的檔案
訪問上傳的檔案
在Java代碼中使用FastDFS