FastDFS實作分布式檔案系統
1、FastDFS簡介
FastDFS是什麼
用C語言編寫的一款分布式檔案系統。FastDFS為網際網路量身定制,充分考慮到了備援備份、負載均衡、線性擴容等機制,注重高可用、高性能。
使用FastDFS很容易搭建一套高性能的檔案伺服器叢集提供檔案上傳下載下傳等服務。
流程
2、安裝及配置
安裝流程
準備好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
下添加一些配置:
會在
/etc/fdfs/
目錄下添加配置檔案如下:
會在我們解壓的
fastdfs-5.05
目錄下建立
conf
目錄,并添加了一些配置如下:
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删除
15)安裝nginx。解壓nginx壓縮包并進入目錄。
- 先安裝一些依賴。
yum -y install zlib zlib-devel pcre prce-devel openssl openssl-devel perl unzip
- 執行以下指令安裝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
- 在nginx的目錄下執行
指令并install。make
- 安裝完成後會建立
目錄/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
20)執行nginx。
./nginx
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。
最終傳回的url沒有帶上groupname,我們通路時需要自己帶上。
此外,預設還為我們上傳了縮略圖,通路
M00/00/00/rBFhTl8aSXqAU6dpAAVZhrXpCdc309_150×150.png
即通路的是縮略圖。