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