FastDFS 分佈式文件系統 搭建部署

搭建部署FastDFS 分佈式文件系統php


什麼是分佈式文件系統html

分佈式文件系統 ( Distributed File System ) 是指文件系統管理的物理存儲資源不必定直接鏈接在本地節點上,而是經過計算機網絡與節點相連nginx

分佈是文件系統的設計基於客戶機/服務器模式c++

一個典型的網絡可能包括多個供多用戶訪問的服務器web

對等特性容許一些系統扮演客戶機和服務的雙重角色算法


衡量分佈式文件系統的優劣chrome

    數據的存儲方式vim

    數據的讀取速率瀏覽器

    數據安全機制安全


FastDFS介紹

FastDFS是一款開源分佈式文件系統,它用純C語言實現,支持Linux,FreeBSD, AIX 等UNIX系統

做者爲淘寶網的餘慶

功能包括:文件存儲,文件同步,文件訪問(文件上傳,文件下載) 等

解決了大容量存儲和負載均衡的問題


FastDFS基本概念

FastDFS服務端有兩個角色:跟蹤器 ( tracker ) 和存儲節點 ( storage )

    — 跟蹤器:主要作調度工做,在訪問上起負載均衡的做用

    — 存儲節點:完成文件管理的全部功能,即存儲,同步和提供存儲接口,同時對文件的元數據進行管理


FastDFS系統結構

8.jpg


跟蹤器和存儲節點均可以由一臺多臺服務器構成

跟蹤器和存儲節點中的服務器都可以隨時增長或下線而不會影響線上服務

跟蹤器中的全部服務器都是對等的,能夠根據服務器的壓力狀況隨時增長或縮小


FastDFS 上傳文件過程

client 詢問 tracker 上傳到的 storage ,不須要附加參數

tracker 返回一臺可用的storage

client 直接和 storage 通信完成文件上傳


9.jpg



FastDFS下載文件過程

Client 詢問tracker 下載文件的storage , 參數爲文件標識( 卷名和文件名 )

tracker 返回一臺可用的storage

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

10.jpg



搭建部署FastDFS 分佈式文件系統


實驗使用軟件包:

    fastdfs-nginx-module_v1.16.tar.gz

    FastDFS_v4.06.tar.gz

    libevent-devel-1.4.13-4.el6.x86_64.rpm

    libevent-doc-1.4.13-4.el6.noarch.rpm

    libevent-headers-1.4.13-4.el6.noarch.rpm

    nginx-1.7.10.tar.gz


實驗使用操做系統爲:RHEL6


實驗拓撲圖


11.jpg

本案例 搭建一個簡單的輪詢FastDFS 分佈式文件系統

只搭建一臺跟蹤器 倆臺存儲節點 爲方便理解 

實際生產項目中可使用更多 但具體操做步驟不變


操做流程:

    跟蹤器 (tracker)    pc70  192.168.4.70

        配置主控服務器 

    存儲節點 (storage)    pc71 192.168.4.71     pc72 192.168.4.72

            準備存儲空間

            配置存儲節點

            搭建nginx web服務器

     客戶端 ( client )   192.168.4.254

            上傳文件

            下載文件


操做步驟:

配置主控跟蹤器服務器  pc70


    1) 安裝依賴包

    # yum -y install gcc gcc-c++

    # rpm -q make

    make-3.81-20.el6.x86_64

    # yum -y install libevent

    # cd fastdfs/

    # ls libevent*

    libevent-devel-1.4.13-4.el6.x86_64.rpm  libevent-headers-1.4.13-4.el6.noarch.rpm

    libevent-doc-1.4.13-4.el6.noarch.rpm

    # yum -y install *.rpm

    

    2) 安裝主包

    # tar -zxf FastDFS_v4.06.tar.gz 

    # cd FastDFS

    # ls

    client  conf             HISTORY  INSTALL  php_client  restart.sh  storage  tracker

    common  COPYING-3_0.txt  init.d   make.sh  README      stop.sh     test

    # ./make.sh 

    # ./make.sh install

    # ls /usr/local/bin///命令存放路徑

    fdfs_appender_test   fdfs_delete_file    fdfs_storaged  fdfs_upload_appender

    fdfs_appender_test1  fdfs_download_file  fdfs_test      fdfs_upload_file

    fdfs_append_file     fdfs_file_info      fdfs_test1     restart.sh

    fdfs_crc32           fdfs_monitor        fdfs_trackerd  stop.sh

    # ls /etc/fdfs///配置文件存放路徑

    client.conf  http.conf  mime.types  storage.conf  tracker.conf

    

    

    3) 修改配置文件tracker.conf

     # vim /etc/fdfs/tracker.conf

     22 base_path=/data/fastdfs//日誌文件 數據 存放目錄

    # mkdir -p /data/fastdfs                    // 建立數據存儲目錄

    # vim /etc/fdfs/tracker.conf 

     36 store_lookup=0                     //修改調到算法爲輪詢

     46 store_server=0

     51 store_path=0

     56 download_server=0

    

    182 use_storage_id = true//根據服務器的ID號時別

    186 storage_ids_filename = storage_ids.conf//存儲主機編號文件

    

    4) 建立存儲主機編號文件 storage_ids.conf

    //在源碼目錄下有 storage_ids.conf 文件模版

    # ls conf/storage_ids.conf 

    conf/storage_ids.conf

    # cp conf/storage_ids.conf /etc/fdfs/        //使用模版 建立 storage_id 文件

    # vim /etc/fdfs/storage_ids.conf                //編輯 storage_id 文件,加入存儲組聲明

    100001   group1  192.168.4.71

    100002   group1  192.168.4.72

    

    

配置存儲節點 pc71   pc72


    1) 準備存儲空間

    # fdisk -l /dev/vdb

    Disk /dev/vdb: 3221 MB, 3221225472 bytes

    16 heads, 63 sectors/track, 6241 cylinders

    Units = cylinders of 1008 * 512 = 516096 bytes

    Sector size (logical/physical): 512 bytes / 512 bytes

    I/O size (minimum/optimal): 512 bytes / 512 bytes

    Disk identifier: 0xaf03cc5f

    

       Device Boot      Start         End      Blocks   Id  System

    /dev/vdb1               1        6241     3145432+  83  Linux

    

    # mkdir -p /data/fastdfs/        //建立數據存儲目錄

    [root@pc71 ~]# blkid /dev/vdb1

    /dev/vdb1: UUID="e632a1df-60d5-47a6-825b-fc47ece05569" TYPE="ext4" 

    [root@pc71 ~]# vim /etc/fstab         //將準備的存儲空間掛載到 數據存儲目錄上

    [root@pc71 ~]# tail -1 /etc/fstab

    UUID=e632a1df-60d5-47a6-825b-fc47ece05569 /data/fastdfs/ ext4defaults0 0

    

    [root@pc72 ~]# blkid /dev/vdb1

    /dev/vdb1: UUID="86acaaca-6c2c-4a41-8052-60038c41cc92" TYPE="ext4" 

    [root@pc72 ~]# vim /etc/fstab

    [root@pc72 ~]# tail -1 /etc/fstab

    UUID=86acaaca-6c2c-4a41-8052-60038c41cc92/data/fastdfs/ext4defaults0 0


    # mount -a

    # df -h | grep  /dev/vdb1

    /dev/vdb1             2.9G  4.5M  2.8G   1% /data/fastdfs

    

    2) 安裝軟件包

    # yum -y install gcc gcc-c++

    # rpm -q make

    make-3.81-20.el6.x86_64

    # yum -y install libevent

    # cd fastdfs/

    # ls libevent*

    libevent-devel-1.4.13-4.el6.x86_64.rpm  libevent-headers-1.4.13-4.el6.noarch.rpm

    libevent-doc-1.4.13-4.el6.noarch.rpm

    # yum -y install *.rpm

    # tar -zxf FastDFS_v4.06.tar.gz 

    # cd FastDFS

    # ./make.sh  && ./make.sh install

    # ls /usr/local/bin/

    fdfs_appender_test   fdfs_delete_file    fdfs_storaged  fdfs_upload_appender

    fdfs_appender_test1  fdfs_download_file  fdfs_test      fdfs_upload_file

    fdfs_append_file     fdfs_file_info      fdfs_test1     restart.sh

    fdfs_crc32           fdfs_monitor        fdfs_trackerd  stop.sh

    # ls /etc/fdfs/

    client.conf  http.conf  mime.types  storage.conf  tracker.conf

    

    3) 修改配置文件storage.conf

    # vim /etc/fdfs/storage.conf 

      7 group_name=group1//所屬存儲組

     37 base_path=/data/fastdfs//數據 和日誌存儲目錄

    

     85 sync_start_time=00:00//同步數據的默認開始時間

     89 sync_end_time=23:59//同步數據的默認結束時間   實時推送

    

     96 store_path_count=1//存儲路徑的個數

    100 store_path0=/data/fastdfs//第一個存儲路徑

    109 tracker_server=192.168.4.70:22122//主存儲服務器的ip 端口號

    

    140 file_distribute_path_mode=0//有多個存儲路徑時 數據存儲路徑的選擇 0 輪詢 

    145 file_distribute_rotate_count=100//當存儲選擇爲輪詢 當存儲數據文件達到100時 輪詢給下一個存儲路徑

    



啓動服務


    1)啓動主控跟蹤器服務器  pc70 

    //進入 源碼安裝目錄中

    # cp init.d/fdfs_trackerd /etc/init.d///拷貝啓動腳本

    # chmod +x /etc/init.d/fdfs_trackerd 

    # chkconfig --add fdfs_trackerd

    # chkconfig fdfs_trackerd on

    # service fdfs_trackerd start

    Starting FastDFS tracker server: 

    # netstat -pantu | grep :22122

    tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      2393/fdfs_trackerd  


    2) 啓動存儲節點 pc71     pc72

    //進入 源碼安裝目錄中

    # cp init.d/fdfs_storaged /etc/init.d/

    # chmod +x /etc/init.d/fdfs_storaged 

    # chkconfig --add fdfs_storaged

    # chkconfig fdfs_storaged on

    # service fdfs_storaged start

    會在存儲路徑 初始化256子文件夾 結束後 按回車繼續

    

    storage 數據文件說明

    storage 爲用戶建立256個目錄存放上傳文件

    輔助文件的目錄爲 /data/fastdfs/data

    — .data_init_flag: 初始化信息

    — storage_stat.dat:統計信息

    — sync/binlog.### : 更新操做記錄 ( 日誌 )

    — sync/${id}.mark : 同步完成狀況


    [root@pc71 ~]# netstat -pantu | grep :23000

    tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      3848/fdfs_storaged  

    tcp        0      0 192.168.4.71:35832          192.168.4.72:23000          ESTABLISHED 3848/fdfs_storaged  

    tcp        0      0 192.168.4.71:23000          192.168.4.72:35316          ESTABLISHED 3848/fdfs_storaged

    

    [root@pc72 ~]#  netstat -pantu | grep :23000

    tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      3301/fdfs_storaged  

    tcp        0      0 192.168.4.72:23000          192.168.4.71:35832          ESTABLISHED 3301/fdfs_storaged  

    tcp        0      0 192.168.4.72:35316          192.168.4.71:23000          ESTABLISHED 3301/fdfs_storaged  

    

    [root@pc70 ~]# netstat -pantu | grep :22122

    tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      2393/fdfs_trackerd  

    tcp        0      0 192.168.4.70:22122          192.168.4.72:56753          ESTABLISHED 2393/fdfs_trackerd  

    tcp        0      0 192.168.4.70:22122          192.168.4.71:34256          ESTABLISHED 2393/fdfs_trackerd  

    

    


客戶端 訪問主控服務器 驗證配置

    1) 提供訪問命令 : 上傳文件命令 下載文件命令

    //客戶端創建存放 提供訪問命令文件目錄

    # mkdir /root/bin

    

    //在主控服務器 pc70 山

    # ls /usr/local/bin/

    # cd /usr/local/bin/

    //將其下的 fdfs_test fdfs_upload_fil fdfs_download_file fdfs_delete_file  拷貝給客戶端 /root/bin

    # scp fdfs_test fdfs_upload_fil fdfs_download_file fdfs_delete_file  192.168.4.254:/root/bin


     2) 編輯鏈接主控節點主機的配置文件 client.conf

    //客戶端創建配置文件目錄

    # mkdir /etc/fdfs/

    //靠拷貝主控服務器 

    # scp /etc/fdfs/client.conf 192.168.4.254:/etc/fdfs/

    //修改客戶端 上的客戶端配置文件

    # vim /etc/fdfs/client.conf 

     10 base_path=/data/fastdfs

     14 tracker_server=192.168.4.70:22122//指定主控服務節點的ip 和 端口

    //客戶端建立 存放數據可日誌文件目錄

    # mkdir /data/fastdfs

    

    3) 客戶端上傳文件

    # head -3 /etc/passwd > user.txt 

    # fdfs_test /etc/fdfs/client.conf upload user.txt //顯示訪問詳細過程

    This is FastDFS client test program v4.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.

    

    [2018-01-16 14:30:14] DEBUG - base_path=/data/fastdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0

    

    tracker_query_storage_store_list_without_group: 

    server 1. group_name=, ip_addr=192.168.4.71, port=23000

    server 2. group_name=, ip_addr=192.168.4.72, port=23000

    

    group_name=group1, ip_addr=192.168.4.71, port=23000

    storage_upload_by_filename

    group_name=group1, remote_filename=M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287.txt

    source ip address: 192.168.4.71

    file timestamp=2018-01-16 06:30:13

    file size=105

    file crc32=3908252234

    file url: http://192.168.4.70:8080/group1/M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287.txt

    storage_upload_slave_by_filename

    group_name=group1, remote_filename=M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287_big.txt

    source ip address: 192.168.4.71

    file timestamp=2018-01-16 06:30:13

    file size=105

    file crc32=3908252234

    file url: http://192.168.4.70:8080/group1/M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287_big.txt

    

    [root@pc71 ~]# ls /data/fastdfs/data/00/00/              //查看存儲結果

    wKgER1pdK3WABIFgAAAAaejzMko287_big.txt

    wKgER1pdK3WABIFgAAAAaejzMko287_big.txt-m

    wKgER1pdK3WABIFgAAAAaejzMko287.txt

    wKgER1pdK3WABIFgAAAAaejzMko287.txt-m

    //由於時實時推送數據文件 全部在 pc72 上也會存在

    [root@pc72 ~]# ls /data/fastdfs/data/00/00/

    wKgER1pdK3WABIFgAAAAaejzMko287_big.txt

    wKgER1pdK3WABIFgAAAAaejzMko287_big.txt-m

    wKgER1pdK3WABIFgAAAAaejzMko287.txt

    wKgER1pdK3WABIFgAAAAaejzMko287.txt-m

    

    

    # fdfs_upload_file /etc/fdfs/client.conf 1.jpg //上傳圖片文件 不顯示訪問過程

    group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg

    

    [root@pc71 ~]# ls /data/fastdfs/data/00/00/         //查看存儲結果

    ...

    wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg

    

    [root@pc72 ~]# ls /data/fastdfs/data/00/00/

    ...

    wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg

    

    4) 下載文件 

    // 下載文件 將其命名爲test.jpg

    # fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg test.jpg

    # ls test.jpg 

    test.jpg


    5) 刪除文件

    # fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg 



配置Web訪問 pc71  pc72


    1) 安裝提供nginx 軟件包

    fastdfs-nginx-module_v1.16.tar.gz 

    nginx-1.7.10.tar.gz 

    在pc71 和 pc72 

    # tar -zxf fastdfs-nginx-module_v1.16.tar.gz 

    # tar -zxf nginx-1.7.10.tar.gz 

    # useradd nginx

    # yum -y install pcre-devel

    # yum -y install zlib-devel

    # cd nginx-1.7.10

    # ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=../fastdfs-nginx-module/src/

    # make

    # make install

    # ls /usr/local/nginx/

    conf  html  logs  sbin


    2) 修改配置文件

    # vim /usr/local/nginx/conf/nginx.conf

    

     43         location / {

     44             #root   html;

     45             #index  index.html index.htm;

     46             ngx_fastdfs_module;   //引入模塊文件

     47         }

    //拷貝模塊配置文件 到配置文件目錄

    # cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

    

    # vim /etc/fdfs/mod_fastdfs.conf 

     40 tracker_server=192.168.4.70:22122//指定主控服務器的IP 和端口

     44 storage_server_port=23000//存儲節點監聽端口

     47 group_name=group1//當前所在存儲組

    

     53 url_have_group_name = true

     57 store_path_count=1

     62 store_path0=/data/fastdfs

    

    # /etc/init.d/fdfs_storaged restart//重啓存儲服務

    

    3)啓動nginx 

    # /usr/local/nginx/sbin/nginx 

    # netstat -pantu | grep nginx

    

        具體訪問過程

        客戶端訪問 80 ---> nginx ---> nginx.conf --->模塊 ---> 配置文件 ---> 主控服務的IP地址  ---> 主控服務器分配


    4) 客戶端訪問測試

    上傳文件

    # fdfs_upload_file /etc/fdfs/client.conf test.jpg 

    group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg

    //在瀏覽器訪問 就會看見圖片內容

    # google-chrome http://192.168.4.71/group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg

    # google-chrome http://192.168.4.72/group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg

    


在上述實驗的基礎上作相關的調整實現下面的實驗

搭建擴展存儲服務器



實驗拓撲圖

12.jpg


操做流程:

    跟蹤器 (tracker)    pc70  192.168.4.70

        配置主控服務器 

    存儲節點 (storage)    pc71 192.168.4.71     pc72 192.168.4.72    

                                     pc73 192.168.4.73     pc74 192.168.4.74

            準備存儲空間

            配置存儲節點

            搭建nginx web服務器

     客戶端 ( client )   192.168.4.254

            上傳文件

            下載文件


操做步驟:

    使用上述實驗繼續實驗

        具體步驟不詳細介紹 只說明與上述文件不一樣之處和注意之處   

    

配置主控跟蹤器服務器  pc70

    在以前配置的pc 70 上

    修改存儲主機編號文件 storage_ids.conf

    # vim /etc/fdfs/storage_ids.conf 

    100001   group1  192.168.4.71

    100002   group1  192.168.4.72

    100003   group2  192.168.4.73

    100004   group2  192.168.4.74


配置存儲節點 pc73   pc74

   1) 準備存儲空間

    2) 安裝軟件包

    3) 修改配置文件storage.conf

     # vim /etc/fdfs/storage.conf      //配置文件中只有聲明組與上述不一樣 其於均相同 

      7 group_name=group2//所屬存儲組


配置Web訪問 pc71  pc72

        1) 安裝提供nginx 軟件包

        2) 修改配置文件

        # vim /etc/fdfs/mod_fastdfs.conf         //模版配置文件中只有聲明組與上述不一樣 其於均相同 

             47 group_name=group1//當前所在存儲組

        3) 啓動nginx 


啓動服務    

       1) pc70  須要從新啓動服務

           2) 啓動存儲節點 pc71     pc72

            [root@pc70 ~]# netstat -utnalp  | grep 22122

            tcp        0      0 0.0.0.0:22122               0.0.0.0:*                   LISTEN      4875/fdfs_trackerd  

            tcp        0      0 192.168.4.70:22122          192.168.4.72:57119          ESTABLISHED 4875/fdfs_trackerd  

            tcp        0      0 192.168.4.70:22122          192.168.4.71:34335          ESTABLISHED 4875/fdfs_trackerd  

            tcp        0      0 192.168.4.70:22122          192.168.4.74:45914          ESTABLISHED 4875/fdfs_trackerd  

            tcp        0      0 192.168.4.70:22122          192.168.4.73:45099          ESTABLISHED 4875/fdfs_trackerd  

            [root@pc73 ~]# netstat -pantu | grep 23000

            tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      8496/fdfs_storaged  

            tcp        0      0 192.168.4.73:23000          192.168.4.74:38378          ESTABLISHED 8496/fdfs_storaged  

            tcp        0      0 192.168.4.73:51322          192.168.4.74:23000          ESTABLISHED 8496/fdfs_storaged  

            

            [root@pc74 ~]# netstat -pantu | grep 23000

            tcp        0      0 0.0.0.0:23000               0.0.0.0:*                   LISTEN      7905/fdfs_storaged  

            tcp        0      0 192.168.4.74:23000          192.168.4.73:51322          ESTABLISHED 7905/fdfs_storaged  

            tcp        0      0 192.168.4.74:38378          192.168.4.73:23000          ESTABLISHED 7905/fdfs_storaged  


客戶端測試    

         //會發現 group1 和 group2 已經實現輪詢存儲

        # fdfs_upload_file  /etc/fdfs/client.conf  1.jpg 

        group1/M00/00/00/wKgER1pdbEaAUfkvAAB_2jHRplo065.jpg

        # fdfs_upload_file  /etc/fdfs/client.conf  1.jpg 

        group2/M00/00/00/wKgESVpdbEeANZeWAAB_2jHRplo990.jpg

        # fdfs_upload_file  /etc/fdfs/client.conf  test.jpg 

        group1/M00/00/00/wKgESFpdbE2AVXMfAAB_2jHRplo700.jpg

        # fdfs_upload_file  /etc/fdfs/client.conf  test.jpg 

        group2/M00/00/00/wKgESlpdbFCAet_vAAB_2jHRplo946.jpg

        

     //在瀏覽器訪問 就會看見圖片內容

    # google-chrome http://192.168.4.71/group1/M00/00/00/wKgER1pdbEaAUfkvAAB_2jHRplo065.jpg

    # google-chrome http://192.168.4.74/group2/M00/00/00/wKgESlpdbFCAet_vAAB_2jHRplo946.jpg

相關文章
相關標籤/搜索