天天看點

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

FastDFS實作分布式檔案系統

1、FastDFS簡介

FastDFS是什麼

用C語言編寫的一款分布式檔案系統。FastDFS為網際網路量身定制,充分考慮到了備援備份、負載均衡、線性擴容等機制,注重高可用、高性能。

使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳下載下傳等服務。

流程
FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

2、安裝及配置

安裝流程

準備好FastDFS的相關壓縮包。

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

1)

yum -y install libevent

安裝相關的依賴環境

2)解壓

libfastcommon-1.0.7.tar.gz

壓縮包,并進入解壓後的檔案夾

3)

./make.sh

指令編譯,然後

./make.sh install

安裝

4)安裝完成後會産生

/usr/lib64/libfastcommon.so

檔案,将檔案複制到

/usr/lib

目錄下

5)同理的解壓

fastdfs-5.05.tar.gz

檔案,然後進入解壓後的目錄,

./make.sh

編譯然後

./make.sh install

安裝。

安裝完成後會在

/usr/bin

下添加一些配置:

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

會在

/etc/fdfs/

目錄下添加配置檔案如下:

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

會在我們解壓的

fastdfs-5.05

目錄下建立

conf

目錄,并添加了一些配置如下:

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

6)将

fastdfs-5.05

下的

conf

下的所有檔案拷貝到

/etc/fdfs/

,在

conf

在執行指令

cp * /etc/fdfs/

。如此保證所有的配置檔案都在

/etc/fdfs

目錄下

7)可以修改資料儲存目錄。編輯

/etc/fdfs/tracker.conf

,設定

base_path=/data/fastdfsData/tracker
           

并建立目錄

/data/fastdfsData/tracker

,

/data/fastdfsData/storage

,

/data/fastdfsData/client

,

/data/fastdfsData/tmp

8)

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

即可啟動tracker

9)配置

/etc/fdfs/storage.conf

base_path=/data/fastdfsData/storage
store_path0=/data/fastdfsData/storage
tracker_server=172.17.97.78:22122   #這裡的ip位址為本機的ip位址,用于與tracker通信。不能寫成localhost或127.0.0.1
           

10)

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

啟動storage

11)同理修改

/etc/fdfs/client.conf

中的basepath和ip

12)測試一下上傳檔案。

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/bg.jpg

上述指令表示,按照

client.conf

啟動

fdfs_test

并執行上傳功能,上傳本地

/home/bg.jpg

檔案。

指令執行後傳回一個url檔案路徑。(但是此時還不能通路)

13)解壓fastdfs-nginx-module_v1.16.tar.gz,并進入解壓後的目錄下的src目錄

14)編輯

/data/fastDFS/fastdfs-nginx-module/src/config

将配置檔案中的出現的local删除

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

15)安裝nginx。解壓nginx壓縮包并進入目錄。

  1. 先安裝一些依賴。
yum -y install zlib zlib-devel pcre prce-devel openssl openssl-devel perl unzip
           
  1. 執行以下指令安裝nginx并與fastdfs-nginx-module關聯。如果還是提示缺少依賴,則安裝相應依賴先。
./configure --prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/data/fastDFS/fastdfs-nginx-module/src
           
  1. 在nginx的目錄下執行

    make

    指令并install。
  2. 安裝完成後會建立

    /usr/local/nginx

    目錄

16)拷貝

/data/fastDFS/fastdfs-nginx-module/src

下的

mod_fastdfs.conf

/etc/fdfs

17)修改剛拷貝的

mod_fastdfs.conf

檔案

base_path=/data/fastdfsData/tmp
tracker_server=172.17.97.78:22122
store_path0=/data/fastdfsData/storage
           

18)編輯

/usr/local/nginx/conf/nginx.conf

添加配置

server {
    listen       80;
    server_name  172.17.97.78;
    location /group1/M00 {
        root /data/fastdfsData/storage/;
        ngx_fastdfs_module;
    }
}
           

19)進入

/usr/local/nginx/sbin

下執行

./nginx -t

測試nginx是否順利執行

如果出現以下錯誤,手動建立目錄即可

mkdir -p /var/temp/nginx/client

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

20)執行nginx。

./nginx

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

21)然後就可以通路了。

3、SpringBoot整合

利用開源項目:https://github.com/tobato/FastDFS_Client 進行整合

1)導入依賴

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

2)配置資訊

# ===================================================================
# 分布式檔案系統FDFS配置
# ===================================================================
fdfs:
  so-timeout: 1501
  connect-timeout: 601 
  thumb-image:             #縮略圖生成參數
    width: 150
    height: 150
  tracker-list:            #TrackerList參數,支援多個
    - 192.168.1.105:22122  # 改為伺服器的ip位址
    - 192.168.1.106:22122 
           

3)上傳檔案

@RestController
public class UserController {

    @Autowired
    private FastFileStorageClient storageClient;

    @RequestMapping("/uploadImg")
    public R uploadMultipartFile(MultipartFile file) throws Exception{
        String url = storageClient.uploadImageAndCrtThumbImage(file.getInputStream(), file.getSize(),
                "png", null).getPath();
        System.out.println(url);
        return R.ok(url);
    }
}
           

4)測試接口。

可能出現的問題:

1)在配置FastDFS時我使用的是伺服器的私網IP,是以用戶端去上傳時會去請求私網ip,當然不會成功。

解決方案:将FastDFS中配置為私網ip的地方換成公網ip。

FastDFS實作分布式檔案系統FastDFS實作分布式檔案系統

最終傳回的url沒有帶上groupname,我們通路時需要自己帶上。

此外,預設還為我們上傳了縮略圖,通路

M00/00/00/rBFhTl8aSXqAU6dpAAVZhrXpCdc309_150×150.png

即通路的是縮略圖。

繼續閱讀