一步步帶你用 FastDFS 搭建文件管理系統 詳細的不得鳥


FastDFS概述

  • 開源地址:https://github.com/happyfish100

  • 余慶大佬用 c語言 編寫的一款開源的分布式文件系統。

  • 為互聯網量身定制,充分考慮了冗余備份、負載均衡、線性擴容等機制,注重高可用、高性能等指標

  • 冗余備份: 縱向擴容

  • 線性擴容: 橫向擴容, 增加容量

  • 可以很容易搭建一套高性能的文件服務器集群提供文件上傳、下載等服務。

  • 應用場景:

    • 文件上傳 -> 存儲
    • 文件下載
  • 冗余備份(通過文件內容生成key值,在上傳同一個文件時,不會重復存儲,這就省了很大的空間)

  • 負載均衡:
    瀏覽器訪問服務器(192.168.110.11:8080),如果全校都訪問這個網站的時候,就會很卡,怎么辦? 多開幾個端口(一個端口的負載能力有限),再訪問的時候,指向不忙的端口(8081、8082)和集群有點像,
    負載就是請求的數量;均衡就是給你平均的分配,結合就是負載均衡。

  • 線性擴容:直接加配置文件,就可以多一個服務器的存在,早期如果想加服務器,就需要重復寫相關代碼,擴容非常方便。

FastDFS 中的三個角色

  • 追蹤器 ( tracker ) -> 守護進程
    • 管理者
    • 第一個啟動
  • 存儲節點 ( storage ) -> 守護進程
    • 可以理解為網絡環境中可以存儲文件的主機
    • 存儲文件
    • 第二個啟動
  • 客戶端 - client
    • 程序猿寫的
    • 發起上傳請求, 完成上傳操作
    • 發起下載請求, 將服務器文件下載到本地
    • 最后啟動, 是一個普通的應用程序

FastDFS 三個角色的關系

李培冠博客

  • 先啟動追蹤器
  • 啟動存儲節點
    • 主動連接追蹤器, 匯報當前存儲節點的狀態信息
    • 后邊定時匯報狀態
  • 客戶端程序啟動, 連接追蹤器, 發給上傳請求
    • 客戶端詢問追蹤, 看那個存儲節點有足夠的容量
    • 追蹤查詢存儲節點信息
    • 將查到的節點信息發送給客戶端
  • 客戶端通過得到的存儲節點地址, 連接存儲節點
  • 將文件上傳到存儲節點上, 存儲節點得到一個file_id, 並將其發送給客戶端
  • 客戶端需要存儲這個fileID, 下載的時候要用

李培冠博客

  • 先啟動追蹤器
  • 啟動存儲節點
    • 主動連接追蹤器, 匯報當前存儲節點的狀態信息
    • 后邊定時匯報狀態
  • 客戶端程序啟動, 連接追蹤器, 發送下載請求
    • 客戶端詢問追蹤, 看那個存儲節點上有要下載的文件
    • 追蹤查詢存儲節點信息
    • 將查到的節點地址發送給客戶端
  • 客戶端通過得到的存儲節點地址, 連接存儲節點
  • 將存儲節點發送給客戶端的文件, 保存到本地

FastDFS集群

李培冠博客

  • tracker集群
    • 為了避免單點故障
    • 工作方式: 輪詢
    • 集群方式: 修改配置文件
  • 存儲節點的集群
    • 存儲節點的管理:
      • 是以組的方式來管理的
    • 橫向擴容 -> 添加新的分組, fastDFS容量增加了
      • 不同組的主機之間不通信
      • 各組的容量相加就是整體容量
    • 縱向擴容 -> 在現有的組中添加新的主機, 和同組主機之間互為備份關系
      • 同組主機中存儲的內容相同
      • 同組主機之間是通信的
      • 當前組的容量按照最小的主機來算

FastDFS 架構說明

舉個例子:

小老板(客戶端)想要存他的貨,存貨肯定是要把貨存到倉庫里面,但是不能讓小老板自己去找倉庫,因為那么多倉庫,小老板不知道哪個可以用以及哪個有空閑可以存我的貨。

所以,自己去找就很費時費力。況且,倉庫是面向很多個小老板,這么多小老板如果每次都是自己去找倉庫,就會很費時間。所以,安排一個倉庫管理員,這個是干什么的呢? 小老板想存東西,找這個管理員,讓管理員告訴小老板,哪個倉庫可以用,然后小老板就去指定倉庫存東西去了。

這個倉庫管理員沒事就去巡邏,挨個倉庫走一遍看哪個倉庫有空閑可以用,工作:定時的遍歷去查詢倉庫,看這個倉庫能用不能用(收集倉庫的狀態)。倉庫才是真正存數據的地方。

小老板存完數據之后,倉庫就會給他一個憑證,告訴他你的東西存在了哪個倉庫,以后可以直接過來取。

線性擴容就是加倉庫。

憑證:組名 虛擬磁盤路徑(設置才有,不設置沒有) 數據兩級目錄(文件路徑) 文件名(通過加密防止文件名重復)

FastDFS 安裝

安裝 FastDFS 依賴包

1)下載 libfastcommon.zip

下載地址:https://github.com/happyfish100/libfastcommon/releases

2)解壓縮 libfastcommon.zip

3)進入到 libfastcommon 的目錄中

4)執行 ./make.sh

5)執行 sudo ./make.sh install

安裝 FastDFS

1)下載 fastdfs.zip

下載地址:https://github.com/happyfish100/fastdfs/releases

2)解壓縮 fastdfs.zip

3)進入到 fastdfs 的目錄中

4)執行 ./make.sh

5)執行 sudo ./make.sh install

驗證

ls -al /usr/bin/fdfs*

李培冠博客

配置跟蹤服務器 tracker

1)拷貝文件

sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

2)在 /home/conan/ 目錄中創建目錄 fastdfs/tracker

mkdir –p /home/conan/fastdfs/tracker

3)編輯 /etc/fdfs/tracker.conf 配置文件

sudo vim /etc/fdfs/tracker.conf

修改內容:

base_path=/home/conan/fastdfs/tracker

配置存儲服務器storage

1)拷貝文件

sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

2)在 /home/conan/fastdfs/ 目錄中創建目錄 storage

mkdir –p /home/conan/fastdfs/storage

3)編輯 /etc/fdfs/storage.conf 配置文件

sudo vim /etc/fdfs/storage.conf

修改內容:

base_path=/home/conan/fastdfs/storage
store_path0=/home/conan/fastdfs/storage
tracker_server=自己ubuntu虛擬機的ip地址:22122

啟動tracker和storage

執行以下兩條指令

sudo fdfs_trackerd /etc/fdfs/tracker.conf
sudo fdfs_storaged /etc/fdfs/storage.conf

測試是否安裝成功

1)

sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf

2)編輯 /etc/fdfs/client.conf 配置文件

sudo vim /etc/fdfs/client.conf

修改內容:

base_path=/home/conan/fastdfs/tracker
tracker_server=自己ubuntu虛擬機的ip地址:22122

3)上傳文件測試

sudo fdfs_upload_file /etc/fdfs/client.conf 要上傳的圖片文件路徑 

例如:

sudo fdfs_upload_file /etc/fdfs/client.conf /home/conan/1.jpg

如果返回類似 group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg 的文件 id 則說明文件上傳成功。

安裝 fastdfs-nginx-module

1)下載 nginx.tar.gz:http://nginx.org/en/download.html

2)解壓縮 nginx.tar.gz

3)下載 fastdfs-nginx-module.zip:https://github.com/happyfish100/fastdfs-nginx-module/releases

4)解壓縮 fastdfs-nginx-module.zip

5)下載庫(更換阿里源)

首先你需要去更換阿里源,因為ubuntu自帶的源沒有這個庫

怎么更換?我在 安裝ubuntu系統 這一文章中有講到,沒有更換的可以去這里看一下:

更換完成之后,執行以下命令

sudo apt update
sudo apt install libpcre3 libpcre3-dev

如果沒有下載這個的話,執行下面的命令會報錯:

李培冠博客

6)進入解壓的 nginx 目錄中

執行

sudo ./configure  --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module解壓后的目錄的絕對路徑/src

我這里是:

sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src

這時如果還報以下錯誤:

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module
option, or install the zlib library into the system, or build the zlib library
statically from the source with nginx by using --with-zlib=<path> option.

解決方案

1)找一個臨時目錄,下載命令:wget http://www.zlib.net/zlib-1.2.11.tar.gz

2)解壓:zlib-1.2.11.tar.gz

3)進入 zlib-1.2.11 文件夾

cd zlib-1.2.11

4)安裝

./configure
make
make install

安裝完成,回到 nginx 目錄中,再次執行

sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src

安裝完成:

李培冠博客

如果安裝過程中報以下錯誤:(錯誤原因是因為nginx編譯的時候把警告當錯誤處理,事實上這個警告並不影響)

李培冠博客

解決方案

找到 nginx 目錄下的 objs 目錄下的 Makefile

sudo vim Makefile

刪掉里面的 -Werror

李培冠博客

然后回到 nginx 目錄中,再次執行:

sudo ./configure  --prefix=/usr/local/nginx/ --add-module=/home/conan/fastdfs/fastdfs-nginx-module-1.22/src

執行完上述命令之后,

執行:

sudo make

然后執行:

sudo make install

5)拷貝

sudo cp fastdfs-nginx-module解壓后的目錄中src下mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf

6)修改內容

sudo vim /etc/fdfs/mod_fastdfs.conf

修改對應內容為:

connect_timeout=10
base_path=/home/conan/fastdfs/tracker
tracker_server=自己ubuntu虛擬機的ip地址:22122
url_have_group_name=true
store_path0=/home/conan/fastdfs/storage

7)拷貝文件

sudo cp 解壓縮的fastdfs目錄中的conf中的 http.conf  /etc/fdfs/http.conf

也可以先進入到解壓縮的 fastdfs 目錄中的 conf

sudo cp http.conf /etc/fdfs/http.conf

8)拷貝文件

sudo cp 解壓縮的fastdfs目錄中的conf中的 mime.types /etc/fdfs/mime.types

也可以先進入到解壓縮的 fastdfs 目錄中的 conf

sudo cp mime.types /etc/fdfs/mime.types

nginx 配置

1)添加配置信息

sudo vim /usr/local/nginx/conf/nginx.conf

在 http 部分中添加配置信息如下:

server {
    listen       8888;  # nginx服務器端口     
    server_name  localhost;  # ip地址     
    location ~/group[0-9]/ {  # 組名     
        ngx_fastdfs_module;
        }
    error_page   500 502 503 504  /50x.html;  # 錯誤頁面     
    location = /50x.html {
        root   html;
        }
    }

李培冠博客

啟動 nginx

sudo  /usr/local/nginx/sbin/nginx

李培冠博客

我們之前上傳過文件得到的一個憑證,復制那個憑證

如果沒有保存,重新上傳一個即可(重啟系統需要重新啟動tracker和storage

在瀏覽器中輸入:

ip地址:8888/憑證

比如:

192.168.180.130:8888/group1/M00/00/00/wKi1gl7F7jmAJC73AAB66dOYt_o243.jpg

就可以看到圖片啦

李培冠博客

李培冠博客

歡迎訪問我的個人網站:

李培冠博客:lpgit.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM