企業級分布式存儲應用與實戰FastDFS實現


FASTDFS是什么

FastDFS是由國人余慶所開發,其項目地址:https://github.com/happyfish100

FastDFS是一個輕量級的開源分布式文件系統,主要解決了大容量的文件存儲和高並發訪問的問題,文件存取時實現了負載均衡。

FastDFS是一款類Google FS的開源分布式文件系統,它用純C語言實現,支持Linux、FreeBSD、AIX等UNIX系統。它只能通過 專有API對文件進行存取訪問,不支持POSIX接口方式,不能mount使用。准確地講,Google FS以及FastDFS、mogileFS、 HDFS、TFS等類Google FS都不是系統級的分布式文件系統,而是應用級的分布式文件存儲服務。

FastDFS的特性

1、分組存儲,靈活簡潔、對等結構,不存在單點

2、 文件ID由FastDFS生成,作為文件訪問憑證。FastDFS不需要傳統的name server

3、和流行的web server無縫銜接,FastDFS已提供apache和nginx擴展模塊

4、大、中、小文件均可以很好支持,支持海量小文件存儲

5、 支持多塊磁盤,支持單盤數據恢復

6、 支持相同文件內容只保存一份,節省存儲空間

7、 存儲服務器上可以保存文件附加屬性

8、 下載文件支持多線程方式,支持斷點續傳

指標

FastDFS

mogileFS

系統簡潔性

簡潔,只有兩個角色:tracker和storage

一般,有三個角色:tracker,storage和存儲文件信息的mysql db

系統性能

很高(沒有數據庫,文件同步直接點對點,不經過tracker中轉)

高(使用mysql來存儲文件索引等信息文件同步通過tracker調度和中轉)

系統穩定性

高(c語言開發,可以支持高並發和高負載)

一般(Perl語言開發,高並發和高負載支持一般)

RAID方式

分組(組內冗余),靈活性大

動態冗余,靈活性一般

通信協議

專有協議

下載文件支持http

http

技術文檔

較詳細

較少

文件附加屬性(meta data)

支持

不支持

相同內容文件只保存一分

支持

不支持

下載文件時支持文件偏移量

支持

不支持

 

FastDFS和集中存儲方式對比

指標

FastDFS

NFS

集中存儲設備如:NetApp,NAS

線性擴容性

文件高並發訪問性能

一般

文件訪問方式

專有API

POSIX

支持POSIX

硬件成本

較低

中等

相同文件內容只保存一份

支持

不支持

不支持

 

工作方式:客戶端向tracker發出請求,然后tracker從storage節點拿到源數據,返還給客戶端,然后客戶端根據源數據再去請求storage節點。

 

FastDFS架構解讀

1.只有兩個角色,tracker server和storage server,不需要存儲文件索引信息

2.所有服務器都是對等的,不存在Master-Slave關系

3.存儲服務器采用分組方式,同組內存儲服務器上的文件完全相同(RAID 1)

4.不同組的storage server之間不會相互通信

5.由storage server主動向tracker server報告狀態信息,tracker server之間通常不會相互通信

 

系統架構-上傳文件流程圖

1. client詢問tracker上傳到的storage;

2. tracker返回一台可用的storage;

3. client直接和storage通信完成文件上傳,storage返回文件ID。

 

•系統架構-下載文件流程圖

1. client詢問tracker下載文件的storage,參數為文件ID(組名和文件名);

2. tracker返回一台可用的storage;

3. client直接和storage通信完成文件下載。

 

FastDFS同步機制

1.采用binlog文件記錄更新操作,根據binlog進行文件同步同一組內的storage server之間是對等的,文件上傳、刪除等操作可以在任意一台storage server上進行;

2.文件同步只在同組內的storage server之間進行,采用push方式,即源服務器同步給目標服務器;

源頭數據才需要同步,備份數據不需要再次同步,否則就構成環路了;

3.上述第二條規則有個例外,就是新增加一台storage server時,由已有的一台storage server將已有的所有數據(包括源頭數據和備份數據)同步給該新增服務器。

 

FastDFS用戶請求過程

 

FastDFS核心組件

Tracker:調度器,負責維持集群的信息,例如各group及其內部的storage node,這些信息也是storage node報告所生成;每個storage node會周期性向tracker發心跳信息;

storage server:以group為單位進行組織,任何一個storage server都應該屬於某個group,一個group應該包含多個storage server;在同一個group內部,各storage server的數據互相冗余;

 

FastDFS運行機制

如何在組中挑選storage server:

1、rr;

2、以ip為次序,找第一個,即IP地址較小者;

3、以優先級為序,找第一個;

如何選擇磁盤(存儲路徑):

1、rr;

2、剩余可用空間大者優先;

生成FID:

由源頭storage server ip、創建時的時間戳、大小、文件的校驗碼和一個隨機數進行hash計算后生成;最后基於base64

進行文本編碼,轉換為可打印字符;

groupID/MID/H1ID/H2ID/file_name

groupID:組編號

MID:存儲路徑(存儲設備)編號

H1ID/H2ID:目錄分層

file_name:文件名,不同於用戶上傳時使用文件名,而是由服務器生成hash文件名;

服務器IP、文件創建時的時間戳、文件大小、文件名和擴展名;

文件同步:

每個storage server在文件存儲完成后,會將其信息存於binlog, binlog不包含數據,僅包含文件名等元數據信息;

binlog可用於同步;

 

FastDFS配置修改

tracker:

編輯tracker server配置文件tracker.conf,需要修改內容如下:

disabled=false(默認為false,表示是否無效)

port=22122(默認為22122)

base_path=/data/fastdfs/tracker

 

storage server:

disabled=false(默認為false,表示是否無效)

port=23000(默認為23000)

base_path=/data/fastdfs/storage

tracker_server=172.18.10.232:22122

store_path0=/data/fastdfs/storage

http.server_port=8888(默認為8888,nginx中配置的監聽端口那之一致)

 

實驗:企業級分布式存儲應用與實戰fastdfs實現

實驗環境:3台機器,一台tracker調度器,兩台storage節點服務器

(1)安裝fastdfs

1.創建一個安裝fastdfs所需軟件包的目錄

cd /app

mkdir fastdfs

2.用lftp將安裝fastdfs所需軟件包下載到該目錄里

lftp 172.17.0.1

lftp 172.17.0.1:/pub/Sources/7.x86_64/fastdfs> mget *

3.安裝fastdfs

yum localinstall fastdfs* lib* -y 因為有依賴關系,所以和依賴的庫文件包一起安裝

4.另外兩台機器也是如此

(2)配置tracker調度器

cd /etc/fdfs

cp tracker.conf.sample tracker.conf 在/etc/fdfs目錄下有一個tracker配置文件模板,將其復制並改名為tracker.conf作為tarcker的配置文件

vim tracker.conf

disabled=false(默認為false,表示是否無效)

port=22122(默認為22122)

base_path=/data/fastdfs/tracker

 

mdkir /data/fastdfs/tracker -p

 

/etc/init.d/fdfs_trackerd start 啟動tracker服務

注意:路徑和創建的目錄要一致,不要寫錯,否則tracker服務就會起不來

ss -ntl 查看是否有22122端口

ps -ef|grep fdfs 查看tracker進程

(3)配置storage節點服務器

cd /etc/fdfs

cp storage.conf.sample storage.conf 在/etc/fdfs目錄下有一個storage配置文件模板,將其復制並改名為storage.conf作為storage的配置文件

 

vim storage.conf

disabled=false(默認為false,表示是否無效)

port=23000(默認為23000)

base_path=/data/fastdfs/storage

tracker_server=172.18.10.232:22122

store_path0=/data/fastdfs/storage

http.server_port=8888(默認為8888,nginx中配置的監聽端口那之一致)

 

mkdir /data/fastdfs/storage -p

/etc/init.d/fdfs_storaged start 啟動storage服務

注意:路徑和創建的目錄要一致,不要寫錯,否則storage服務就會起不來

ss -ntl 查看是否有23000端口

ps -ef|grep fdfs

 

(4)查看存儲節點狀態,需要配置客戶端配置文件

cd /etc/fdfs

cp client.conf.sample client.conf

vim client.conf

base_path=/data/fastdfs/tracker

tracker_server=192.168.10.190:22122

 

fdfs_monitor /etc/fdfs/client.conf 查看存儲節點狀態

 

(5)文件上傳

fdfs_upload_file /etc/fdfs/client.conf /root/solo-2.2.0.war

在storage節點服務器上查看

我們可以在tracker調度器上做md5校驗

 

6.上傳文件查看(在調度器上查看)

fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log

 

7.文件下載

fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgKu1ocsWGADh40AABakQQUHpk839.log

 

8.FastDFS實現nginx代理(在storage節點)

1、安裝nginx以及對應模塊

cd /app/fastdfs

yum localinstall nginx* -y

2、修改nginx的location配置,映射路徑和啟動模塊

location /group1/M00 {

root /data/fastdfs/storage/data;

ngx_fastdfs_module;

}

3、修改對應fastdfs模塊

vim /etc/fdfs/mod_fastdfs.conf

url_have_group_name = true

tracker_server=192.168.10.190:22122

store_path0=/data/fastdfs/storage

4.啟動nginx服務

5.然后我上傳一個圖片文件

6.在瀏覽器上去訪問,訪問成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM