FastDFS原理詳解及部署使用-創(chuàng)新互聯(lián)

前言

FastDFS是一個(gè)c語言編寫的一個(gè)開源的輕量級(jí)分布式文件系統(tǒng),它對(duì)文件進(jìn)程管理,功能包括:文件存儲(chǔ),文件同步,文件訪問(文件上傳、文件下載)等,解決了大容量存儲(chǔ)和負(fù)載均衡的問題,特別適合以文件為載體的在線服務(wù),如相冊(cè)網(wǎng)站,視頻網(wǎng)站等等,F(xiàn)astDFS為互聯(lián)網(wǎng)量身定制,充分考慮了冗余備份,負(fù)載均衡,現(xiàn)行擴(kuò)容等,并注重高可用,高性能等指標(biāo),使用FastDFS很容易搭建一套高性能的文件服務(wù)器集群提供文件上傳、下載服務(wù)。

創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的和縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

博文大綱:
一、FastDFS原理及架構(gòu)詳解
二、部署Fast DFS架構(gòu)

一、FastDFS原理及架構(gòu)詳解

1、FastDFS架構(gòu)

FastDFS架構(gòu)包括Tracker server和Storage server,client請(qǐng)求Tracker server 進(jìn)行文件上傳、下載,通過Tracker server調(diào)度最終由Storage server完成文件上傳和下載。

  • Tracker server:負(fù)責(zé)調(diào)度及負(fù)載均衡,通過Tracker server,在文件上傳時(shí)可以根據(jù)一些策略找到Storage server來提供上傳服務(wù),可以將tracker稱為追蹤服務(wù)器或調(diào)度服務(wù)器;
  • Storage server:負(fù)責(zé)文件最終存儲(chǔ),客戶端上傳的文件最終存儲(chǔ)在storage服務(wù)器上,Storage server沒有實(shí)現(xiàn)自己的文件系統(tǒng),而是利用操作系統(tǒng)的文件系統(tǒng)來管理文件,可以將storage稱為存儲(chǔ)服務(wù)器。

FastDFS原理詳解及部署使用

2、Fast DFS系統(tǒng)的角色

Fast DFS系統(tǒng)有三個(gè)角色:跟蹤服務(wù)器(Tracker Server)、存儲(chǔ)服務(wù)器(Storage Server)和客戶端(Client)。

  • Tracker Server:跟蹤服務(wù)器,主要做調(diào)度工作,起到均衡的作用;負(fù)責(zé)管理所有的Storage server和group,每個(gè)storage在啟動(dòng)后會(huì)連接Tracker,告知自己所屬group等信息,并保持周期性心跳。
  • Storage Server:存儲(chǔ)服務(wù)器,主要提供容量和備份服務(wù);以group為單位,每個(gè)group內(nèi)部可以有多臺(tái)storage server,數(shù)據(jù)互為備份。
  • Client:客戶端,上傳下載數(shù)據(jù)的服務(wù)器,也就是我們自己的項(xiàng)目所部署在的服務(wù)器。

3、Fast DFS原理

關(guān)于模塊:跟蹤服務(wù)器和存儲(chǔ)節(jié)點(diǎn)都可以由一臺(tái)或多臺(tái)服務(wù)器構(gòu)成,跟蹤服務(wù)器和存儲(chǔ)節(jié)點(diǎn)均可以隨時(shí)增加或者下線不會(huì)影響線上服務(wù),其中跟蹤服務(wù)器中所有服務(wù)器是對(duì) 等,可以根據(jù)服務(wù)器壓力情況隨時(shí)增加或減少

4、文件上傳流程

Storage server會(huì)連接集群中所有的Tracker server,定時(shí)向他們報(bào)告自己的狀態(tài),包括磁盤剩余空間、文件同步狀況、文件上傳下載次數(shù)等統(tǒng)計(jì)信息。

FastDFS原理詳解及部署使用

客戶端上傳文件后存儲(chǔ)服務(wù)器將文件ID返回給客戶端,此文件ID用于以后訪問該文件的索引信息。

文件索引信息包括:組名,虛擬磁盤路徑,數(shù)據(jù)兩級(jí)目錄,文件名。

  • 組名:文件上傳后所在的storage組名稱,在文件上傳成功后有storage服務(wù)器返回,需要客戶端自行保存。
  • 虛擬磁盤路徑:storage配置的虛擬路徑,與磁盤選項(xiàng)store_path*對(duì)應(yīng)。如果配置了store_path0則是M00,如果配置了store_path2則是M01,以此類推。
  • 數(shù)據(jù)兩級(jí)目錄:storage服務(wù)器在每個(gè)虛擬磁盤路徑下創(chuàng)建的兩級(jí)目錄,用于存儲(chǔ)數(shù)據(jù)文件。
  • 文件名:與文件上傳時(shí)不同。是由存儲(chǔ)服務(wù)器根據(jù)特定信息生成,文件名包含:源存儲(chǔ)服務(wù)器IP地址、文件創(chuàng)建時(shí)間戳、文件大小、隨機(jī)數(shù)和文件拓展名等信息。

5、文件下載流程

FastDFS原理詳解及部署使用

client發(fā)送download請(qǐng)求給某個(gè)tracker,必須帶上文件名信息,tracker從文件名中解析出文件的group、大小、創(chuàng)建時(shí)間等信息,然后為該請(qǐng)求選擇一個(gè)storage用來服務(wù)讀請(qǐng)求,由于group內(nèi)的文件同步時(shí)在后臺(tái)是異步的,所以有可能出現(xiàn)在讀的時(shí)候,文件還沒有同步到某些storage server上,為了盡量避免訪問到這樣的storage,tracker按照如下規(guī)則選擇group內(nèi)可讀的storage:
文件創(chuàng)建時(shí)間戳-storage被同步到的時(shí)間戳 且(當(dāng)前時(shí)間-文件創(chuàng)建時(shí)間戳)>文件同步大時(shí)間(5分鐘),說明文件創(chuàng)建后,認(rèn)為經(jīng)過大同步時(shí)間后,肯定已經(jīng)同步到其他storage了。

二、部署Fast DFS架構(gòu)

1、環(huán)境準(zhǔn)備

FastDFS原理詳解及部署使用

注:文中所有用到的源碼包都可以在我的網(wǎng)盤鏈接中下載。

由于有一些重復(fù)性的安裝操作,所以我寫了一個(gè)簡(jiǎn)單的腳本,可以在進(jìn)行那些重復(fù)性操作時(shí),執(zhí)行這個(gè)腳本。腳本如下(這個(gè)腳本在tracker的兩個(gè)服務(wù)器上執(zhí)行就行):

[root@tracker01 ~]# vim install.sh    #腳本如下,最好手動(dòng)執(zhí)行以下獲取Ip的指令是否可以獲取到自己的IP,否則需要做相應(yīng)的修改
#!/bin/bash
IP=`ip a | grep inet | grep ens33 | awk '{print $2}' | awk -F/ '{print $1}'`
mkdir -p /storage/fastdfs
cd /usr/src
if [ -f fastdfs.tar.gz ] && [ -f libfastcommon.tar.gz ]
then
        tar zxf libfastcommon.tar.gz
        tar zxf fastdfs.tar.gz
        cd libfastcommon/
        ./make.sh &> /dev/null && ./make.sh install &> /dev/null
        cd ../fastdfs/
        ./make.sh &> /dev/null && ./make.sh install &> /dev/null
        cd conf
        cp mime.types http.conf /etc/fdfs/
        cd /etc/fdfs/
        cp tracker.conf.sample tracker.conf
        sed -i "s/bind_addr=/bind_addr=${IP}/g" tracker.conf
        sed -i "s/base_path=\/home\/yuqing\/fastdfs/base_path=\/storage\/fastdfs/g" tracker.conf
        echo "tracker server install succees ......."
else
        echo "error,file not found."
        exit 1
fi

2、配置主機(jī)tracker01

[root@tracker01 src]# pwd        #確定當(dāng)前路徑
/usr/src
[root@tracker01 src]# ls         #確定有這兩個(gè)源碼包及我的腳本
fastdfs.tar.gz  install.sh  libfastcommon.tar.gz
[root@tracker01 src]# sh install.sh     #執(zhí)行腳本進(jìn)行編譯安裝
tracker server install succees .......   #輸出該行信息表示安裝成功
[root@tracker01 src]# /etc/init.d/fdfs_trackerd start    #啟動(dòng)trackerd服務(wù)
[root@tracker01 src]# netstat -anpt | grep 22122    #確定端口在監(jiān)聽

3、配置主機(jī)tracker02

[root@tracker02 src]# pwd   #確定當(dāng)前路徑
/usr/src
[root@tracker02 src]# ls      #確定當(dāng)前路徑有以下我呢見
fastdfs.tar.gz  install.sh  libfastcommon.tar.gz
[root@tracker02 src]# sh install.sh          #執(zhí)行腳本
tracker server install succees ....... 
[root@tracker02 src]# /etc/init.d/fdfs_trackerd start      #啟動(dòng)tracker服務(wù)
[root@tracker02 src]# netstat -anpt | grep 22122          #確定端口在監(jiān)聽

4、配置主機(jī)storage01

#編譯安裝fast DFS及l(fā)ibfast
[root@storage01 src]# tar zxf fastdfs.tar.gz 
[root@storage01 src]# tar zxf libfastcommon.tar.gz 
[root@storage01 src]# cd libfastcommon/
[root@storage01 libfastcommon]# ./make.sh && ./make.sh install
[root@storage01 libfastcommon]# cd ../fastdfs/
[root@storage01 fastdfs]# ./make.sh && ./make.sh install
[root@storage01 fastdfs]# cd conf
[root@storage01 conf]# cp mime.types http.conf /etc/fdfs/
[root@storage01 conf]# cd ../../
#解壓nginx第三方模塊復(fù)制到指定路徑
[root@storage01 src]# tar zxf fastdfs-nginx-module.tar.gz 
[root@storage01 src]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
#修改storage配置文件
[root@storage01 src]# cd /etc/fdfs/
[root@storage01 fdfs]# cp storage.conf.sample storage.conf
[root@storage01 fdfs]# vim storage.conf    #修改配置文件如下
group_name=group1
bind_addr=192.168.20.5
base_path=/storage/fastdfs     #數(shù)據(jù)和日志目錄地址
store_path0=/storage/fastdfs    #第一個(gè)存儲(chǔ)目錄和base_path路徑相同
#以下是指定tracker-server的監(jiān)聽地址
tracker_server=192.168.20.3:22122
tracker_server=192.168.20.4:22122
http.server_port=8888          #http訪問文件的端口
[root@storage01 fdfs]# vim mod_fastdfs.conf         #編輯此文件
base_path=/storage/fastdfs
tracker_server=192.168.20.3:22122
tracker_server=192.168.20.4:22122
storage_server_port=23000
group_name=group1  
url_have_group_name = true          #當(dāng)group有多個(gè)的時(shí)候需要更改為true,以組名去訪問
store_path0=/storage/fastdfs
group_count = 2
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/storage/fastdfs/
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/storage/fastdfs/
#編輯完成后,保存退出即可
[root@storage01 conf]# mkdir -p /storage/fastdfs/   #創(chuàng)建所需目錄
#編譯安裝nginx并添加第三方模塊
[root@storage01 conf]# yum -y install openssl-devel pcre-devel
#注意下面的第三方nginx模塊路徑,要與自己的對(duì)應(yīng)
[root@storage01 fdfs]# cd /usr/src
[root@storage01 src]# tar zxf nginx-1.14.0.tar.gz 
[root@storage01 src]# cd nginx-1.14.0/
[root@storage01 nginx-1.14.0]# ./configure --add-module=/usr/src/fastdfs-nginx-module/src && make && make install
[root@storage01 fdfs]# cd /usr/local/nginx/conf/
[root@storage01 conf]# vim nginx.conf         #編輯nginx主配置文件
#在原來的server字段上面(34行)添加以下內(nèi)容
    server {
        listen 8888;
        server_name localhost;
        location ~/group[0-9]/M00/ {
                ngx_fastdfs_module;
        }
}
[root@storage01 conf]# /etc/init.d/fdfs_storaged start   #啟動(dòng)storage服務(wù)
[root@storage01 conf]# /usr/local/nginx/sbin/nginx      #啟動(dòng)nginx
#確定相關(guān)端口在監(jiān)聽
[root@storage01 conf]# netstat -anput | grep 23000
[root@storage01 conf]# netstat -anpt | grep 80
[root@storage01 conf]# netstat -anpt | grep 8888

4、配置主機(jī)storage02

[root@storage02 src]# tar zxf fastdfs.tar.gz
[root@storage02 src]#  tar zxf libfastcommon.tar.gz 
[root@storage02 src]# cd libfastcommon/
[root@storage02 libfastcommon]# ./make.sh && ./make.sh install
[root@storage02 libfastcommon]# cd ..cc
[root@storage02 fastdfs]# ./make.sh && ./make.sh install
[root@storage02 fastdfs]# cd conf
[root@storage02 conf]# cp mime.types http.conf /etc/fdfs/
[root@storage02 conf]# cd ../../
[root@storage02 src]#  tar zxf fastdfs-nginx-module.tar.gz 
[root@storage02 src]# cd /etc/fdfs/
#將storage01修改后的配置文件復(fù)制到本地
[root@storage02 fdfs]# scp root@192.168.20.5:/etc/fdfs/storage.conf /etc/fdfs/
[root@storage02 fdfs]# scp root@192.168.20.5:/etc/fdfs/mod_fastdfs.conf /etc/fdfs/
#修改復(fù)制后的配置文件
[root@storage02 fdfs]# vim storage.conf
group_name=group2
bind_addr=192.168.20.6
[root@storage02 fdfs]# vim mod_fastdfs.conf 
group_name=group2
[root@storage02 fdfs]# mkdir -p /storage/fastdfs/   #創(chuàng)建所需目錄
#安裝nginx
[root@storage02 fdfs]# cd /usr/src
[root@storage02 src]# tar zxf nginx-1.14.0.tar.gz 
[root@storage02 src]# cd nginx-1.14.0/
[root@storage02 nginx-1.14.0]#  ./configure --add-module=/usr/src/fastdfs-nginx-module/src && make && make install
#更改配置文件
[root@storage02 nginx-1.14.0]# cd /usr/local/nginx/conf/
#將storage01主機(jī)的配置文件復(fù)制過來即可
[root@storage02 conf]# scp root@192.168.20.5:/usr/local/nginx/conf/nginx.conf .
[root@storage02 conf]# /etc/init.d/fdfs_storaged start   #啟動(dòng)storage服務(wù)
[root@storage02 conf]# /usr/local/nginx/sbin/nginx      #啟動(dòng)nginx
#確定相關(guān)端口在監(jiān)聽
[root@storage02 conf]# netstat -anput | grep 23000
[root@storage02 conf]# netstat -anpt | grep 80
[root@storage02 conf]# netstat -anpt | grep 8888

5、配置主機(jī)nginx提供反向代理功能

[root@nginx ~]# cd  /usr/src
[root@nginx src]# yum -y install openssl-devel pcre-devel
[root@nginx src]# tar zxf nginx-1.14.0.tar.gz 
[root@nginx src]# cd nginx-1.14.0/
[root@nginx nginx-1.14.0]# ./configure && make && make install
[root@nginx nginx-1.14.0]# cd /usr/local/nginx/conf/
[root@nginx conf]# vim nginx.conf
                ...........#省略部分內(nèi)容
http {               #找到http字段
    include       mime.types;
    default_type  application/octet-stream;
        #添加以下內(nèi)容
    upstream fdfs_group1 {
        server 192.168.20.5:8888 weight=1 max_fails=2 fail_timeout=30s;
        }
        upstream fdfs_group2 {
        server 192.168.20.6:8888 weight=1 max_fails=2 fail_timeout=30s;
        }
                           ...........#省略部分內(nèi)容
    server {          #定位到server字段
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
                #添加以下內(nèi)容
        location ~ /group1 {
                proxy_pass http://fdfs_group1;
}           
        location ~ /group2 {
                proxy_pass http://fdfs_group2;
}
               ...........#省略部分內(nèi)容
[root@nginx conf]# /usr/local/nginx/sbin/nginx      #啟動(dòng)nginx服務(wù)
[root@nginx conf]# netstat -anpt | grep 80         #確定端口在監(jiān)聽

6、客戶端驗(yàn)證服務(wù)是否可以正常使用

[root@client ~]# cd /usr/src
[root@client src]#  tar zxf libfastcommon.tar.gz
[root@client src]#  tar zxf fastdfs.tar.gz
[root@client src]#  cd libfastcommon/
[root@client libfastcommon]# ./make.sh && ./make.sh install
[root@client libfastcommon]# cd ../fastdfs/
[root@client fastdfs]# ./make.sh && ./make.sh install
[root@client fastdfs]# cd /etc/fdfs/
[root@client fdfs]# mv client.conf.sample client.conf
[root@client fdfs]# vim /etc/fdfs/client.conf
base_path=/storage/fastdfs/
tracker_server=192.168.20.3:22122
tracker_server=192.168.20.4:22122
[root@client fdfs]# ls a.png      #確定當(dāng)前路徑下有這個(gè)測(cè)試圖片
a.png
[root@client fdfs]# mkdir -p /storage/fastdfs
[root@client fdfs]# fdfs_upload_file /etc/fdfs/client.conf a.png    #進(jìn)行上傳
group1/M00/00/00/wKgUBV3d9viAbz_LAAAPXsH7Cms189.png
#上面返回的信息需要保存,訪問這個(gè)圖片時(shí)需要
#在終端進(jìn)行下載
[root@client ~]# mkdir a
[root@client ~]# cd a
[root@client a]# fdfs_download_file /etc/fdfs/client.conf  group1/M00/00/00/wKgUBV3d9viAbz_LAAAPXsH7Cms189.png b.png
[root@client a]# ls
b.png
#ok!成功下載了,并且重命名了

瀏覽器訪問nginx反向代理+上傳圖片時(shí)返回的ID(我這里訪問的地址是:http://192.168.20.2/group1/M00/00/00/wKgUBV3d9viAbz_LAAAPXsH7Cms189.png ),測(cè)試可以成功訪問到圖片:

FastDFS原理詳解及部署使用

附加踩過的坑:

在我最后瀏覽器訪問驗(yàn)證的時(shí)候,總是訪問不到上傳的圖片(client正常上傳及下載都沒有問題),找了好久原因,最后發(fā)現(xiàn),是因?yàn)樵谂渲胹torage服務(wù)器時(shí),沒有將/usr/src/fastdfs/conf/目錄下的 mime.types和 http.conf 這兩個(gè)文件復(fù)制到/etc/fdfs/目錄下。

———————— 本文至此結(jié)束,感謝閱讀 ————————

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

網(wǎng)頁名稱:FastDFS原理詳解及部署使用-創(chuàng)新互聯(lián)
文章源于:http://muchs.cn/article24/cspeje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站Google、面包屑導(dǎo)航、全網(wǎng)營銷推廣網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化