一步步帶你用 FastDFS 搭建檔案管理系統 詳細的不得鳥
目錄
- FastDFS概述
- FastDFS 中的三個角色
- FastDFS 三個角色的關係
- FastDFS叢集
- FastDFS 架構說明
- FastDFS 安裝
- 安裝 fastdfs-nginx-module
- nginx 配置
- 啟動 nginx
- 李培冠部落格
FastDFS概述
-
餘慶大佬用 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