liwya 发表于 2019-1-31 13:24:33

FastDFS 分布式文件系统 搭建部署

  搭建部署FastDFS 分布式文件系统
  什么是分布式文件系统
  分布式文件系统 ( Distributed File System ) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
  分布是文件系统的设计基于客户机/服务器模式
  一个典型的网络可能包括多个供多用户访问的服务器
  对等特性允许一些系统扮演客户机和服务的双重角色
  衡量分布式文件系统的优劣
  数据的存储方式
  数据的读取速率
  数据安全机制
  FastDFS介绍
  FastDFS是一款开源分布式文件系统,它用纯C语言实现,支持Linux,FreeBSD, AIX 等UNIX系统
  作者为淘宝网的余庆
  功能包括:文件存储,文件同步,文件访问(文件上传,文件下载) 等
  解决了大容量存储和负载均衡的问题
  FastDFS基本概念
  FastDFS服务端有两个角色:跟踪器 ( tracker ) 和存储节点 ( storage )
  — 跟踪器:主要做调度工作,在访问上起负载均衡的作用

  — 存储节点:完成文件管理的所有功能,即存储,同步和提供存储接口,同时对文件的元数据进行管理

  FastDFS系统结构
  http://s1.运维网.com/images/20180116/1516104603345922.jpg
  跟踪器和存储节点都可以由一台多台服务器构成
  跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务
  跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或缩小
  FastDFS 上传文件过程
  client 询问 tracker 上传到的 storage ,不需要附加参数
  tracker 返回一台可用的storage
  client 直接和 storage 通讯完成文件上传
  http://s1.运维网.com/images/20180116/1516104935530996.jpg
  FastDFS下载文件过程
Client 询问tracker 下载文件的storage , 参数为文件标识( 卷名和文件名 )

tracker 返回一台可用的storage
client 直接和storage 通讯完成文件下载
http://s1.运维网.com/images/20180116/1516105287556076.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


  实验拓扑图:
http://s1.运维网.com/images/20180116/1516105676542997.jpg
  本案例 搭建一个简单的轮询FastDFS 分布式文件系统
  只搭建一台跟踪器 俩台存储节点 为方便理解
  实际生产项目中可以使用更多 但具体操作步骤不变
  

  操作流程:
      跟踪器 (tracker)    pc70192.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.rpmlibevent-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
  clientconf             HISTORYINSTALLphp_clientrestart.shstoragetracker
  commonCOPYING-3_0.txtinit.d   make.shREADME      stop.sh   test
  # ./make.sh
  # ./make.sh install
  # ls /usr/local/bin///命令存放路径
  fdfs_appender_test   fdfs_delete_file    fdfs_storagedfdfs_upload_appender
  fdfs_appender_test1fdfs_download_filefdfs_test      fdfs_upload_file
  fdfs_append_file   fdfs_file_info      fdfs_test1   restart.sh
  fdfs_crc32         fdfs_monitor      fdfs_trackerdstop.sh
  # ls /etc/fdfs///配置文件存放路径
  client.confhttp.confmime.typesstorage.conftracker.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   group1192.168.4.71
  100002   group1192.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   IdSystem
  /dev/vdb1               1      6241   3145432+83Linux
  

  # mkdir -p /data/fastdfs/      //创建数据存储目录
  # blkid /dev/vdb1
  /dev/vdb1: UUID="e632a1df-60d5-47a6-825b-fc47ece05569" TYPE="ext4"
  # vim /etc/fstab         //将准备的存储空间挂载到 数据存储目录上
  # tail -1 /etc/fstab
  UUID=e632a1df-60d5-47a6-825b-fc47ece05569 /data/fastdfs/ ext4defaults0 0
  

  # blkid /dev/vdb1
  /dev/vdb1: UUID="86acaaca-6c2c-4a41-8052-60038c41cc92" TYPE="ext4"
  # vim /etc/fstab
  # tail -1 /etc/fstab
  UUID=86acaaca-6c2c-4a41-8052-60038c41cc92/data/fastdfs/ext4defaults0 0
  # mount -a
  # df -h | grep/dev/vdb1
  /dev/vdb1             2.9G4.5M2.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.rpmlibevent-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_storagedfdfs_upload_appender
  fdfs_appender_test1fdfs_download_filefdfs_test      fdfs_upload_file
  fdfs_append_file   fdfs_file_info      fdfs_test1   restart.sh
  fdfs_crc32         fdfs_monitor      fdfs_trackerdstop.sh
  # ls /etc/fdfs/
  client.confhttp.confmime.typesstorage.conftracker.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 : 同步完成情况

  # 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
  

  #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
  

  # 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_file192.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.
  

   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
  

  # ls /data/fastdfs/data/00/00/            //查看存储结果
  wKgER1pdK3WABIFgAAAAaejzMko287_big.txt
  wKgER1pdK3WABIFgAAAAaejzMko287_big.txt-m
  wKgER1pdK3WABIFgAAAAaejzMko287.txt
  wKgER1pdK3WABIFgAAAAaejzMko287.txt-m
  //因为时实时推送数据文件 所有在 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
  

  # ls /data/fastdfs/data/00/00/         //查看存储结果
  ...
  wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg
  

  # 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访问 pc71pc72
  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/
  confhtmllogssbin
  2) 修改配置文件
  # vim /usr/local/nginx/conf/nginx.conf
  

  43         location / {
  44             #root   html;
  45             #indexindex.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
  

  在上述实验的基础上做相关的调整实现下面的实验
  搭建扩展存储服务器
  实验拓扑图:
  http://s1.运维网.com/images/20180116/1516108746293602.jpg
操作流程:
    跟踪器 (tracker)    pc70192.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   group1192.168.4.71
  100002   group1192.168.4.72
  100003   group2192.168.4.73
  100004   group2192.168.4.74
  配置存储节点 pc73   pc74
     1) 准备存储空间
  2) 安装软件包
    3) 修改配置文件storage.conf
   # vim /etc/fdfs/storage.conf      //配置文件中只有声明组与上述不同 其于均相同
      7 group_name=group2//所属存储组


配置Web访问 pc71pc72
  1) 安装提供nginx 软件包
  2) 修改配置文件
      # vim /etc/fdfs/mod_fastdfs.conf         //模版配置文件中只有声明组与上述不同 其于均相同
             47 group_name=group1//当前所在存储组
  3) 启动nginx
  
  启动服务   
         1) pc70需要重新启动服务

  2)启动存储节点 pc71   pc72
  
  # 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
  # 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
  # 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.conf1.jpg
  group1/M00/00/00/wKgER1pdbEaAUfkvAAB_2jHRplo065.jpg
  # fdfs_upload_file/etc/fdfs/client.conf1.jpg
  group2/M00/00/00/wKgESVpdbEeANZeWAAB_2jHRplo990.jpg
  # fdfs_upload_file/etc/fdfs/client.conftest.jpg
  group1/M00/00/00/wKgESFpdbE2AVXMfAAB_2jHRplo700.jpg
  # fdfs_upload_file/etc/fdfs/client.conftest.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
  



页: [1]
查看完整版本: FastDFS 分布式文件系统 搭建部署