FastDFS簡介
FastDFS 是用 c 語言編寫的一款開源的分布式檔案系統。FastDFS 為網際網路量身定制,充分考慮了備援備份、負載均衡、線性擴容等機制,并注重高可用、高性能等名額,使用 FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳、下載下傳等服務。
FastDFS 架構包括 Tracker server 和 Storage server。用戶端請求 Tracker server 進行檔案上傳、下載下傳,通過 Tracker server 排程最終由 Storage server 完成檔案上傳和下載下傳。
Tracker server 作用是負載均衡和排程,通過 Tracker server 在檔案上傳時可以根據一些政策找到 Storage server 提供檔案上傳服務。可以将 tracker 稱為追蹤伺服器或排程伺服器。
Storage server 作用是檔案存儲,用戶端上傳的檔案最終存儲在 Storage 伺服器上,Storageserver 沒有實作自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以将storage稱為存儲伺服器。
服務端兩個角色:
Tracker:管理叢集,tracker 也可以實作叢集。每個 tracker 節點地位平等。收集 Storage 叢集的狀态。
Storage:實際儲存檔案 Storage 分為多個組,每個組之間儲存的檔案是不同的。每個組内部可以有多個成員, 組成員内部儲存的内容是一樣的,組成員的地位是一緻的,沒有主從的概念。
Ubuntu1604安裝配置FastDFS:
-
安裝libfastcommon
下載下傳位址:https://github.com/happyfish100/libfastcommon.git
在/usr/fastdfs目錄下解壓、編譯:
root@linuxidc: /usr/fastdfs# unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
-
安裝FastDFS
下載下傳可百度搜尋FastDFS_v5.04.tar.gz下載下傳,使用xhell存放到伺服器
也可以直接下載下傳:
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar xf V5.11.tar.gz
cd fastdfs-5.11
./make.sh
./make.sh install
安裝完成後所有的配置檔案在 /etc/fdfs/ 目錄下
-
配置tracker
進入到 /etc/fdfs 目錄下,複制模版檔案tracker.conf.sample到 tracker.conf
cp client.conf.sample client.conf
cp tracker.conf.sample tracker.conf
cp storage.conf.sample storage.conf
建立資料檔案和日志檔案目錄:
mkdir -pv /data/fastdfs/tracker
mkdir: 已建立目錄 "/data"mkdir:
已建立目錄 "/data/fastdfs"mkdir:
已建立目錄 “/data/fastdfs/tracker”
編輯 tracker.conf 檔案,測試的時候隻需要修改以下參數即可
disabled=false #啟用配置檔案
port=22122 #設定 tracker 的端口号
base_path=/data/fastdfs/tracker #設定 tracker 的資料檔案和 日志目錄(需預先建立)
http.server_port=8888 #設定 http 端口号
http.server_port=8888 指的是在tracker伺服器上啟動http服務程序,如:apache或者nginx 啟動時所監聽的端口
4.運作tracker:
啟動tracker程序,然後使用netstat 檢視端口是 否起來。
指令如下:
fdfs_trackerd /etc/fdfs/tracker.conf restart
注:如不能正常啟動則 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
netstat -antp | grep trackerd
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIjNwEDMxETM2IDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
綁定端口則啟動正常
5.配置storage
建立資料檔案和日志檔案目錄:
mkdir -pv /data/fastdfs/storage
指令如下:
vim storage.conf
修改内容如下:
disabled=false#啟用配置檔案
group_name=group1 #組名,根據實際情況修改
port=23000 #設定 storage 的端口号
base_path=/data/fastdfs/storage #設定 storage 的日志目錄(需預先建立)
store_path_count=1 #存儲路徑個數,需要和 store_path 個數比對
store_path0=/data/fastdfs/storage #存儲路徑
tracker_server=127.0.0.1:22122 #tracker 伺服器的 IP 位址和端口号,注意不能使用127.0.0.1,使用内網ip或者公網ip
http.server_port=8888 #設定storage上啟動的http服務的
端口号,如安裝的nginx的端口号
運作storage:
fdfs_storaged /etc/fdfs/storage.conf restart
注:如不能正常啟動則
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
檢視端口是否啟動
netstat -antp | grep storage
6.配置client.conf
建立資料檔案和日志檔案目錄:
mkdir -pv /data/fastdfs/log
指令如下:
vim client.conf
修改内容如下:
base_path=/data/fastdfs/log #設定 log 的日志目錄(需預先建立)
tracker_server=xxx.xx.xx.xxx:22122 #tracker伺服器的 IP 位址和端口号 根據自己tracker伺服器配置
http.tracker_server_port=8888
-
用戶端上傳檔案測試
進入/usr/local/bin/目錄,上傳檔案,執行
sudo fdfs_test /etc/fdfs/client.conf upload a.txt
注:a.txt可以在/usr/local/bin/目錄下自己建立一個
如果指令行回報檔案位址
說明上傳完成。
安裝fastdfs-nginx-module子產品
FastDFS通過Tracker伺服器,将檔案放在Storage伺服器存儲,但是同組存儲伺服器之間需要進入檔案複制,有同步延遲的問題。假設Tracker伺服器将檔案上傳到了192.168.104.118,上傳成功後檔案ID已經傳回給用戶端。此時FastDFS存儲叢集機制會将這個檔案同步到同組存儲192.168.104.119,在檔案還沒有複制完成的情況下,用戶端如果用這個檔案ID在192.168.104.119上取檔案,就會出現檔案無法通路的錯誤。而fastdfs-nginx-module可以重定向檔案連接配接到源伺服器取檔案,避免用戶端由于複制延遲導緻的檔案無法通路錯誤。
#建立nginx下載下傳目錄
mkdir -p /usr/local/bak/nginx
#建立日志存儲目錄
mkdir -p /data/fastdfs/nginx
cd /usr/local/bak/nginx
#下載下傳并解壓
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz fastdfs-nginx-module-V1.20.tar.gz
tar xf V1.20
cd fastdfs-nginx-module-1.20/src/
拷貝fastdfs-nginx-module子產品的配置檔案mod_fastdfs.conf到/etc/fdfs目錄中并編輯
cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
編輯fastdfs-nginx-module-1.20/src/目錄下的config檔案(沒字首,沒字尾,就叫config),主要修改以下兩處地方,否則會有報錯,而且報錯是不可預料的,不要問為什麼,反正就是幹。
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
拷貝fastdfs-nginx-module子產品的配置檔案mod_fastdfs.conf到/etc/fdfs目錄中并編輯
cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
修改内容如下,圈紅為重點修改部分(感謝@驿外殘香 回報,此處的store_path0應該與storage.conf中的store_path0一緻,這樣nginx才能夠找到資源的正确路徑):
base_path=/data/fastdfs/nginx
store_path0=/data/fastdfs/storage
tracker_server=tracker_server=xx.xxx.xx.xx:22122 #填本機外網ip即可
storage_server_port=23000(預設配置為23000)
url_have_group_name = true
group_name=group1(預設配置為group1)
安裝nginx(此處極易出錯務必小心謹慎)
解壓nginx到/usr/local
wget https://nginx.org/download/nginx-1.15.8.tar.gz --no-check-certificate
tar xf nginx-1.15.8.tar.gz
此時編譯nginx會報錯,需要安裝pcre工具和zlib工具包
#我是将所有工具包下載下傳并放置在/srv/ftp下
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
将上述兩個工具包解壓至/usr/local/
tar -xzvf pcre-8.40.tar.gz -C /usr/local/
tar -xzvf zlib-1.2.11.tar.gz -C /usr/local/
進入pcre-8.40并編譯
cd /usr/local/pcre-8.40
#編譯1
./configure
#編譯2
make && make install
進入zlib-1.2.11并編譯
#編譯1
./configure
#編譯2
make && make install
安裝編譯時需要用到的庫和工具
apt-get install build-essential libtool gcc automake autoconf make
執行成功不報錯後
編譯nginx
cd nginx-1.15.8
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --sbin-path=/usr/local/nginx/sbin --add-module=/usr/local/bak/nginx/fastdfs-nginx-module-1.20/src
make && make install
未報錯即為編譯成功,如果有報錯必須解決,否則nginx無法啟動成功。
拷貝FastDFS中的部配置設定置檔案到/etc/fdfs目錄中
cp /usr/fastdfs/fastdfs-5.11//conf/http.conf /etc/fdfs/
cp /usr/fastdfs/fastdfs-5.11//conf/mime.types /etc/fdfs/
配置nginx的配置檔案,路徑是/application/nginx/conf/nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
啟動nginx
先上傳一個檔案
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/fastdfs/111.png
上傳成功傳回了一個檔案位址:
測試下載下傳:
http://xx.xxx.xx.xx:8888/group1/M00/00/00/rBM2HF6iorCAMeNOAAKo50Gq43I582.png
即可看到圖檔,叢集内容和安全問題下面繼續補充。