【FastDFS】FastDFS+FastDHT完成檔案上傳去重
一、前言
最近公司讓我搞FastDFS分散式檔案系統。整個叢集環境已經搭建成功啦。但是有一個問題一直困擾著我,那就是重複檔案的上傳。即使是同一個檔案,多次上傳,返回的id也是不一樣的。這樣就造成了磁碟資源的極大浪費。但是呢FastDFS本身是不支援重複檔案去重的。好在FastDFS的作者餘慶提供了一種解決思路。那就是FastDHT。
FastDHT是分散式雜湊系統(DHT),使用BerkeleyDB做資料儲存,使用libevent做網路IO處理。依賴於libfastcommon。
二、安裝
1、基本環境:
CentOS7、libfastcommon、Berkeley、FastDHT
2、安裝前需要的環境gcc
yum install make cmake gcc gcc-c++
3、正式安裝
進入下載目錄:cd/usr/local/src
下載libfastcommon、Berkeley DB、FastDHT
①安裝libfastcommon (安裝FastDFS應該已經裝了。無需重複安裝)
解壓、進入解壓縮目錄
unzip libfastcommon-master.zip
cd libfastcommon-master
編譯、安裝
./make.sh && ./make.sh install
②安裝 Berkeley DB。我下載的版本是db-6.0.30版本
進入解壓縮目錄
cd /usr/local/src/db-6.0.30/ build_unix/
進行提權:
chmod 777 ../dist/configure
選擇安裝目錄../dist/configure --prefix=/usr/local/db-6.0.30
編譯、安裝make && make install
(編譯安裝的時間有點長,請耐心等待)安裝完db,會在/usr/local目錄下生成db-6.0.30目錄
③安裝fastDHT
cd /usr/local/src/
unzip fastdht-master.zip
cd fastdht-master
vim make.sh編譯之前需要先修改make.sh檔案。在大約27修改CFLAGS為:
編譯、安裝CFLAGS='-Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -I/usr/local/db-6.0.30/include/ -L/usr/local/db-6.0.30/lib/'
./make.sh && ./make.sh install
最後會在/usr/local/bin生成安裝後的檔案,在/etc/fdht下生成配置檔案。
二、環境配置
1、建立目錄
mkdir/fastdht
2、修改fdhtd.conf檔案
vim /etc/fdht/fdhtd.conf
port=11411
base_path=/fastdht(該目錄必須是已經存在的)
#include /etc/fdht/fdht_servers.conf(本行前有#表示開啟,如果想關閉此選項,則應該為##開頭)
3、修改fdht_servers.conf檔案
vim /etc/fdht/fdht_servers.conf
group_count = 2 (數字可自定義)
group0 = 192.168.224.223:11411
group0 = 192.168.224.224:11411
group1 = 192.168.224.223:11411
group1 = 192.168.224.224:11411
4、修改fdht_client.conf檔案
vim /etc/fdht/fdht_client.conf
keep_alive=1 --> (本選項關聯 storaged.conf檔案)
base_path= /fastdht (該目錄必須是已經存在的)
#include /etc/fdht/fdht_servers.conf
(注意: #和include之間沒有空格)
5、修改storage.conf檔案
vim /etc/fdfs/storage.conf
line 195: check_file_duplicate=1
(本配置項解釋: 是否檢測上傳檔案已經存在。如果已經存在,則不存在檔案內容,建立一個索引連結以節省磁碟空間)
line 206: key_namespace=FastDFS
(本配置項解釋: 當上個引數設定為1時 , 在FastDHT中的名稱空間)
line 210 keep_alive=1
(本配置項解釋: 長連線配置選項,如果為0則為短連線 1為長連線)
line 217: #include /etc/fdht/fdht_servers.conf
(本配置項解釋: 可以通過 #include filename 方式來載入 FastDHT servers 的配置)
(注意: #和include之間沒有空格)
三、啟動FastDHT
1、啟動命令:
fdhtd /etc/fdhtd/fdhtd.conf
2、重啟命令:fdhtd /etc/fdht/fdhtd.conf restart
3、出錯排查
若出現如下錯誤
第一步:cp /usr/local/db-6.0.30/lib/libdb-6.0.so /usr/lib/
第二步:檢視動態連結庫是否全連結完畢
ldd /usr/local/bin/fdhtd
由圖中可知缺少libdb-6.0.so
4、執行ldconfig命令
ldconfig
(ldconfig命令的用途, 主要是在預設搜尋目錄(/lib和/usr/lib)以及動態庫配置檔案/etc/ld.so.conf內所列的目錄下, 搜尋出可共享的動態連結庫(格式如lib*.so*), 進而創建出動態裝入程式(ld.so)所需的連線和快取檔案. 快取檔案預設為/etc/ld.so.cache, 此檔案儲存已排好序的動態連結庫名字列表)
5、再次執行ldd /usr/local/bin/fdhtd
有圖中可知已經不缺少libdb-6.0so啦。
6、再次啟動FastDHT
fdhtd /etc/fdht/fdhtd.conf
7、檢視埠是否啟動
netstat -an | grep 11411
(注意:要先啟動FastDHT。在啟動storage,才能使檔案去重功能生效。)
8、設定FastDHT開機自啟
vi /etc/rc.local
加入以下配置:
fdhtd /etc/fdht/fdhtd.conf
如果開啟自啟不生效,可能是centOS找不到fdhtd檔案。建議把全路徑寫上:/usr/local/bin/fdhtd /etc/fdht/fdhtd.conf。
執行命令,使之生效:
chmod +x /etc/rc.local
9、效果展示圖
多次執行命令來上傳同一個檔案。如 /usr/bin/fdfs_upload_file /etc/fdfs/client.conf/usr/local/src/1234.jpeg 最終的效果圖如下圖所示。
從圖中可以看出,生成了許多類似快捷方式的圖表。這說明FastDHT檔案去重功能已經成功實現。