【架構設計】分散式文件系統 FastDFS的原理和安裝使用

来源:http://www.cnblogs.com/aiweixiao/archive/2016/12/21/6209499.html
-Advertisement-
Play Games

本文地址 分享提綱: 1.概述 2. 原理 3. 安裝 4. 使用 5. 參考文檔 1. 概述 1.1)【常見文件系統】 Google了一下,流行的開源分散式文件系統有很多,介紹如下: -- mogileFS:Key-Value型元文件系統,不支持FUSE,應用程式訪問它時需要API,主要用在web ...


本文地址

分享提綱:

  1.概述

  2. 原理

  3. 安裝

  4. 使用

  5. 參考文檔

 

1. 概述


 

  1.1)常見文件系統

    Google了一下,流行的開源分散式文件系統有很多,介紹如下:       -- mogileFS:Key-Value型元文件系統,不支持FUSE,應用程式訪問它時需要API,主要用在web領域處理海量小圖片,效率相比mooseFS高很多。     -- fastDFS:國人 餘慶老師(GitHub)在mogileFS的基礎上進行改進的key-value型文件系統,同樣不支持FUSE,提供比mogileFS更好的性能。     -- mooseFS:支持FUSE,相對比較輕量級,對master伺服器有單點依賴,用perl編寫,性能相對較差,國內用的人比較多     -- glusterFS:支持FUSE,比mooseFS龐大     -- ceph:支持FUSE,客戶端已經進入了linux-2.6.34內核,也就是說可以像ext3/rasierFS一樣,選擇ceph為文件系統。徹底的分散式,沒有單點依賴,用C編寫,性能較好。基於不成熟的btrfs,其本身也非常不成熟。     -- lustre:Oracle公司的企業級產品,非常龐大,對內核和ext3深度依賴     -- NFS:老牌網路文件系統,具體不瞭解,反正NFS最近幾年沒發展,肯定不能用     1.2)【fastDFS】     FastDFS是一個開源的輕量級分散式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件為載體的線上服務,如相冊網站、視頻網站等等。    

2. 原理


  2.1)【三個角色】

  具體參見: 分散式文件系統FastDFS設計原理

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

    • Tracker Server: 跟蹤伺服器,主要做調度工作,起到均衡的作用;負責管理所有的 storage server
      和 group,每個 storage 在啟動後會連接 Tracker,告知自己所屬 group 等信息,並保持周期性心跳。
    • Storage Server:存儲伺服器,主要提供容量和備份服務;以 group 為單位,每個 group 內可以有多台 storage server,數據互為備份。
    • Client:客戶端,上傳下載數據的伺服器,也就是我們自己的項目所部署在的伺服器。
    2.2) 【上傳下載以及同步文件簡述   大概上傳流程就是客戶端發送上傳請求到Tracker Server伺服器,接著Tracker Server伺服器分配groupStorage Server,當然這是有一定規則的,選擇好Storage Server後再根據一定規則選擇存儲在這個伺服器會生成一個file_id,這個file_id 包含欄位包括:storage server ip、文件創建時間、文件大小、文件 CRC32 校驗碼和隨機數;每個存儲目錄下有兩個 256 * 256 個子目錄,後邊你會知道一個Storage Server存儲目錄下有好多個文件夾的,storage 會按文件file_id進行兩次 hash ,路由到其中一個子目錄,然後將文件存儲到該子目錄下,最後生成文件路徑:group 名稱、虛擬磁碟路徑、數據兩級目錄、file_id和文件尾碼就是一個完整的文件地址。
可能我理解的也不是很徹底,下載、同步操作我不寫了,這裡有一篇文章 分散式文件系統FastDFS設計原理 講解的很詳細,我就不班門弄斧了,大家可以點擊去看看。     

3. 安裝


  

源碼下載:http://code.google.com/p/fastdfs 尋求幫助:http://www.csource.org 作者 餘慶老師(GitHub)

具體安裝教程見 :FastDFS 安裝及使用

        及 【分散式文件系統 - FastDFS 在 CentOS 下配置安裝部署

  3.1)【安裝libevent】

fastDFS需要安裝libevent比較新的版本,將本機的比較低的版本卸載了。
 
rpm -qa libevent
libevent-1.4.13-1.el6.x86_64
rpm -e --nodeps libevent
安裝一個最新穩定版
 
wget https://github.com/downloads/libevent/libevent/libevent-2.0.18-stable.tar.gz
tar zxvf libevent-2.0.18-stable.tar.gz
cd libevent-2.0.18-stable
./configure
make && make install
為libevent創建軟鏈接到/lib庫下,64位系統對應/lib64
 
ln -s /usr/local/lib/libevent* /lib/
ln -s /usr/local/lib/libevent* /lib64/
安裝libevent

  

  3.2)【安裝FastDFS】

wget http://fastdfs.googlecode.com/files/FastDFS_v3.06.tar.gz
tar zxvf FastDFS_v3.06.tar.gz
cd FastDFS
./make.sh
./make.sh install
安裝FastDFS

  

  3.3)【配置FastDFS】   
環境:
tracker server
192.168.1.5
storage server
192.168.1.51
192.168.1.52
 
1、配置並啟動 tracker server
①配置 tracker.conf
 
mkdir /data/fastdfs
vim /etc/fdfs/tracker.conf
base_path=/data/fastdfs
②啟動 tracker
 
/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
③開機啟動
 
vim /etc/rc.local
/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf
2、配置並啟動 storage server
①配置 tracker.conf
 
mkdir /data/fastdfs
mkdir /data/images
vim /etc/fdfs/storage.conf
base_path=/data/fastdfs
store_path0=/data/images
tracker_server=192.168.1.5:22122
②啟動 tracker
 
/usr/local/bin/fdfs_storage /etc/fdfs/storage.conf
③開機啟動
 
vim /etc/rc.local
/usr/local/bin/fdfs_storage /etc/fdfs/storage.conf
3、為storage節點安裝fastdfs-nginx-module模塊
①安裝模塊
安裝Nginx詳見:
需重新編譯Nginx
 
wget http://fastdfs.googlecode.com/files/fastdfs-nginx-module_v1.10.tar.gz
tar zxvf fastdfs-nginx-module_v1.10.tar.gz
wget http://nginx.org/download/nginx-1.2.0.tar.gz
tar zxvf nginx-1.2.0.tar.gz
cd nginx-1.2.0
./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/src
make && make install
cd ..
②配置
編輯nginx.conf
 
vim /usr/local/nginx/conf/nginx.conf
server {
    listen       80;
    server_name  localhost;
 
    location /M00 {
        alias /data/images/data;
        ngx_fastdfs_module;
    }
    ......
}
給 storage 的存儲目錄做一個軟連接
 
ln -s /data/images/data/ /data/images/data/M00
拷貝mod_fastdfs.conf 到 /etc/fdfs/
 
cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
base_path=/data/fastdfs
tracker_server=192.168.1.5:22122
store_path0=/data/images
啟動nginx
 
/usr/local/nginx/sbin/nginx
配置FastDFS

 

 

4. 使用


  4.1)【具體使用】

 

1、上傳文件
FastDFS安裝包中,自帶了客戶端程式,通過程式可以進行文件上傳。在使用這個客戶端程式之前,首先需要配置client.conf,然後再進行文件上傳及下載。
在tracker上修改客戶端配置文件client.conf
 
vim /etc/fdfs/client.conf
base_path=/data/fastdfs
tracker_server=192.168.1.5:22122
vim a.html
This Is FastDFS Test.
上傳文件
 
/usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html
This is FastDFS client test program v3.06
 
Copyright (C) 2008, Happy Fish / YuQing
 
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/ 
for more detail.
 
[2012-04-29 12:42:53] INFO - base_path=/data/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0
 
tracker_query_storage_store_list_without_group: 
server 1. group_name=group1, ip_addr=192.168.1.51, port=23000
server 2. group_name=group1, ip_addr=192.168.1.52, port=23000
 
group_name=group1, ip_addr=192.168.1.51, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90.html
source ip address: 192.168.1.51
file timestamp=2012-04-29 12:42:53
file size=14
file crc32=674197143
file url: http://192.168.1.5/group1/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90.html
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.html
source ip address: 192.168.1.51
file timestamp=2012-04-29 12:42:53
file size=14
file crc32=674197143
file url: http://192.168.1.5/group1/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.html
上傳成功
試試用
 
http://192.168.1.51/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.html
 
訪問看看吧。
 
具體使用

 

 

 

5. 參考文檔


  5.1) 分散式文件系統 - FastDFS 簡單瞭解一下

  5.2) 分散式文件系統FastDFS設計原理

  5.3) FastDFS 安裝及使用

  5.4) 【好】 分散式文件系統 - FastDFS 配置 Nginx 模塊及上傳測試
       
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (1)首先要修改JDK中JMX服務的配置文件,以獲得相應的許可權: 進入$JAVA_HOME所在的根目錄的/jre/lib/management子目錄下, a. 將jmxremote.password.template文件複製為jmxremote.password b. 調整jmxremote.acc ...
  • 有想哪裡知道有做六合彩投註網站系統建設開發的嗎,我這邊可以做六合彩投註系統,如果需要的朋友可以私聊一下。 新版六合彩投註網站系統源碼 (測試完整可商業運行) 帶新開獎結果》》》》》 網站系統可以支持代理開設,股東發展,普通會用等常用的功能。 內附說明。資料庫文件 hs001 修改資料庫連接 文件夾 ...
  • 通過前面的介紹,我們已經能夠看到管理員界面並對Solr形成了一個感性的認識。本篇將在物理上深入瞭解Solr的安裝目錄結構和Solr示例的主目錄結構。 安裝目錄結構 Solr 6.3.0安裝文件夾裡面包含很多內容。這裡挑選一些重要的目錄進行說明。目錄結構如下: bin:大量的Solr控制台管理工具存在 ...
  • 談起 Hibernate 應該得知道 Gavin King 大叔,他構建了 Hibernate ,並將其捐獻給了開源社區。 Hibernate 對象關係映射解決方案,為面向對象的領域模型到傳統的關係型資料庫的映射,提供了一個使用方便的框架。 Hibernate 的設計目標是將軟體開發人員從大量相同的 ...
  • s1=set([11,22,33,44,'Tom','tony',11,77,2.5,])返回的是{11,22,33,44,‘Tom’,‘tony’,77,2.5}(註意:返回的並不是一個字典,只是告訴你這個集合中含有這些元素,所以每次返回的結果元素的順序可能是不一樣的) s2=set([11,22 ...
  • 1 項目中程式調用發信息的介面時候,直接調用可能出現錯誤,影響主程式的流程; 解決:(1)mq發送消息 (2)發消息的介面自身捕獲處理異常,不能拋出到主程式中 現在針對第二種解決方案進行實現:因為以前各個發消息的節點都是拋出異常,如果針對每個方法都加上異常處理會很麻煩,現在用spring提供的@As ...
  • -------說明-------- IBatis 版本2.0 配置一對多 namespace = testDao ------------------ /** *班級的resultMap *ClassBean 對應的bean 例如org.test.ClassBean *id 為唯一的標識 */ //... ...
  • 前言:最近需要做一套CMS系統,由於功能比較單一,而且要求靈活,所以放棄了WP這樣的成熟系統,自己做一套相對簡單一點的。文章的詳情頁URL想要做成url偽靜態的格式即xxx.html 其中xxx考慮過直接用自增主鍵,但是感覺這樣有點暴露文章數量,有同學說可以把初始值設高一點,可是還是可以通過ID差算 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...