1、FastDFS介紹nginx
1.1.簡介c++
FastDFS是一款開源的高性能分佈式文件系統(DFS)。主要功能:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。主要解決了海量數據存儲問題,特別適合以中小文件(建議範圍:4KB < file_size < 500MB)爲載體的在線服務。git
FastDFS系統有三個角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Clinet)。github
Tracker Server:跟蹤服務器,主要作調節工做,起到均衡的做用;負責管理全部的storage server和group,每一個storage在啓動後會鏈接Tracker,告知本身所屬group等信息,並保持週期性心跳。vim
Storage Server:存儲服務器。主要提供容量和備份服務器;以group爲單位,每一個group內能夠有多臺storage server,數據互爲備份。服務器
Client:客戶端,上傳下載數據的服務器,也就是咱們本身的項目部署在的服務器。架構
1.2.FastDFS的存儲策略app
爲了支持大容量,存儲節點(服務器)採用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是互相獨立的,全部卷的文件容量累加就是整個存儲系統中的文件容量。一個卷能夠由一臺或多臺存儲服務器組成,一個卷下的存儲服務器的文件都是相同的,卷中的多臺存儲服務器起到了冗餘備份和負載均衡的做用。負載均衡
在卷中增長服務器時,同步已有的文件由系統自動完成,同步完成後,系統自動將新增服務器切換到線上提供的服務。當存儲空間不足時或即將耗盡時,能夠動態添加捲。只須要增長一臺或多臺服務器,並將他們配置成一個新的卷,這樣就擴大了存儲系統的容量。分佈式
1.3.FastDFS的上傳過程
FastDFS向使用者提供基本的文件訪問接口,好比upload、download、append、delete等,以客戶端庫的方式提供給用戶使用。
Storage Server會按期的向Tracker Server發送本身的存儲信息。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關係是對等的,因此客戶端上傳時能夠選擇任意一個Trackre。
當Tracker收到客戶端上傳文件請求時,會爲該文件分配一個能夠存儲文件的group,當選定了group後就要決定給客戶端分配group中的哪個storage server。當分配好storage server後,客戶端向storage發送寫文件請求,storage將會爲文件分配一個數據存儲目錄。而後爲文件分配一個fileid,最後根據以上的信息生成文件名存儲文件。
1.4.FastDFS的文件同步
寫文件時,客戶端將文件寫至group內的一個storage server即認爲寫文件成功,storage server寫完文件後,會由後臺線程將文件同步至同group內的其餘的storage server。
每一個storage寫文件後,會同時寫一份binlog,binlog裏不包含文件數據,只包含文件名等元信息,這份binlog用於後臺同步,storage會記錄向group內其餘storage同步的進度,以便重啓後能接上次的進度繼續同步;進度以時間戳的方式進行記錄,因此最好能保證集羣內的全部server的始終保持同步。
Storage的同步進度會做爲元數據的一部分彙報到tracker上,tracker在選擇讀storage的時候會以同步進度做爲參考。
1.5.FastDFS的文件下載
客戶端uploadfile成功後,會拿到一個storage生成的文件名,接下來客戶端根據這個文件名便可訪問到該文件。
2、安裝FastDFS環境
2.1.前言
操做環境:Centos 7.4
安裝包下載到/server/tools下,解壓到當前目錄
IP劃分:
172.10.0.110 Tracker Server
172.30.0.111 Group1,Storage Server
172.30.0.112 Group1,Storage Server
2.2.下載安裝libfasttcommon
libfastcommon是從FastDFS和FastDHT中提取出來的公共C函數庫,基礎環境,安裝便可。
下載
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
解壓
tar -zxvf V1.0.7.tar.gz
編譯、安裝
cd libfastcommon-1.0.7
./make.sh
./make.sh install
5.libfastcommon.so 安裝到了/usr/lib64/libfastcommon.so,可是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.3.下載FastDFS
1. 下載
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
2. 解壓
tar -zxvf V5.05.tar.gz
3. 編譯、安裝
cd fastdfs-5.05
./make.sh
./make.sh install
4. 默認安裝的相應文件與目錄
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/ 目錄下
5. FastDFS 服務腳本設置的 bin 目錄是 /usr/local/bin, 但實際命令安裝在 /usr/bin/ 下
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/fdfs_storaged /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
1. 進入 /etc/fdfs,複製 FastDFS 跟蹤器樣例配置文件 tracker.conf.sample,並重命名爲 tracker.conf
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
2. 編輯tracker.conf
# 配置文件是否不生效,false 爲生效
disabled=false
# 提供服務的端口
port=22122
# Tracker 數據和日誌目錄地址(根目錄必須存在,子目錄會自動建立)
base_path=/data/fastdfs/tracker
# HTTP 服務端口
http.server_port=80
3. 建立tracker基礎數據目錄,即base_path對應的目錄。
mkdir -p /data/fastdfs/tracker
4. 啓動Tracker
5. tracker server 目錄及文件結構
Tracker服務啓動成功後,會在base_path下建立data、logs兩個目錄。目錄結構以下:
${base_path}
|__data
| |__storage_groups.dat:存儲分組信息
| |__storage_servers.dat:存儲服務器列表
|__logs
| |__trackerd.log: tracker server 日誌文件
1. 進入 /etc/fdfs 目錄,複製 FastDFS 存儲器樣例配置文件 storage.conf.sample,並重命名爲 storage.conf
cd /etc/fdfs
cp storage.conf.sample storage.conf
2. 編輯storage.conf
vim storage.conf
# 配置文件是否不生效,false 爲生效
disabled=false
# 指定此 storage server 所在 組(卷)
group_name=group1
# storage server 服務端口
port=23000
# 心跳間隔時間,單位爲秒 (這裏是指主動向 tracker server 發送心跳)
heart_beat_interval=30
# Storage 數據和日誌目錄地址(根目錄必須存在,子目錄會自動生成)
base_path=/data/fastdfs/storage
# 存放文件時 storage server 支持多個路徑。這裏配置存放文件的基路徑數目,一般只配一個目錄。
store_path_count=1
# 逐一配置 store_path_count 個路徑,索引號基於 0。
# 若是不配置 store_path0,那它就和 base_path 對應的路徑同樣。
store_path0=/data/fastdfs/file
# FastDFS 存儲文件時,採用了兩級目錄。這裏配置存放文件的目錄個數。
# 若是本參數只爲 N(如: 256),那麼 storage server 在初次運行時,會在 store_path 下自動建立 N * N 個存放文件的子目錄。
subdir_count_per_path=256
# tracker_server 的列表 ,會主動鏈接 tracker_server
# 有多個 tracker server 時,每一個 tracker server 寫一行
tracker_server=172.30.0.110:22122
# 容許系統同步的時間段 (默認是全天) 。通常用於避免高峯同步產生一些問題而設定。
sync_start_time=00:00
sync_end_time=23:59
# 訪問端口
http.server_port=80
3. 建立Storage基礎數據目錄,對應base_path目錄。
mkdir -p /data/fastdfs/storage
4. 建立store_path0對應目錄
mkdir -p /data/fastdfs/file
5. 啓動Storage
6. 查看storage和tracker是否通訊
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
1. fastdfs-nginx-module模塊說明
FastDFS經過tracker服務器,將文件放在storage服務器存儲,可是同組存儲服務器之間須要進行文件複製,有同步延遲的問題。
假設tracker服務器將文件上傳到了172.30.0.111,上傳成功的文件ID已經返回給客戶端。
此時FastDFS存儲集羣機制會將這個文件同步到同組存儲172.30.0.112,在文件尚未複製完成的狀況下,客戶端若是用這個文件ID在172.30.0.112上取文件,就會出現文件沒法訪問的錯誤。
而fastdfs-nginx-module能夠重定向文件連接到源服務器取文件,避免客戶端因爲複製延遲致使的文件沒法訪問錯誤。
2. 下載fastdfs-nginx-module
3. 解壓
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
4. 重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module-master
1. 安裝依賴包
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2. 下載nginx
wget http://nginx.org/download/nginx-1.12.2.tar.gz
3. 解壓
tar zxf nginx-1.12.2.tar.gz
4. 編譯安裝
cd nginx-1.12.2
./configure --add-module=../fastdfs-nginx-module-master/src
make && make install
5. 查看nginx的模塊
/usr/local/nginx/sbin/nginx -V
6. 修改nginx.conf
注意:listen 80端口要與/etc/fdfs/stortage.conf中的(前面改爲爲80了)相對應。若是改爲其餘端口,則須要統一,同時在防火牆中打開該端口。
Location的配置,若是有多個group則配置location ~/group([0-9])/M00.沒有則不用配group。
1. 複製 fastdfs-nginx-module 源碼中的配置文件到/etc/fdfs 目錄
cd /softpackages/fastdfs-nginx-module-master/src
cp mod_fastdfs.conf /etc/fdfs/
2. 修改配置
# 鏈接超時時間
connect_timeout=10
# Tracker Server
tracker_server=172.30.0.110:22122
# StorageServer 默認端口
storage_server_port=23000
# 若是文件ID的uri中包含/group**,則要設置爲true
url_have_group_name = true
# Storage 配置的store_path0路徑,必須和storage.conf中的一致
store_path0=/data/fastdfs/file
3. 啓動nginx
環境架構圖: