FastDFS介紹


一、FastDFS介紹

簡介

  FastDFS是一個開源的高性能分布式文件系統(DFS)。它的主要功能包括:文件存儲,文件同步和文件訪問,以及高容量和負載平衡。主要解決了海量數據存儲問題,特別適合以中小文件(建議范圍:4KB < file_size <500MB)為載體的在線服務。

  FastDFS系統三大角色:跟蹤服務器(Tracker Server)、存儲服務器(Storage Server)和客戶端(Client)。

  • 跟蹤服務器(Tracker Server)

    跟蹤服務器,主要做調度工作,起到均衡的作用;負責管理所有的 存儲服務器(Storage Server) 和 group),每個 storage 在啟動后會連接 跟蹤服務器Tracker,告知自己所屬 group 等信息,並保持周期性心跳。

  • 存儲服務器(Storage Server)

    存儲服務器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多台 存儲服務器storage server數據互為備份

  • 客戶端(Client)

    客戶端,作為業務請求的發起方,通過專有接口,使用TCP/IP協議與跟蹤器服務器或存儲節點進行數據交互。

  

FastDFS的存儲策略

  為了支持大容量,存儲節點(服務器)采用了分卷(或分組)的組織方式。存儲系統由一個或多個卷組成,卷與卷之間的文件是相互獨立的,所有卷的文件容量累加就是整個存儲系統中的文件容量。一個卷可以由一台或多台存儲服務器組成,一個卷下的存儲服務器中的文件都是相同的,卷中的多台存儲服務器起到了冗余備份和負載均衡的作用。

  在卷中增加服務器時,同步已有的文件由系統自動完成,同步完成后,系統自動將新增服務器切換到線上提供服務。當存儲空間不足或即將耗盡時,可以動態添加卷。只需要增加一台或多台服務器,並將它們配置為一個新的卷,這樣就擴大了存儲系統的容量。

FastDFS的文件上傳

  FastDFS向使用者提供基本文件訪問接口,比如upload、download、append、delete等,通過客戶端的方式提供給用戶使用。

  Storage Server會定期的向Tracker Server發送自己的存儲信息。當Tracker Server Cluster中的Tracker Server不止一個時,各個Tracker之間的關系是對等的,所以客戶端上傳時可以選擇任意一個Tracker。

  當Tracker收到客戶端上傳文件的請求時,會為該文件分配一個可以存儲文件的group,當選定了group后就要決定給客戶端分配group中的哪一個storage server。當分配好storage server后,客戶端向storage發送寫文件請求,storage將會為文件分配一個數據存儲目錄。然后為文件分配一個fileid,最后根據以上的信息生成文件名存儲文件。

  

FastDFS的文件同步

  寫文件時,客戶端將文件寫至group內一個storage server即認為寫文件成功,storage server寫完文件后,會由后台線程將文件同步至同group內其他的storage server。

  每個storage寫文件后,同時會寫一份binlog,binlog里不包含文件數據,只包含文件名等元信息,這份binlog用於后台同步,storage會記錄向group內其他storage同步的進度,以便重啟后能接上次的進度繼續同步;進度以時間戳的方式進行記錄,所以最好能保證集群內所有server的時鍾保持同步。

  storage的同步進度會作為元數據的一部分匯報到tracker上,tracke在選擇讀storage的時候會以同步進度作為參考。

FastDFS的文件下載

  客戶端uploadfile成功后,會拿到一個storage生成的文件名,接下來客戶端根據這個文件名即可訪問到該文件。

  

  跟upload file一樣,在downloadfile時客戶端可以選擇任意tracker server。tracker發送download請求給某個tracker,必須帶上文件名信息,tracke從文件名中解析出文件的group、大小、創建時間等信息,然后為該請求選擇一個storage用來服務讀請求。

部署結構圖

  

二、下載安裝使用(linux)

  Windows暫時不能使用FastDFS,如果真的需要在Windows,通過docker使用。

0. 下載安裝libfastcommon環境

  libfastcommon是從 FastDFS 和 FastDHT 中提取出來的公共 C 函數庫,基礎環境,安裝即可 

① 下載libfastcommon

  wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

② 解壓
  tar -zxvf V1.0.7.tar.gz
③ 編譯、安裝
 cd libfastcommon-1.0.7
  ./make.sh
  ./make.sh install
 cd /usr/lib64
  ll libfast*
④ 復制libfastcommon.so 到 usr/lib
 cp libfastcommon.so /usr/lib
 cd /usr/lib

1. 下載安裝FastDFS

① 下載FastDFS

  wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz

② 解壓FastDFS

  tar -zxvf V5.11.tar.gz

③ 編譯安裝

  進入解壓文件夾,通過以下命令

  ./make.sh

  ./make.sh install

2. 配置FastDFS服務

① 配置跟蹤服務器(tracker)

① 進入 /etc/fdfs,復制 FastDFS 跟蹤器樣例配置文件 tracker.conf.sample,並重命名為 tracker.conf。

  # cd /etc/fdfs

  # cp tracker.conf.sample tracker.conf

  # vim tracker.conf

② 編輯tracker.conf ,標紅的需要修改下,其它的默認即可。
vim tracker.conf

# 配置文件是否不生效,false 為生效
disabled=false

# 提供服務的端口
port=22122

# Tracker 數據和日志目錄地址(根目錄必須存在,子目錄會自動創建)
base_path=/ljzsg/fastdfs/tracker

# HTTP 服務端口
http.server_port=80

③ 創建tracker基礎數據目錄,在FastDFS安裝路徑下

cd fastdfs/
mkdir tracker
mkdir storage
mkdir client

如果已存在,不用創建

④ 防火牆中打開跟蹤端口(默認的22122)

# vim /etc/sysconfig/iptables

添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重啟防火牆:
# service iptables restart

⑤ 啟動Tracker

初次成功啟動,會在 /{base_path}/fdfsdfs/tracker/ 下創建 data、logs 兩個目錄。也可以用這種方式啟動,

下面兩種,二選一。前提是上面創建了軟鏈接,后面都用這種方式啟動

  # /etc/init.d/fdfs_trackerd start

  # service fdfs_trackerd start
查看 FastDFS Tracker 是否已成功啟動 ,22122端口正在被監聽,則算是Tracker服務安裝成功。

  # netstat -unltp|grep fdfs

關閉Tracker命令:

  # service fdfs_trackerd stop

⑥ 設置Tracker開機啟動

  # chkconfig fdfs_trackerd on

或    # vim /etc/rc.d/rc.local:加入配置:/etc/init.d/fdfs_trackerd start 

⑦ tracker server 目錄及文件結構 

 Tracker服務啟動成功后,會在base_path下創建data、logs兩個目錄。目錄結構如下:

${base_path}
  |__data
  |   |__storage_groups.dat:存儲分組信息
  |   |__storage_servers.dat:存儲服務器列表
  |__logs
  |   |__trackerd.log: tracker server 日志文件 

 

② 配置存儲服務器storage

1 進入 /etc/fdfs 目錄,復制 FastDFS 存儲器樣例配置文件 storage.conf.sample,並重命名為 storage.conf

  # cd /etc/fdfs

  # cp storage.conf.sample storage.conf
  # vim storage.conf

2 編輯storage.conf

標紅的需要修改,其他的默認即可。

# 配置文件是否不生效,false 為生效
disabled=false

# 指定此 storage server 所在 組(卷)
group_name=group1

# storage server 服務端口
port=23000

# 心跳間隔時間,單位為秒 (這里是指主動向 tracker server 發送心跳)
heart_beat_interval=30

# Storage 數據和日志目錄地址(根目錄必須存在,子目錄會自動生成)
base_path=/ljzsg/fastdfs/storage

# 存放文件時 storage server 支持多個路徑。這里配置存放文件的基路徑數目,通常只配一個目錄。
store_path_count=1


# 逐一配置 store_path_count 個路徑,索引號基於 0。
# 如果不配置 store_path0,那它就和 base_path 對應的路徑一樣。
store_path0=/ljzsg/fastdfs/file

# FastDFS 存儲文件時,采用了兩級目錄。這里配置存放文件的目錄個數。
# 如果本參數只為 N(如: 256),那么 storage server 在初次運行時,會在 store_path 下自動創建 N * N 個存放文件的子目錄。
subdir_count_per_path=256

# tracker_server 的列表 ,會主動連接 tracker_server
# 有多個 tracker server 時,每個 tracker server 寫一行
tracker_server=file.ljzsg.com:22122

# 允許系統同步的時間段 (默認是全天) 。一般用於避免高峰同步產生一些問題而設定。
sync_start_time=00:00
sync_end_time=23:59
# 訪問端口
http.server_port=80

3 在安裝路徑中創建Storage基礎數據目錄,若已有則不用操作

4. 防火牆中打開存儲器端口(默認的 23000) 

# vim /etc/sysconfig/iptables

添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重啟防火牆:
# service iptables restart

5. 啟動Storage

  啟動Storage前確保Tracker是啟動的。初次啟動成功,會在 /ljzsg/fastdfs/storage 目錄下創建 data、 logs 兩個目錄。

啟動

# /etc/init.d/fdfs_storaged start

# service fdfs_storaged start   //大多用這種方式啟動

查看 Storage 是否成功啟動,23000 端口正在被監聽,就算 Storage 啟動成功。

# netstat -unltp|grep fdfs

關閉Storage命令# service fdfs_storaged stop

查看Storage和Tracker是否在通信

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

 

6 設置 Storage 開機啟動

  # chkconfig fdfs_storaged on

  或者:
  # vim /etc/rc.d/rc.local
  加入配置:
  /etc/init.d/fdfs_storaged start

③ 配置客戶端client

vim client.conf
# 修改 base_path=/fastdfs/client
# tracker_server=203.195.238.249:22122
# 測試 (先放一張圖片到/root/test/headImg.jpg)
fdfs_test /etc/fdfs/client.conf upload /root/test/headImg.jpg
# 返回路徑http://203.195.238.249/group1/M00/00/00/rBAAAl0EX5WAQtpGAACGZ5UrSuI275_big.jpg

目錄結構

 


免責聲明!

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



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