Github倉庫
Github介紹: https://github.com/hAppyfish100/fastdfs
Github文檔: https://github.com/happyfish100/fastdfs/wiki
FastDFS介紹
FastDFS 是用 c 語言編寫的一款開源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS 架構(gòu)包括 Tracker server 和 Storage server。客戶端請求 Tracker server 進(jìn)行文 件上傳、下載,通過 Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負(fù)載均衡和調(diào)度,通過 Tracker server 在文件上傳時可以根據(jù)一些 策略找到 Storage server 提供文件上傳服務(wù)。可以將 tracker 稱為追蹤服務(wù)器或調(diào)度服務(wù) 器。
Storage server 作用是文件存儲,客戶端上傳的文件最終存儲在 Storage 服務(wù)器上, Storageserver 沒有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來管理文件。可以將 storage 稱為存儲服務(wù)器。
服務(wù)端兩個角色:
- Tracker:管理集群,tracker 也可以實(shí)現(xiàn)集群。每個 tracker 節(jié)點(diǎn)地位平等。收集 Storage 集群的狀態(tài)。
- Storage:實(shí)際保存文件 Storage 分為多個組,每個組之間保存的文件是不同的。每 個組內(nèi)部可以有多個成員,組成員內(nèi)部保存的內(nèi)容是一樣的,組成員的地位是一致的,沒有 主從的概念。
文件上傳流程
客戶端上傳文件后存儲服務(wù)器將文件 ID 返回給客戶端,此文件 ID 用于以后訪問該文 件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級目錄,文件名。
group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
- group1 組名:文件上傳后所在的 storage 組名稱,在文件上傳成功后有 storage 服務(wù)器返回, 需要客戶端自行保存。
- 虛擬磁盤路徑:storage 配置的虛擬路徑,與磁盤選項(xiàng) store_path*對應(yīng)。如果配置了
- /M00 : store_path0 則是 M00,如果配置了 store_path1 則是 M01,以此類推。
- /00/00:數(shù)據(jù)兩級目錄:storage 服務(wù)器在每個虛擬磁盤路徑下創(chuàng)建的兩級目錄,用于存儲數(shù)據(jù) 文件。
- /wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz文件名:與文件上傳時不同。是由存儲服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲 服務(wù)器 IP 地址、文件創(chuàng)建時間戳、文件大小、隨機(jī)數(shù)和文件拓展名等信息。
文件下載流程
FastDFS安裝
使用的系統(tǒng)軟件
名稱說明centos7.xlibfatscommonFastDFS分離出的一些公用函數(shù)包FastDFSFastDFS本體fastdfs-Nginx-moduleFastDFS和nginx的關(guān)聯(lián)模塊nginxnginx1.15.4
編譯環(huán)境
yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim -y
磁盤目錄
說明位置所有安裝包/usr/local/src數(shù)據(jù)存儲位置/home/dfs/#這里我為了方便把日志什么的都放到了dfs
#創(chuàng)建數(shù)據(jù)存儲目錄
[root@server01 ~]# mkdir -p /home/dfs
#切換到安裝目錄準(zhǔn)備下載安裝包
[root@server01 ~]# cd /usr/local/src
組件下載與安裝
下面的步驟安裝切換到安裝目錄下cd /usr/local/src進(jìn)行開始。
安裝libfatscommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ ./make.sh && ./make.sh install #編譯安裝
安裝FastDFS
cd ../ #返回上一級目錄
git clone https://github.com/happyfish100/fastdfs.git --depth 1
cd fastdfs/
./make.sh && ./make.sh install #編譯安裝
#配置文件準(zhǔn)備
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客戶端文件,測試用
cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx訪問使用
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx訪問使用
安裝fastdfs-nginx-module
cd ../ #返回上一級目錄 git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1 cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
安裝nginx
wget http://nginx.org/download/nginx-1.15.4.tar.gz #下載nginx壓縮包
tar -zxvf nginx-1.15.4.tar.gz #解壓
cd nginx-1.15.4/
#添加fastdfs-nginx-module模塊
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/
make && make install #編譯安裝
單機(jī)部署
部署拓?fù)鋱D
按照上面的命令就可用安裝好相應(yīng)的各個組件,那么下面來進(jìn)行單機(jī)部署的配置。
關(guān)閉防火墻
service firewalld stop
tracker服務(wù)
tracker配置
#服務(wù)器ip為 192.168.43.128
vim /etc/fdfs/tracker.conf
#需要修改的內(nèi)容如下
port=22122 # tracker服務(wù)器端口(默認(rèn)22122,一般不修改)
base_path=/home/dfs # 存儲日志和數(shù)據(jù)的根目錄
tracker服務(wù)相關(guān)命令
/etc/init.d/fdfs_trackerd start #啟動tracker服務(wù) /etc/init.d/fdfs_trackerd restart #重啟動tracker服務(wù) /etc/init.d/fdfs_trackerd stop #停止tracker服務(wù) chkconfig fdfs_trackerd on #自啟動tracker服務(wù)
啟動tracker服務(wù)
[root@server01 src]# /etc/init.d/fdfs_trackerd start Reloading systemd: [ OK ] Starting fdfs_trackerd (via systemctl): [ OK ] [root@server01 src]#
storage服務(wù)
storage配置
vim /etc/fdfs/storage.conf
#需要修改的內(nèi)容如下
port=23000 # storage服務(wù)端口(默認(rèn)23000,一般不修改)
base_path=/home/dfs # 數(shù)據(jù)和日志文件存儲根目錄
store_path0=/home/dfs # 第一個存儲目錄
tracker_server=192.168.43.128:22122 # tracker服務(wù)器IP和端口
http.server_port=8888 # http訪問文件的端口(默認(rèn)8888,看情況修改,和nginx中保持一致)
啟動storage服務(wù)相關(guān)命令
/etc/init.d/fdfs_storaged start #啟動storage服務(wù) /etc/init.d/fdfs_storaged restart #重動storage服務(wù) /etc/init.d/fdfs_storaged stop #停止動storage服務(wù) chkconfig fdfs_storaged on #自啟動storage服務(wù)
啟動storage服務(wù)
[root@server01 src]# /etc/init.d/fdfs_storaged start Starting fdfs_storaged (via systemctl): [ OK ] [root@server01 src]#
client測試上傳文件
vim /etc/fdfs/client.conf #需要修改的內(nèi)容如下 base_path=/home/dfs tracker_server=192.168.43.128:22122 #tracker服務(wù)器IP和端口 #保存后測試,返回ID表示成功 如:group1/M00/00/00/xx.tar.gz fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz
執(zhí)行如下:
nginx服務(wù)
配置nginx訪問
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的內(nèi)容如下
tracker_server=192.168.43.128:22122 #tracker服務(wù)器IP和端口
url_have_group_name=true
store_path0=/home/dfs
#配置nginx.config
vim /usr/local/nginx/conf/nginx.conf
#添加如下配置
server {
listen 8888; ## 該端口為storage.conf中的http.server_port相同
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 啟動nginx服務(wù)
/usr/local/nginx/sbin/nginx #啟動nginx
/usr/local/nginx/sbin/nginx -s reload #重啟nginx
#測試下載
wget http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
啟動nginx服務(wù)以及測試下載文件
[root@server01 src]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=4818
[root@server01 src]# wget http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
--2019-08-12 14:03:36-- http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
Connecting to 192.168.43.128:8888... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1024694 (1001K) [application/octet-stream]
Saving to: ‘wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz’
100%[=================================================================================================================================>] 1,024,694 --.-K/s in 0.02s
2019-08-12 14:03:36 (40.9 MB/s) - ‘wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz’ saved [1024694/1024694]
[root@server01 src]#
[root@server01 src]# ls
fastdfs fastdfs-nginx-module libfastcommon nginx-1.15.4 nginx-1.15.4.tar.gz wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
[root@server01 src]#
可用看到已經(jīng)下載成功,F(xiàn)astDFS的單機(jī)部署已完成。
分布式部署
分布式部署拓?fù)?/strong>
分別在兩臺服務(wù)器都安裝上Tacker以及Storage服務(wù),在第一臺服務(wù)安裝Nginx進(jìn)行下載服務(wù)的反向代理。
按照前面的步驟對兩臺服務(wù)器進(jìn)行安裝,安裝完畢之后,下面來進(jìn)行分布式配置。
tracker配置
配置每臺服務(wù)器的tracker配置,都按照以下配置進(jìn)行。
#服務(wù)器ip為 192.168.196.132,192.168.196.133 vim /etc/fdfs/tracker.conf #需要修改的內(nèi)容如下 port=22122 # tracker服務(wù)器端口(默認(rèn)22122,一般不修改) base_path=/home/dfs # 存儲日志和數(shù)據(jù)的根目錄 # 啟動服務(wù) /etc/init.d/fdfs_trackerd start
storage配置
配置每臺服務(wù)器的storage配置,都按照以下配置進(jìn)行。
vim /etc/fdfs/storage.conf #需要修改的內(nèi)容如下 port=23000 # storage服務(wù)端口(默認(rèn)23000,一般不修改) base_path=/home/dfs # 數(shù)據(jù)和日志文件存儲根目錄 store_path0=/home/dfs # 第一個存儲目錄 tracker_server=192.168.196.132:22122 # 服務(wù)器1 tracker_server=192.168.196.133:22122 # 服務(wù)器2 http.server_port=8888 # http訪問文件的端口(默認(rèn)8888,看情況修改,和nginx中保持一致) # 啟動服務(wù) /etc/init.d/fdfs_storaged start
client測試上傳文件
兩臺服務(wù)器都配置一個client進(jìn)行測試。
vim /etc/fdfs/client.conf
#需要修改的內(nèi)容如下
base_path=/home/dfs
tracker_server=192.168.196.132:22122 # 服務(wù)器1
tracker_server=192.168.196.133:22122 # 服務(wù)器2
#保存后測試,返回ID表示成功
fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz
執(zhí)行上傳文件的返回結(jié)果:
[root@centos7-server02 nginx-1.15.4]# fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.15.4.tar.gz group1/M00/00/00/wKjEhF1SQHKAEN6aAA-itrfn0m4.tar.gz [root@centos7-server02 nginx-1.15.4]# [root@server03 src]# fdfs_upload_file /etc/fdfs/client.conf 1.txt group1/M00/00/00/wKjEhV1SQLCAbAWtAAAABFqC_Qg891.txt [root@server03 src]#
配置nginx訪問
在其中一臺配置nginx即可,如果要做負(fù)載均衡,可用兩臺都配置nginx,然后F5或者h(yuǎn)aproxy負(fù)載均衡。
vim /etc/fdfs/mod_fastdfs.conf
#需要修改的內(nèi)容如下
tracker_server=192.168.196.132:22122 # 服務(wù)器1
tracker_server=192.168.196.133:22122 # 服務(wù)器2
url_have_group_name=true
store_path0=/home/dfs
#配置nginx.config
vim /usr/local/nginx/conf/nginx.conf
#在上方添加如下配置
server {
listen 8888; ## 該端口為storage.conf中的http.server_port相同
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
# 啟動nginx服務(wù)
/usr/local/nginx/sbin/nginx #啟動nginx
/usr/local/nginx/sbin/nginx -s reload #重啟nginx
測試通過nginx下載文件
wget http://192.168.196.132:8888/group1/M00/00/00/wKjEhF1SQHKAEN6aAA-itrfn0m4.tar.gz wget http://192.168.196.132:8888/group1/M00/00/00/wKjEhV1SQLCAbAWtAAAABFqC_Qg891.txt
這是剛才測試上傳的兩個文件,通過nginx的8888端口 + File ID進(jìn)行下載,下載成功則安裝完成。
檢測集群
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 會顯示會有幾臺服務(wù)器 有2臺就會 顯示 Storage 1-Storage 2的詳細(xì)信息
相關(guān)說明
配置文件
tracker_server #有幾臺服務(wù)器寫幾個 group_name #地址的名稱的命名 bind_addr #服務(wù)器ip綁定 store_path_count #store_path(數(shù)字)有幾個寫幾個 store_path(數(shù)字) #設(shè)置幾個儲存地址寫幾個 從0開始
可能遇到的問題
如果不是root 用戶 你必須在除了cd的命令之外 全部加sudo 如果不是root 用戶 編譯和安裝分開進(jìn)行 先編譯再安裝 如果上傳成功 但是nginx報錯404 先檢查mod_fastdfs.conf文件中的store_path0是否一致 如果nginx無法訪問 先檢查防火墻 和 mod_fastdfs.conf文件tracker_server是否一致 如果不是在/usr/local/src文件夾下安裝 可能會編譯出錯
轉(zhuǎn)載自:https://www.jianshu.com/p/b12acdedd30f






