Github倉(cāng)庫(kù)
Github介紹: https://github.com/hAppyfish100/fastdfs
Github文檔: https://github.com/happyfish100/fastdfs/wiki
FastDFS介紹
FastDFS 是用 c 語(yǔ)言編寫(xiě)的一款開(kāi)源的分布式文件系統(tǒng)。FastDFS 為互聯(lián)網(wǎng)量身定制, 充分考慮了冗余備份、負(fù)載均衡、線性擴(kuò)容等機(jī)制,并注重高可用、高性能等指標(biāo),使用 FastDFS 很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載等服務(wù)。
FastDFS 架構(gòu)包括 Tracker server 和 Storage server。客戶端請(qǐng)求 Tracker server 進(jìn)行文 件上傳、下載,通過(guò) Tracker server 調(diào)度最終由 Storage server 完成文件上傳和下載。
Tracker server 作用是負(fù)載均衡和調(diào)度,通過(guò) Tracker server 在文件上傳時(shí)可以根據(jù)一些 策略找到 Storage server 提供文件上傳服務(wù)。可以將 tracker 稱為追蹤服務(wù)器或調(diào)度服務(wù) 器。
Storage server 作用是文件存儲(chǔ),客戶端上傳的文件最終存儲(chǔ)在 Storage 服務(wù)器上, Storageserver 沒(méi)有實(shí)現(xiàn)自己的文件系統(tǒng)而是利用操作系統(tǒng) 的文件系統(tǒng)來(lái)管理文件。可以將 storage 稱為存儲(chǔ)服務(wù)器。
服務(wù)端兩個(gè)角色:
- Tracker:管理集群,tracker 也可以實(shí)現(xiàn)集群。每個(gè) tracker 節(jié)點(diǎn)地位平等。收集 Storage 集群的狀態(tài)。
- Storage:實(shí)際保存文件 Storage 分為多個(gè)組,每個(gè)組之間保存的文件是不同的。每 個(gè)組內(nèi)部可以有多個(gè)成員,組成員內(nèi)部保存的內(nèi)容是一樣的,組成員的地位是一致的,沒(méi)有 主從的概念。
文件上傳流程
客戶端上傳文件后存儲(chǔ)服務(wù)器將文件 ID 返回給客戶端,此文件 ID 用于以后訪問(wèn)該文 件的索引信息。文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級(jí)目錄,文件名。
group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
- group1 組名:文件上傳后所在的 storage 組名稱,在文件上傳成功后有 storage 服務(wù)器返回, 需要客戶端自行保存。
- 虛擬磁盤路徑:storage 配置的虛擬路徑,與磁盤選項(xiàng) store_path*對(duì)應(yīng)。如果配置了
- /M00 : store_path0 則是 M00,如果配置了 store_path1 則是 M01,以此類推。
- /00/00:數(shù)據(jù)兩級(jí)目錄:storage 服務(wù)器在每個(gè)虛擬磁盤路徑下創(chuàng)建的兩級(jí)目錄,用于存儲(chǔ)數(shù)據(jù) 文件。
- /wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz文件名:與文件上傳時(shí)不同。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲(chǔ) 服務(wù)器 IP 地址、文件創(chuàng)建時(shí)間戳、文件大小、隨機(jī)數(shù)和文件拓展名等信息。
文件下載流程
FastDFS安裝
使用的系統(tǒng)軟件
名稱說(shuō)明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
磁盤目錄
說(shuō)明位置所有安裝包/usr/local/src數(shù)據(jù)存儲(chǔ)位置/home/dfs/#這里我為了方便把日志什么的都放到了dfs
#創(chuàng)建數(shù)據(jù)存儲(chǔ)目錄
[root@server01 ~]# mkdir -p /home/dfs
#切換到安裝目錄準(zhǔn)備下載安裝包
[root@server01 ~]# cd /usr/local/src
組件下載與安裝
下面的步驟安裝切換到安裝目錄下cd /usr/local/src進(jìn)行開(kāi)始。
安裝libfatscommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ ./make.sh && ./make.sh install #編譯安裝
安裝FastDFS
cd ../ #返回上一級(jí)目錄
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 #客戶端文件,測(cè)試用
cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx訪問(wèn)使用
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx訪問(wèn)使用
安裝fastdfs-nginx-module
cd ../ #返回上一級(jí)目錄 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)的各個(gè)組件,那么下面來(lái)進(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 # 存儲(chǔ)日志和數(shù)據(jù)的根目錄
tracker服務(wù)相關(guān)命令
/etc/init.d/fdfs_trackerd start #啟動(dòng)tracker服務(wù) /etc/init.d/fdfs_trackerd restart #重啟動(dòng)tracker服務(wù) /etc/init.d/fdfs_trackerd stop #停止tracker服務(wù) chkconfig fdfs_trackerd on #自啟動(dòng)tracker服務(wù)
啟動(dòng)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ù)和日志文件存儲(chǔ)根目錄
store_path0=/home/dfs # 第一個(gè)存儲(chǔ)目錄
tracker_server=192.168.43.128:22122 # tracker服務(wù)器IP和端口
http.server_port=8888 # http訪問(wèn)文件的端口(默認(rèn)8888,看情況修改,和nginx中保持一致)
啟動(dòng)storage服務(wù)相關(guān)命令
/etc/init.d/fdfs_storaged start #啟動(dòng)storage服務(wù) /etc/init.d/fdfs_storaged restart #重動(dòng)storage服務(wù) /etc/init.d/fdfs_storaged stop #停止動(dòng)storage服務(wù) chkconfig fdfs_storaged on #自啟動(dòng)storage服務(wù)
啟動(dòng)storage服務(wù)
[root@server01 src]# /etc/init.d/fdfs_storaged start Starting fdfs_storaged (via systemctl): [ OK ] [root@server01 src]#
client測(cè)試上傳文件
vim /etc/fdfs/client.conf #需要修改的內(nèi)容如下 base_path=/home/dfs tracker_server=192.168.43.128:22122 #tracker服務(wù)器IP和端口 #保存后測(cè)試,返回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訪問(wèn)
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; } } # 啟動(dòng)nginx服務(wù) /usr/local/nginx/sbin/nginx #啟動(dòng)nginx /usr/local/nginx/sbin/nginx -s reload #重啟nginx #測(cè)試下載 wget http://192.168.43.128:8888/group1/M00/00/00/wKgrgF1Rp8uAeU2IAA-itrfn0m4.tar.gz
啟動(dòng)nginx服務(wù)以及測(cè)試下載文件
[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>
分別在兩臺(tái)服務(wù)器都安裝上Tacker以及Storage服務(wù),在第一臺(tái)服務(wù)安裝Nginx進(jìn)行下載服務(wù)的反向代理。
按照前面的步驟對(duì)兩臺(tái)服務(wù)器進(jìn)行安裝,安裝完畢之后,下面來(lái)進(jìn)行分布式配置。
tracker配置
配置每臺(tái)服務(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 # 存儲(chǔ)日志和數(shù)據(jù)的根目錄 # 啟動(dòng)服務(wù) /etc/init.d/fdfs_trackerd start
storage配置
配置每臺(tái)服務(wù)器的storage配置,都按照以下配置進(jìn)行。
vim /etc/fdfs/storage.conf #需要修改的內(nèi)容如下 port=23000 # storage服務(wù)端口(默認(rèn)23000,一般不修改) base_path=/home/dfs # 數(shù)據(jù)和日志文件存儲(chǔ)根目錄 store_path0=/home/dfs # 第一個(gè)存儲(chǔ)目錄 tracker_server=192.168.196.132:22122 # 服務(wù)器1 tracker_server=192.168.196.133:22122 # 服務(wù)器2 http.server_port=8888 # http訪問(wèn)文件的端口(默認(rèn)8888,看情況修改,和nginx中保持一致) # 啟動(dòng)服務(wù) /etc/init.d/fdfs_storaged start
client測(cè)試上傳文件
兩臺(tái)服務(wù)器都配置一個(gè)client進(jìn)行測(cè)試。
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
#保存后測(cè)試,返回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訪問(wèn)
在其中一臺(tái)配置nginx即可,如果要做負(fù)載均衡,可用兩臺(tái)都配置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;
}
}
# 啟動(dòng)nginx服務(wù)
/usr/local/nginx/sbin/nginx #啟動(dòng)nginx
/usr/local/nginx/sbin/nginx -s reload #重啟nginx
測(cè)試通過(guò)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
這是剛才測(cè)試上傳的兩個(gè)文件,通過(guò)nginx的8888端口 + File ID進(jìn)行下載,下載成功則安裝完成。
檢測(cè)集群
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 會(huì)顯示會(huì)有幾臺(tái)服務(wù)器 有2臺(tái)就會(huì) 顯示 Storage 1-Storage 2的詳細(xì)信息
相關(guān)說(shuō)明
配置文件
tracker_server #有幾臺(tái)服務(wù)器寫(xiě)幾個(gè) group_name #地址的名稱的命名 bind_addr #服務(wù)器ip綁定 store_path_count #store_path(數(shù)字)有幾個(gè)寫(xiě)幾個(gè) store_path(數(shù)字) #設(shè)置幾個(gè)儲(chǔ)存地址寫(xiě)幾個(gè) 從0開(kāi)始
可能遇到的問(wèn)題
如果不是root 用戶 你必須在除了cd的命令之外 全部加sudo 如果不是root 用戶 編譯和安裝分開(kāi)進(jìn)行 先編譯再安裝 如果上傳成功 但是nginx報(bào)錯(cuò)404 先檢查mod_fastdfs.conf文件中的store_path0是否一致 如果nginx無(wú)法訪問(wèn) 先檢查防火墻 和 mod_fastdfs.conf文件tracker_server是否一致 如果不是在/usr/local/src文件夾下安裝 可能會(huì)編譯出錯(cuò)
轉(zhuǎn)載自:https://www.jianshu.com/p/b12acdedd30f