fastDFS

fastDFS介绍

  fastDFS是一款开源分布式文件系统,它用纯C语言实现,支持linuxfreeBSDAIXunix系统;

  作者为淘宝网的余庆,20087月发布;

  功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等;

  解决的大容量存储和负载均衡的问题;

  特别适合以文件为载体的在线服务,如相册网站、视频网站等

fastDFS基本概念

  fastDFS服务端有两个角色:

    跟踪器tracker和存储节点storage

    跟踪器:

      主要做调度工作,在访问上起负载均衡的作用  

    存储节点:

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

fastDFS系统结构

  跟踪器和存储节点都可以由一台多台服务器构成

  跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务

  跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少

fastDFS采用了分组存储方式

  集群由一个或多个组构成,集群存储总容量为集群中所有的存储容量之和

  一个组由一台或多台存储服务器组成,同组内的多台storage server之间是互备关系,同组存储服务器上的文件是完全一致的

  文件上传、下载、删除等操作可以在组内任意一台storage server上进行

  一个组的存储容量为该组内存储服务器容量最小的那个

  采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组

  一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)

  当系统容量不足时,可以增加组来扩充存储容量(横向扩容)

  不同组的storage server 之间不会相互通信,同组内的storage server之间会相互连接进行文件同步

  torage server采用binlog文件记录文件上传、删除等更新操作

  binlog中只记录文件名,不记录文件内容

  文件同步只在同组内的storage server 之间进行,采用push方式,即源头服务器同步给目标服务器

fastDFS工作流程

fastDFS上传文件过程

  client询问tracker上传到的storage,不需要附加参数;

  tracker返回一台可用的storage

  client直接和storage通讯完成文件上传

fastDFS下载文件过程

  client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);

  tracker返回一台可用的storage

  client直接和storage通讯完成文件下载

FastDFS官网 --http://bbs.chinaunix.net/forum-240-1.html

国际网址 --https://sourceforge.net/projects/fastdfs/       

https://fastdfs.googlecode.com/files/FastDFS_v4.06.tar.gz

服务器端脚本语言: python php java asp

客户端脚本语言:   javascript

meta data 元数据

FastDFS配置:

tracker端
#yum -y install gcc gcc-c++ make libevent
#rpm -ivh 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
#tar  -zxvf  FastDFS_v4.06.tar.gz
#cd FastDFS
#vim INSTALL
#./make.sh
#./make.sh install
#mkdir -pv /data/fastdfs      //工作目录
#vim /etc/fdfs/tracker.conf
  22 base_path=/data/fastdfs   //储存路径

  182 use_storage_id = true    //用编号识别设备

  34 store_lookup=2(负载)0(轮询)1(给指定的组)

  40 store_group=group1

  storage_ids_filename = storage_ids.conf

#vim /etc/fdfs/storage_ids.conf     //加入储存组声明
  100001 group1 192.168.4.103
  100002 group1 192.168.4.104
  100003 group2 192.168.4.105
  100004 group2 192.168.4.106
#cp init.d/fdfs_trackerd  /etc/init.d
#chmod +x /etc/init.d/fdfs_trackerd
#chkconfig --add fdfs_trackerd
#service fdfs_trackerd start
#chkconfig fdfs_trackerd on
#netstat -antup | grep fdfs_trackerd

storage端
103,104
准备存储空间
#fdisk /dev/vdb
#mkfs.ext3 /dev/vdb1
#mount /dev/vdb1 /data1

#mkdir -pv /data/fastdfs
#vim /etc/fdfs/storage.conf
  37 base_path=/data/fastdfs

        96 store_path_count=1    //存储空间个数

  100 store_path0=/data1    //挂载目录

  109 tracker_server=192.168.4.93:22122

        9   group_name=group1

#cp init.d/fdfs_storaged /etc/init.d/
#chmod +x /etc/init.d/fdfs_storaged
#chkconfig --add fdfs_storaged
#service fdfs_storaged start
#chkconfig fdfs_storaged on

105,106

#vim /etc/fdfs/storage.conf

  9   group_naem=group2

4.254测试
103:
#scp /etc/fdfs/client.conf 192.168.4.254:/etc/
#scp /usr/local/bin/fdfs_download_file 192.168.4.254:/root/bin
#scp /usr/local/bin/fdfs_test 192.168.4.254:/root/bin
#scp /usr/local/bin/fdfs_upload_file 192.168.4.254:/root/bin
#scp /usr/local/bin/fdfs_delete_file 192.168.4.254:/root/bin

254:
#mkdir /root/bin
#vim /etc/client.conf
10 base_path=/data1/fastdfs
14 tracker_server=192.168.4.93:22122
#mkdir -pv /data1/fastdfs

上传本地文件到储存服务器
#fdfs_test(显示访问过程) /etc/client.conf upload(上传) /etc/passwd
#fdfs_upload_file(上传) /etc/client.conf /etc/hosts

下载储存服务器文件到本地
#fdfs_download_file /etc/client.conf group1/M00/00/00/wKgEZ1oE33eAOq1PAAAJn0_HK2c7871198 plj.txt


配置web访问
103,104
#useradd -s /sbin/nologin nginx
#groupadd nginx
#yum -y install pcre-devel zlib-devel
#tar xf fastdfs-nginx-module_v1.16.tar.gz
#ls fastdfs-nginx-module/src/
#tar xf nginx-1.7.10.tar.gz
#cd nginx-1.7.10
#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=../fastdfs-nginx-module/src/
#make
#make install
#cp fastdfs-nginx-module/src/mod_fastdfs.conf     /etc/fdfs
#vim /usr/local/nginx/conf/nginx.conf
43 location / {
44 # root html;
45 #index index.html index.htm;
46 ngx_fastdfs_module;
47 }

#vim /etc/fdfs/mod_fastdfs.conf
40 tracker_server=192.168.4.93:22122
53 url_have_group_name = true
62 store_path0=/data1

#/etc/init.d/fdfs_storaged restart
#/usr/local/nginx/sbin/nginx
#netstat -antup |grep fdfs_storaged
#netstat -antup | grep nginx

同组存储服务器参数

103,104,105,106

vim /etc/fdfs/storage.conf
145 file_distribute_rotate_count=100 //当同组1台服务器接受了100个数据后轮询到第2台服务器
85 sync_start_time=00:00 //开始推送时间
89 sync_end_time=23:59 //结束推送时间

原文地址:https://www.cnblogs.com/wwchihiro/p/9243386.html