溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

FastDFS原理詳解及部署使用

發布時間:2020-05-17 12:23:35 來源:網絡 閱讀:534 作者:warrent 欄目:系統運維

前言

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

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

一、FastDFS原理及架構詳解

1、FastDFS架構

FastDFS架構包括Tracker server和Storage server,client請求Tracker server 進行文件上傳、下載,通過Tracker server調度最終由Storage server完成文件上傳和下載。

  • Tracker server:負責調度及負載均衡,通過Tracker server,在文件上傳時可以根據一些策略找到Storage server來提供上傳服務,可以將tracker稱為追蹤服務器或調度服務器;
  • Storage server:負責文件最終存儲,客戶端上傳的文件最終存儲在storage服務器上,Storage server沒有實現自己的文件系統,而是利用操作系統的文件系統來管理文件,可以將storage稱為存儲服務器。

FastDFS原理詳解及部署使用

2、Fast DFS系統的角色

Fast DFS系統有三個角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)。

  • Tracker Server:跟蹤服務器,主要做調度工作,起到均衡的作用;負責管理所有的Storage server和group,每個storage在啟動后會連接Tracker,告知自己所屬group等信息,并保持周期性心跳。
  • Storage Server:存儲服務器,主要提供容量和備份服務;以group為單位,每個group內部可以有多臺storage server,數據互為備份。
  • Client:客戶端,上傳下載數據的服務器,也就是我們自己的項目所部署在的服務器。

3、Fast DFS原理

關于模塊:跟蹤服務器和存儲節點都可以由一臺或多臺服務器構成,跟蹤服務器和存儲節點均可以隨時增加或者下線不會影響線上服務,其中跟蹤服務器中所有服務器是對 等,可以根據服務器壓力情況隨時增加或減少

4、文件上傳流程

Storage server會連接集群中所有的Tracker server,定時向他們報告自己的狀態,包括磁盤剩余空間、文件同步狀況、文件上傳下載次數等統計信息。

FastDFS原理詳解及部署使用

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

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

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

5、文件下載流程

FastDFS原理詳解及部署使用

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

二、部署Fast DFS架構

1、環境準備

FastDFS原理詳解及部署使用

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

由于有一些重復性的安裝操作,所以我寫了一個簡單的腳本,可以在進行那些重復性操作時,執行這個腳本。腳本如下(這個腳本在tracker的兩個服務器上執行就行):

[root@tracker01 ~]# vim install.sh    #腳本如下,最好手動執行以下獲取Ip的指令是否可以獲取到自己的IP,否則需要做相應的修改
#!/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、配置主機tracker01

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

3、配置主機tracker02

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

4、配置主機storage01

#編譯安裝fast DFS及libfast
[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第三方模塊復制到指定路徑
[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     #數據和日志目錄地址
store_path0=/storage/fastdfs    #第一個存儲目錄和base_path路徑相同
#以下是指定tracker-server的監聽地址
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          #當group有多個的時候需要更改為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/   #創建所需目錄
#編譯安裝nginx并添加第三方模塊
[root@storage01 conf]# yum -y install openssl-devel pcre-devel
#注意下面的第三方nginx模塊路徑,要與自己的對應
[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行)添加以下內容
    server {
        listen 8888;
        server_name localhost;
        location ~/group[0-9]/M00/ {
                ngx_fastdfs_module;
        }
}
[root@storage01 conf]# /etc/init.d/fdfs_storaged start   #啟動storage服務
[root@storage01 conf]# /usr/local/nginx/sbin/nginx      #啟動nginx
#確定相關端口在監聽
[root@storage01 conf]# netstat -anput | grep 23000
[root@storage01 conf]# netstat -anpt | grep 80
[root@storage01 conf]# netstat -anpt | grep 8888

4、配置主機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修改后的配置文件復制到本地
[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/
#修改復制后的配置文件
[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/   #創建所需目錄
#安裝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主機的配置文件復制過來即可
[root@storage02 conf]# scp root@192.168.20.5:/usr/local/nginx/conf/nginx.conf .
[root@storage02 conf]# /etc/init.d/fdfs_storaged start   #啟動storage服務
[root@storage02 conf]# /usr/local/nginx/sbin/nginx      #啟動nginx
#確定相關端口在監聽
[root@storage02 conf]# netstat -anput | grep 23000
[root@storage02 conf]# netstat -anpt | grep 80
[root@storage02 conf]# netstat -anpt | grep 8888

5、配置主機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
                ...........#省略部分內容
http {               #找到http字段
    include       mime.types;
    default_type  application/octet-stream;
        #添加以下內容
    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;
        }
                           ...........#省略部分內容
    server {          #定位到server字段
        listen       80;
        server_name  localhost;

        #charset koi8-r;

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

6、客戶端驗證服務是否可以正常使用

[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      #確定當前路徑下有這個測試圖片
a.png
[root@client fdfs]# mkdir -p /storage/fastdfs
[root@client fdfs]# fdfs_upload_file /etc/fdfs/client.conf a.png    #進行上傳
group1/M00/00/00/wKgUBV3d9viAbz_LAAAPXsH7Cms189.png
#上面返回的信息需要保存,訪問這個圖片時需要
#在終端進行下載
[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反向代理+上傳圖片時返回的ID(我這里訪問的地址是:http://192.168.20.2/group1/M00/00/00/wKgUBV3d9viAbz_LAAAPXsH7Cms189.png ),測試可以成功訪問到圖片:

FastDFS原理詳解及部署使用

附加踩過的坑:

在我最后瀏覽器訪問驗證的時候,總是訪問不到上傳的圖片(client正常上傳及下載都沒有問題),找了好久原因,最后發現,是因為在配置storage服務器時,沒有將/usr/src/fastdfs/conf/目錄下的 mime.types和 http.conf 這兩個文件復制到/etc/fdfs/目錄下。

———————— 本文至此結束,感謝閱讀 ————————

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女