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

相关文章
相关标签/搜索