1. 程式人生 > >FastDFS分散式檔案系統在Linux上的部署和安裝

FastDFS分散式檔案系統在Linux上的部署和安裝

最近空閒之餘,對分散式檔案系統感興趣就研究研究。

首先要知道FastDFS的定義:FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等服務。

FastDFS架構包括 Tracker server和Storage server。客戶端請求Tracker server進行檔案上傳、下載,通過Tracker server排程最終由Storage server完成檔案上傳和下載。

Tracker server作用是負載均衡和排程,通過Tracker server在檔案上傳時可以根據一些策略找到Storageserver提供檔案上傳服務。可以將tracker稱為追蹤伺服器或排程伺服器。

         Storageserver作用是檔案儲存,客戶端上傳的檔案最終儲存在Storage伺服器上,Storage server沒有實現自己的檔案系統而是利用作業系統 的檔案系統來管理檔案。可以將storage稱為儲存伺服器。


FastDFS叢集中的Tracker server可以有多臺,Tracker server之間是相互平等關係同時提供服務,Tracker server不存在單點故障。客戶端請求Tracker server採用輪詢方式,如果請求的tracker無法提供服務則換另一個tracker

Storage叢集採用了分組儲存方式。storage叢集由一個或多個組構成,叢集儲存總容量為叢集中所有組的儲存容量之和。一個組由一臺或多臺儲存伺服器組成,組內的Storage server之間是平等關係,不同組的Storageserver之間不會相互通訊,同組內的Storageserver之間會相互連線進行檔案同步,從而保證同組內每個storage上的檔案完全一致的。一個組的儲存容量為該組記憶體儲伺服器容量最小的那個,由此可見組記憶體儲伺服器的軟硬體配置最好是一致的。

         採用分組儲存方式的好處是靈活、可控性較強。比如上傳檔案時,可以由客戶端直接指定上傳到的組也可以由tracker進行排程選擇。一個分組的儲存伺服器訪問壓力較大時,可以在該組增加儲存伺服器來擴充服務能力(縱向擴容)。當系統容量不足時,可以增加組來擴充儲存容量(橫向擴容)。

1.1.1  FastDFS安裝環境

   FastDFS是C語言開發,建議在linux上執行,本教程使用Centos6.4作為安裝環境。

   安裝FastDFS需要先將官網下載的原始碼進行編譯,編譯依賴gcc環境,如果沒有gcc環境,需要安裝

1.1.2  安裝libevent

FastDFS依賴libevent庫,需要安裝:

yum -y install libevent

1.1.3  安裝libfastcommon

         libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS執行所需要的一些基礎庫。

將libfastcommonV1.0.7.tar.gz拷貝至/usr/local/下

cd /usr/local

tar -zxvf libfastcommonV1.0.7.tar.gz

cd libfastcommon-1.0.7

./make.sh

./make.sh install

注意:libfastcommon安裝好後會自動將檔案拷貝至/usr/lib64下,由於FastDFS程式引用usr/lib目錄所以需要將/usr/lib64下的庫檔案拷貝至/usr/lib下。

要拷貝的檔案如下:

1.1.4  tracker編譯安裝

tar -zxvf FastDFS_v5.05.tar.gz

cd FastDFS

./make.sh

./make.sh install

1.1.5  配置

修改tracker.conf

vi tracker.conf

改為:

base_path=/home/FastDFS

1.1.6  啟動

啟動的日誌顯示先停止5619程序(實際環境不是5619)再啟動,如下圖:

注意:如果沒有顯示上圖要注意是否正常停止原有程序。

l        設定開機自動啟動。

[[email protected] FastDFS]# vim /etc/rc.d/rc.local

將執行命令列新增進檔案:/usr/bin/fdfs_trackerd/etc/fdfs/tracker.conf restart

1.2     FastDFS--storage安裝

在192.168.101.3上安裝storage

1.2.1  安裝libevent

同tracker安裝

1.2.2  安裝libfastcommon

同tracker安裝。

1.2.3  storage編譯安裝

同tracker編譯安裝。

1.2.4  配置

安裝成功後進入/etc/fdfs目錄:

拷貝一份新的storage配置檔案:

cp storage.conf.sample storage.conf

修改storage.conf

vi storage.conf

group_name=group1

base_path=/home/yuqing/FastDFS改為:base_path=/home/FastDFS

store_path0=/home/yuqing/FastDFS改為:store_path0=/home/FastDFS/fdfs_storage

#如果有多個掛載磁碟則定義多個store_path,如下

#store_path1=.....

#如果有多個則配置多個tracker

tracker_server=192.168.101.4:22122

1.2.5  啟動

啟動的日誌顯示先停止8931程序(實際環境不是8931)再啟動,如下圖:

注意:如果沒有顯示上圖要注意是否正常停止原有程序。

l        設定開機自動啟動。

[[email protected] FastDFS]# vim /etc/rc.d/rc.local

將執行命令列新增進檔案:/usr/bin/fdfs_storaged/etc/fdfs/storage.conf restart

1.3     上傳圖片測試

1.3.1  通過fdfs_test程式

FastDFS安裝成功可通過/usr/bin/fdfs_test測試上傳、下載等操作。

修改/etc/fdfs/client.conf

base_path=/home/fastdfs

tracker_server=192.168.101.3:22122

使用格式:

/usr/bin/fdfs_test 客戶端配置檔案地址  upload  上傳檔案

比如將/home下的圖片上傳到FastDFS中:

對應storage伺服器上的

/home/fastdfs/fdfs_storage/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png檔案。

由於現在還沒有和nginx整合無法使用http下載。

1.3.2  通過java Client API

完整的測試方法參考測試原始碼。

public class FastdfsClientTest {

    //客戶端配置檔案

    public String conf_filename = "F:\\workspace_indigo\\fastdfsClient\\src\\cn\\itcast\\fastdfs\\cliennt\\fdfs_client.conf";

   //本地檔案,要上傳的檔案

    public String local_filename = "F:\\develop\\upload\\linshiyaopinxinxi_20140423193847.xlsx";

//上傳檔案

   @Test

   public void testUpload() {

       for(int i=0;i<100;i++){

        try {

            ClientGlobal.init(conf_filename);

            TrackerClient tracker = new TrackerClient();

            TrackerServer trackerServer =tracker.getConnection();

            StorageServer storageServer = null;

            StorageClient storageClient = new StorageClient(trackerServer,

                    storageServer);

            NameValuePair nvp [] = new NameValuePair[]{

                    new NameValuePair("item_id", "100010"),

                    new NameValuePair("width", "80"),

                    new NameValuePair("height", "90")

            };

            String fileIds[] =storageClient.upload_file(local_filename, null,

                    nvp);

            System.out.println(fileIds.length);

            System.out.println("組名:" + fileIds[0]);

            System.out.println("路徑: " + fileIds[1]);

        } catch (FileNotFoundException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        } catch (Exception e) {

           e.printStackTrace();

       }

       }

   }

}

1.4     FastDFS 和nginx整合

1.4.1  在tracker上安裝nginx

nginx的安裝細節參考nginx文件。

在每個tracker上安裝nginx,的主要目的是做負載均衡及實現高可用。如果只有一臺tracker伺服器可以不配置nginx。

1.4.2  在Storage上安裝nginx

1.4.2.1 FastDFS-nginx-module

將FastDFS-nginx-module_v1.16.tar.gz傳至/usr/local/下

cd /usr/local

tar -zxvf FastDFS-nginx-module_v1.16.tar.gz

cd FastDFS-nginx-module/src

修改config檔案將/usr/local/路徑改為/usr/

將FastDFS-nginx-module/src下的mod_FastDFS.conf拷貝至/etc/fdfs/下

cp mod_FastDFS.conf /etc/fdfs/

並修改mod_FastDFS.conf的內容:

vi /etc/fdfs/mod_FastDFS.conf

base_path=/home/FastDFS

tracker_server=192.168.101.3:22122

#tracker_server=192.168.101.4:22122(多個tracker配置多行)

url_have_group_name=true            #url中包含group名稱

store_path0=/home/FastDFS/fdfs_storage   #指定檔案儲存路徑

將libfdfsclient.so拷貝至/usr/lib下

cp /usr/lib64/libfdfsclient.so /usr/lib/

建立nginx/client目錄

mkdir -p /var/temp/nginx/client

1.4.2.2 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=/root/fastdfs-nginx-module/src

make

make install

1.4.2.3 nginx配置檔案

新建一個nginx配置檔案nginx-fdfs.conf.

新增server:

server {

        listen       80;

        server_name  192.168.101.3;

        location /group1/M00/{

                #root/home/FastDFS/fdfs_storage/data;

                ngx_fastdfs_module;

        }

}

說明:

server_name指定本機ip

location /group1/M00/:group1為nginx 服務FastDFS的分組名稱,M00是FastDFS自動生成編號,對應store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定義store_path1,這裡就是M01

1.4.3  測試

通過java客戶端上傳檔案,使用瀏覽器訪問,比如訪問上傳圖片測試的檔案:

訪問storage:

2           附錄

2.1     tracker.conf

1 基本配置

disable

#func:配置是否生效

#valu:true、false

disable=false

bind_addr

#func:繫結IP

#valu:IP地址

bind_addr=192.168.6.102

port

#func:服務埠

#valu:埠整數值

port=22122

connect_timeout

#func:連線超時

#valu:秒單位正整數值

connect_timeout=30

network_timeout

#func:網路超時

#valu:秒單位正整數值

network_timeout=60

base_path

#func:Tracker資料/日誌目錄地址

#valu:路徑

base_path=/home/michael/fdfs/base4tracker

max_connections

#func:最大連線數

#valu:正整數值

max_connections=256

work_threads

#func:執行緒數,通常設定CPU數

#valu:正整數值

work_threads=4

store_lookup

#func:上傳檔案的選組方式。

#valu:0、1或2。

# 0:表示輪詢

# 1:表示指定組

# 2:表示儲存負載均衡(選擇剩餘空間最大的組)

store_lookup=2

store_group

#func:指定上傳的組,如果在應用層指定了具體的組,那麼這個引數將不會起效。另外如果store_lookup如果是0或2,則此引數無效。

#valu:group1等

store_group=group1

store_server

#func:上傳伺服器的選擇方式。(一個檔案被上傳後,這個storageserver就相當於這個檔案的storage server源,會對同組的storage server推送這個檔案達到同步效果)

#valu:0、1或2

# 0: 輪詢方式(預設)

# 1: 根據ip 地址進行排序選擇第一個伺服器(IP地址最小者)

# 2: 根據優先順序進行排序(上傳優先順序由storage server來設定,引數名為upload_priority),優先順序值越小優先順序越高。

store_server=0

store_path

#func:上傳路徑的選擇方式。storage server可以有多個存放檔案的basepath(可以理解為多個磁碟)。

#valu:

# 0: 輪流方式,多個目錄依次存放檔案

# 2: 儲存負載均衡。選擇剩餘空間最大的目錄存放檔案(注意:剩餘磁碟空間是動態的,因此儲存到的目錄或磁碟可能也是變化的)

store_path=0

download_server

#func:下載伺服器的選擇方式。

#valu:

# 0:輪詢(預設)

# 1:IP最小者

# 2:優先順序排序(值最小的,優先順序最高。)

download_server=0

reserved_storage_space

#func:保留空間值。如果某個組中的某個伺服器的剩餘自由空間小於設定值,則檔案不會被上傳到這個組。

#valu:

# G or g for gigabyte

# M or m for megabyte

# K or k for kilobyte

reserved_storage_space=1GB

log_level

#func:日誌級別

#valu:

# emerg for emergency

# alert

# crit for critical

# error

# warn for warning

# notice

# info for information

# debug for debugging

log_level=info

run_by_group / run_by_user

#func:指定執行該程式的使用者組

#valu:使用者組名或空

run_by_group=

#func:

#valu:

run_by_user=

allow_hosts

#func:可以連線到tracker server的ip範圍。可設定多個值。

#valu

allow_hosts=

check_active_interval

#func:檢測 storage server 存活的時間隔,單位為秒。

#     storage server定期向trackerserver 發心跳,

#     如果tracker server在一個check_active_interval內還沒有收到storageserver的一次心跳,

#     那邊將認為該storage server已經下線。所以本引數值必須大於storage server配置的心跳時間間隔。

#     通常配置為storage server心跳時間間隔的2倍或3倍。

check_active_interval=120

thread_stack_size

#func:設定執行緒棧的大小。 執行緒棧越大,一個執行緒佔用的系統資源就越多。

#     如果要啟動更多的執行緒(V1.x對應的引數為max_connections,V2.0為work_threads),可以適當降低本引數值。

#valu:如64KB,預設值為64,tracker server執行緒棧不應小於64KB

thread_stack_size=64KB

storage_ip_changed_auto_adjust

#func:這個引數控制當storage server IP地址改變時,叢集是否自動調整。注:只有在storage server程序重啟時才完成自動調整。

#valu:true或false

storage_ip_changed_auto_adjust=true

2 同步

storage_sync_file_max_delay

#func:同組storage伺服器之間同步的最大延遲時間。儲存伺服器之間同步檔案的最大延遲時間,根據實際情況進行調整

#valu:秒為單位,預設值為1天(24*3600)

#sinc:v2.0

storage_sync_file_max_delay=86400

storage_sync_file_max_time

#func:儲存伺服器同步一個檔案需要消耗的最大時間,預設為300s,即5分鐘。

#sinc:v2.0

storage_sync_file_max_time=300

sync_log_buff_interval

#func:同步或重新整理日誌資訊到硬碟的時間間隔。注意:tracker server 的日誌不是時時寫硬碟的,而是先寫記憶體。

#valu:以秒為單位

sync_log_buff_interval=10

3 trunk 和 slot

#func:是否使用trunk檔案來儲存幾個小檔案

#valu:true或false

#sinc:v3.0

use_trunk_file=false

#func:最小slot大小

#valu:<= 4KB,預設為256位元組

#sinc:v3.0

slot_min_size=256

#func:最大slot大小

#valu:>= slot_min_size,當小於這個值的時候就儲存到trunkfile中。預設為16MB。

#sinc:v3.0

slot_max_size=16MB

#func:trunk file的size

#valu:>= 4MB,預設為64MB

#sinc:v3.0

trunk_file_size=64MB

4 HTTP 相關

是否啟用 HTTP

#func:HTTP是否生效

#valu:true或false

http.disabled=false

HTTP 伺服器埠號

#func:tracker server上的http port

#valu:

#note:只有http.disabled=false時才生效

http.server_port=7271

檢查Storage存活狀態的間隔時間(心跳檢測)

#func:檢查storage http server存活的間隔時間

#valu:單位為秒

#note:只有http.disabled=false時才生效

http.check_alive_interval=30

心跳檢測使用的協議方式

#func:檢查storage http server存活的方式

#valu:

# tcp:連線到storage server的http埠,不進行request和response。

# http:storage check alive url must return http status 200.

#note:只有http.disabled=false時才生效

http.check_alive_type=tcp

檢查 Storage 狀態的 URI

#func:檢查storage http server是否alive的uri/url

#note:只有http.disabled=false時才生效

http.check_alive_uri=/status.html


相關推薦

FastDFS分散式檔案系統配置與部署

一文搞定FastDFS分散式檔案系統配置與部署 閱讀目錄 1 分散式檔案系統介紹 2 系統架構介紹 3 FastDFS效能方案 4 Linux基本命令操作 5 安裝VirtualBox虛擬機器並配置Ubuntu

一文搞定FastDFS分散式檔案系統配置與部署

相關文章 1 分散式檔案系統介紹 分散式檔案系統:Distributed file system, DFS,又叫做網路檔案系統:Network File System。一種允許檔案通過網路在多臺主機上分享的檔案系統,可讓多機器上的多使用者分享檔案和儲存空間。 特點:在一個分享的磁碟檔案系統中

FastDFS分散式檔案系統Linux部署安裝

最近空閒之餘,對分散式檔案系統感興趣就研究研究。 首先要知道FastDFS的定義:FastDFS是用c語言編寫的一款開源的分散式檔案系統。FastDFS為網際網路量身定製,充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用FastDFS很容易搭

傳圖片至fastdfs分散式檔案系統並回顯

事件,當我們瀏覽完圖片選中一張時,觸發onchange事件將圖片上傳到伺服器並回顯、 1 <img width="100" height="100" id="allUrl" src="${brand.imgUrl }"/> 2 <input type="hidden" name

FastdfsFastdfs分散式檔案系統安裝部署使用,以及fastdfs連線池connectionpool編寫使用

環境:centos 7.X 預編譯安裝元件 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel libevent-dev git -y 以上安裝完,後續的各

FastdfsFastdfs分散式檔案系統安裝部署使用,結合nginx訪問圖片,fastdfs連線池connectionpool編寫使用,文末有github連結

環境:centos 7.X 預編譯安裝元件 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel libevent-dev git -y   以上安裝

FastDFS分散式檔案系統之二】:FastDFS檔案傳效能測試及Python客戶端傳操作

  由於要對比swift上傳小檔案以及fdfs上傳小檔案的效能,故做效能測試。 1.1 測試環境: FastDFS叢集的搭建方法:【FastDFS分散式檔案系統之一】:搭建、部署、配置 tracker server1:node2 tracker server2:node3

FastDFS分散式檔案系統 -- 工作原理

FastDFS介紹 FastDFS分散式檔案管理系統,是用 c 語言編寫的一款開源的分散式檔案系統。FastDFS 為網際網路量身定製, 充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用 FastDFS 很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、

第五十二章:FastDFS分散式檔案系統

資料下載 大綱     FastDFS架構包括Tracker server 和 Storage server 。客戶端請求Tracker server 進行檔案上傳、下載,通過Ttacker server 排程,最總

Hadoop分散式檔案系統:HDFS架構設計(3)

HDFS被設計成能夠在一個大叢集中跨機器可靠地儲存超大檔案。它將每個檔案儲存成一系列的資料塊,除了最後一個,所有的資料塊都是同樣大小的。為了容錯,檔案的所有資料塊都會有副本。每個檔案的資料塊大小和副本系數都是可配置的。應用程式可以指定某個檔案的副本數目。副本系數可以在檔案建立的時候指定,也可以在之後改變。

Dubbo+Zookeeper架構—高階篇20-fastdfs分散式檔案系統安裝

目錄 FastDFS簡介 系統架構 系統架構-下載檔案流程圖 相關術語 同步機制 •同一組內的storage server之間是對等的,檔案上傳、刪除等操作可以在任意一臺storage server上進行; 安裝 環境資訊 一、所有跟蹤伺服器和儲存伺服器均執行如下

利用putty實現檔案linux下載

利用putty實現檔案上傳和下載: 安裝putty軟體才能使用pscp功能 上傳 D:\devsoftware\linux>pscp d:\devsoftware\linux\jdk-8u181-linux-x64.rpm [email protec

FastDFS分散式伺服器系統配置與部署

1、什麼是FastDFS: FastDFS 是用 C 語言編寫的一款開源的分散式檔案系統。FastDFS 為網際網路量身定製, 充分考慮了冗餘備份、負載均衡、線性擴容等機制,並注重高可用、高效能等指標,使用 FastDFS 很容易搭建一套高效能的檔案伺服器叢集提供檔案上傳、下載等

【 專欄 】- 實戰FastDFS分散式檔案系統

實戰FastDFS分散式檔案系統 大型網際網路應用高速增長,導致傳統的檔案系統無法滿足效能要求,隨之應運而生的是分散式檔案系統。FastDFS是一款輕量級、高可靠性、具有資料備份功能、適用於小型檔案應用場景的分散式檔案系統。

FastDFS分散式檔案系統安裝與使用(單節點)

FastDFS是由淘寶的餘慶先生所開發,是一個輕量級、高效能的開源分散式檔案系統,用純C語言開發,包括檔案儲存、檔案同步、檔案訪問(上傳、下載)、存取負載均衡、線上擴容、相同內容只儲存一份等功能,適合有大容量儲存需求的應用或系統。做分散式系統開發時,其中要解

Java利用fastdfs-client-java開發工具包操作FastDFS分散式檔案系統

org.csource.common.MyException: getStoreStorage fail, errno code: 2 at org.csource.fastdfs.StorageClient.newWritableStorageConnection(StorageClient.java:1

Fastdfs分散式檔案系統檔案同步機制

原連結 http://blog.csdn.net/mr_smile2014/article/details/52118541 FastDFS同步相關檔案: a)10.100.66.82_23000.mark 內容如下: binlog_index=0 binlog

fastdfs分散式檔案系統之TrackerServer連線池實現

非常感謝  http://blog.csdn.net/Mr_Smile2014/article/details/52441824 公司使用fastdfs檔案系統來儲存檔案和圖片,為了避免每個系統都直接通過客戶端直接訪問fastdfs檔案系統,所以我們做了一個

FastDFSFastDFS 分散式檔案系統安裝與使用,看這一篇就夠了!!

## 寫在前面 > 有不少小夥伴在實際工作中,對於如何儲存檔案(圖片、視訊、音訊等)沒有一個很好的解決思路。都明白不能將檔案儲存在單臺伺服器的磁碟上,也知道需要將檔案進行副本備份。如果自己手動寫檔案的副本機制,那就太麻煩了,這會涉及冗餘副本機制、伺服器的排程、副本檢測、伺服器節點檢測、檔案副本存放策略

FastDFS 分散式檔案系統詳解

## 什麼是檔案系統 ![](https://mrhelloworld.com/resources/articles/fastdfs/20180810094347_11565.jpg " ")   檔案系統是作業系統用於在磁碟或分割槽上組織檔案的方法和資料結構。磁碟空間是什麼樣的我們並不清楚,但檔案系統可