天天看點

FastDFS 的安裝以及內建springboot

是什麼

fastDFS是一個分布式檔案存儲系統,适合存儲中小檔案(不超過500M)的系統,有着動态擴容,資料備份等的特點。

4.05版本删去了http直接通路的内部資料的支援。是以需要加入Nginx在storage裡進行區分

結構

  • 跟蹤伺服器(Tracker Server)

追蹤伺服器負責接收客戶的請求,選擇合适的存儲位置(storage Server), 同時也會使用心跳機制確定storage Server是否存活。

tracker是連接配接storage和使用者端(client)的部分,能将目前的磁盤使用情況回報給使用者端(client)。

tracker的内容放置于記憶體中,tracker地位對等,沒有主從之分。是以不需要選舉算法。

  • 存儲伺服器(storage server)

實際存儲資料,分成若幹組進行高可用,分布式存儲的核心是通過tracker管理storage中的組。組内資料通過group記性隔離。

  • 用戶端(client)

上傳和下載下傳的入口,每個用戶端都要安裝一個Nginx。

架構圖

FastDFS 的安裝以及內建springboot

寫資料是通過tracker寫入,tracker将資料寫到某一個storage組内。

取資料的時候直接從storage裡面讀取。

縱向的資料是相同的複制資料,橫向為所有資料。即所有的資料都在一個組上,這樣在查找的時候就知道資料在哪裡了 然後隻要查詢可用的節點就可以了。

上圖中,豎着為一組,組内的資訊互相複制,每組取一個資料集,就可以組成一個完整的資料集即組間實作高可用。

讀寫操作

寫入

storage會建立2級目錄檔案,每一級256個,一共合計65536個。新檔案會被哈希散列以後加入某一個子目錄下。

FastDFS 的安裝以及內建springboot

下載下傳

下載下傳操作是先查詢storage server的ip和端口号,通過使用組名、路徑、檔案名三個進行唯一查找。

FastDFS 的安裝以及內建springboot

單機安裝

以下來自 愛程式設計(icodingedu.com) 航天班

1、gcc基礎環境安裝

#tracker,storage機器 都需要安裝
yum -y install gcc automake autoconf libtool make
yum -y install gcc gcc-c++
           

2、libfastcommon安裝

#tracker,storage機器 都需要安裝
cd /usr/local/src
wget https://github.com/happyfish100/libfastcommon/archive/master.zip
yum -y install unzip
unzip master.zip
cd libfastcommon-master
./make.sh && ./make.sh install

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
           

3、FastDFS檔案安裝

#tracker,storage機器 都需要安裝
cd /usr/local/src
wget https://github.com/happyfish100/fastdfs/archive/master.zip
unzip master.zip
cd fastdfs-master
./make.sh && ./make.sh install
           

4、配置跟蹤器tracker

#建立tracker的資料檔案/日志目錄
mkdir /usr/local/mydata
cd /etc/fdfs
# 存一個副本
cp tracker.conf tracker.conf.samlpe
vi tracker.conf
#修改配置如下
disabled=false #啟用配置檔案
port=22122 #設定tracker的端口号
base_path=/usr/local/mydata #設定tracker的資料檔案和日志目錄
http.server_port=8080 #設定http端口号HTTP port on this tracker server

#啟動tracker服務
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start #restart
#啟動沒有報錯就為啟動成功。
---
注意:對于存儲負載有着以下三種規則:
# the method for selecting group to upload files
# 0: round robin
# 輪循
# 1: specify group
# 特殊store 也就是如果選擇了這個 在下面需要選擇放置的組
# 2: load balance, select the max free space group to upload file
# 預設是2 意味着會優先選擇空間(可用)大的store進行存儲
# 注意需要注意,一個組的空間大小是根據最小的容量來确定,進而要避免組内水準複制時候存不下。
store_lookup = 2

# which group to upload file
# when store_lookup set to 1, must set store_group to the group name
store_group = group2

           

5、配置存儲器storage

#建立存放storage 資料/日志檔案目錄
mkdir /usr/local/mydata
cd /etc/fdfs
cp storage.conf.sample storage.conf
vi storage.conf
#修改配置如下
disabled=false #啟用配置檔案 
group_name=group1 #組名,根據實際情況修改,叢集分組
port=23000 #設定storage的端口号
base_path=/usr/local/mydata #設定storage的日志目錄
store_path_count=1 #存儲路徑個數,需要和store_path個數比對 
store_path0=/usr/local/mydata #存儲路徑,配置多塊硬碟會用到
tracker_server=192.168.0.112:22122 #tracker伺服器的IP位址和端口号 注意這裡必須填本機内網ip不能填寫回環位址不然會報錯 這裡是伺服器的内網ip
http.server_port=8888 #設定http端口号the port of the web server on this storage server

#啟動
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start  # restart
           
FastDFS 的安裝以及內建springboot

在storage主動給tracker發送心跳進行注冊。

這樣可以實作動态擴容,隻要和tracker建立連接配接就可以擴容。

下來我們對搭建的fastDFS進行測試。先上傳一個檔案已準備測試。

6、FastDFS本機client測試

cd /etc/fdfs
cp client.conf.samp吃的le client.conf
vi /etc/fdfs/client.conf
#修改配置檔案
base_path=/usr/local/mydata
tracker_server=192.168.0.112:22122 #檔案通過tracker上傳
# 使用一下指令使用client用戶端連接配接tracker上傳檔案
#/usr/bin/fdfs_test client.conf位址 upload 上傳檔案位址路徑
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/fastDFS/a.jpg 
           

結果如下截圖

FastDFS 的安裝以及內建springboot

這裡可以看到确實存在檔案

FastDFS 的安裝以及內建springboot
注意這裡還是不能通路需要借助Nginx才行。

搭建http服務進行圖檔通路

以下為摘抄Nginx安裝

FastDFS Version 4.05 remove embed HTTP support

如果是單機則不需要安裝 fastdfs-nginx-module,直接做目錄映射即可

安裝Nginx提供http支援

1、安裝PCRE rewrite子產品需要使用到的正規表達式子產品
cd /usr/local/src
wget https://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
tar -zxvf pcre-8.43.tar.gz
cd pcre-8.43
./configure
make && make install
           
2、安裝zlib:用于對資料進行解壓縮。網站之間通信時資料先壓縮再傳輸,通過消耗CPU的方式來節省網絡帶寬
cd /usr/local/src
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install
           
3、安裝openssl:用于網站加密通訊
cd /usr/local/src
wget http://www.openssl.org/source/old/1.0.2/openssl-1.0.2e.tar.gz
tar -zxvf openssl-1.0.2e.tar.gz
cd openssl-1.0.2e
./config
make && make install
           
4、安裝Nginx
cd /usr/local/src
wget http://nginx.org/download/nginx-1.9.9.tar.gz
tar -zxvf nginx-1.9.9.tar.gz
cd nginx-1.9.9
./configure --prefix=/usr/local/nginx
make && make install
           

進入Nginx的目錄下修改配置檔案

/usr/local/nginx/conf

下面的nginx.conf檔案。

加入檔案的路徑

location ~/group1/M00 {
	  rewrite ^/group1/M00/(.*)$ /$1 break;
    root /usr/local/mydata/data;
}
           

然後重新加載

../sbin/nginx -s reload

我們通路剛才的位址就可以看到圖檔了

FastDFS 的安裝以及內建springboot

內建springboot

官網

內建springboot的步驟就是導包、配置。

導包: 導入fastDFS的依賴

<dependency>
      <groupId>com.github.tobato</groupId>
      <artifactId>fastdfs-client</artifactId>
      <version>1.26.7</version>
</dependency>
           

配置:

# fastDFS的配置
#連接配接逾時
fdfs.connect-timeout=3000
#讀取逾時
fdfs.so-timeout=5000
# tracker List 清單 叢集的話可以寫多個配置
fastdfs.tracker_servers = 10.0.11.247:22122,XX,XX,XX,XX:XXXX

           

代碼:

這裡為了簡化測試上傳了本地的圖檔,步驟是現加載出本地的圖檔然後轉成流最終

@GetMapping("/dfs/upload")
    public String upload(){
        String filePath = "";

        File file = new File("D:\\BaiduNetdiskDownload\\圖檔\\photo\\2.jpg");
        try {
            // 
            InputStream fileInputStream = new FileInputStream(file);
            byte[] bytes = new byte[(int)file.length()];
            fileInputStream.read(bytes);

            StorePath jpg = fastFileStorageClient.uploadFile(new ByteArrayInputStream(bytes), file.length(), "jpg", null);
            String fullPath = jpg.getFullPath();
            System.out.println(fullPath);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return filePath;
    }
           

不過這個時候上傳還是會報錯。

FastDFS 的安裝以及內建springboot
FastDFS 的安裝以及內建springboot

【解釋】這裡的172.31.74.157:23000。這裡的配置進入了tracker以後缺少代理導緻這裡會找本機上面的172.31.74.157:23000自然找不到。

看到storage注冊tracker是通過内網。是以需要修改位址。

FastDFS 的安裝以及內建springboot

為了驗證我們修改位址為公網位址。

FastDFS 的安裝以及內建springboot

再次運作項目

FastDFS 的安裝以及內建springboot

傳回了路徑 我們将路徑粘貼到位址欄,發現實作了上傳功能。

FastDFS 的安裝以及內建springboot

我們得到這裡面的client - tracker - storage需要在同一個網段。餘慶的公衆号:fastdfs裡面提到了建議将fastDFS部署在内網而且不要對外提供服務。不管是tracker的22122端口還是所有的storage的23000端口都不要對外暴露