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
綁定端口則啓動正常
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並編譯
cd /usr/local/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
即可看到圖片,集羣內容和安全問題下面繼續補充。