首页 > 代码库 > 【架构设计】分布式文件系统 FastDFS的原理和安装使用

【架构设计】分布式文件系统 FastDFS的原理和安装使用

本文地址

分享提纲:

  1.概述

  2. 原理

  3. 安装

  4. 使用

  5. 参考文档

 

1. 概述


 

  1.1)【常见文件系统】

    Google了一下,流行的开源分布式文件系统有很多,介绍如下:
 
    -- mogileFS:Key-Value型元文件系统,不支持FUSE,应用程序访问它时需要API,主要用在web领域处理海量小图片,效率相比mooseFS高很多。
    -- fastDFS:国人 余庆老师(GitHub)在mogileFS的基础上进行改进的key-value型文件系统,同样不支持FUSE,提供比mogileFS更好的性能。
    -- mooseFS:支持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多
    -- glusterFS:支持FUSE,比mooseFS庞大
    -- ceph:支持FUSE,客户端已经进入了linux-2.6.34内核,也就是说可以像ext3/rasierFS一样,选择ceph为文件系统。彻底的分布式,没有单点依赖,用C编写,性能较好。基于不成熟的btrfs,其本身也非常不成熟。
    -- lustre:Oracle公司的企业级产品,非常庞大,对内核和ext3深度依赖
    -- NFS:老牌网络文件系统,具体不了解,反正NFS最近几年没发展,肯定不能用
 
  1.2)【fastDFS】
    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
 
 

2. 原理


  2.1)【三个角色】

  具体参见: 分布式文件系统FastDFS设计原理

  FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)

    • Tracker Server: 跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server
      和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
    • Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
    • Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
技术分享
 
  2.2) 【上传下载以及同步文件简述
  大概上传流程就是客户端发送上传请求到Tracker Server服务器,接着Tracker Server服务器分配groupStorage Server,当然这是有一定规则的,选择好Storage Server后再根据一定规则选择存储在这个服务器会生成一个file_id,这个file_id 包含字段包括:storage server ip、文件创建时间、文件大小、文件 CRC32 校验码和随机数;每个存储目录下有两个 256 * 256 个子目录,后边你会知道一个Storage Server存储目录下有好多个文件夹的,storage 会按文件file_id进行两次 hash ,路由到其中一个子目录,然后将文件存储到该子目录下,最后生成文件路径:group 名称、虚拟磁盘路径、数据两级目录、file_id和文件后缀就是一个完整的文件地址。
可能我理解的也不是很彻底,下载、同步操作我不写了,这里有一篇文章 分布式文件系统FastDFS设计原理 讲解的很详细,我就不班门弄斧了,大家可以点击去看看。
 
  

3. 安装


  

源码下载:http://code.google.com/p/fastdfs
寻求帮助:http://www.csource.org
作者 余庆老师(GitHub)

具体安装教程见 :FastDFS 安装及使用

        及 【】分布式文件系统 - FastDFS 在 CentOS 下配置安装部署

  3.1)【安装libevent】

技术分享
fastDFS需要安装libevent比较新的版本,将本机的比较低的版本卸载了。 rpm -qa libeventlibevent-1.4.13-1.el6.x86_64rpm -e --nodeps libevent安装一个最新稳定版 wget https://github.com/downloads/libevent/libevent/libevent-2.0.18-stable.tar.gztar zxvf libevent-2.0.18-stable.tar.gzcd libevent-2.0.18-stable./configuremake && make install为libevent创建软链接到/lib库下,64位系统对应/lib64 ln -s /usr/local/lib/libevent* /lib/ln -s /usr/local/lib/libevent* /lib64/
安装libevent

  

  3.2)【安装FastDFS】

技术分享
wget http://fastdfs.googlecode.com/files/FastDFS_v3.06.tar.gztar zxvf FastDFS_v3.06.tar.gzcd FastDFS./make.sh./make.sh install
安装FastDFS

  

  3.3)【配置FastDFS】 
 
技术分享
环境:tracker server192.168.1.5storage server192.168.1.51192.168.1.52 1、配置并启动 tracker server①配置 tracker.conf mkdir /data/fastdfsvim /etc/fdfs/tracker.confbase_path=/data/fastdfs②启动 tracker /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf③开机启动 vim /etc/rc.local/usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf2、配置并启动 storage server①配置 tracker.conf mkdir /data/fastdfsmkdir /data/imagesvim /etc/fdfs/storage.confbase_path=/data/fastdfsstore_path0=/data/imagestracker_server=192.168.1.5:22122②启动 tracker /usr/local/bin/fdfs_storage /etc/fdfs/storage.conf③开机启动 vim /etc/rc.local/usr/local/bin/fdfs_storage /etc/fdfs/storage.conf3、为storage节点安装fastdfs-nginx-module模块①安装模块安装Nginx详见:需重新编译Nginx wget http://fastdfs.googlecode.com/files/fastdfs-nginx-module_v1.10.tar.gztar zxvf fastdfs-nginx-module_v1.10.tar.gzwget http://nginx.org/download/nginx-1.2.0.tar.gztar zxvf nginx-1.2.0.tar.gzcd nginx-1.2.0./configure --prefix=/usr/local/nginx --add-module=../fastdfs-nginx-module/srcmake && make installcd ..②配置编辑nginx.conf vim /usr/local/nginx/conf/nginx.confserver {    listen       80;    server_name  localhost;     location /M00 {        alias /data/images/data;        ngx_fastdfs_module;    }    ......}给 storage 的存储目录做一个软连接 ln -s /data/images/data/ /data/images/data/M00拷贝mod_fastdfs.conf 到 /etc/fdfs/ cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/vim /etc/fdfs/mod_fastdfs.confbase_path=/data/fastdfstracker_server=192.168.1.5:22122store_path0=/data/images启动nginx /usr/local/nginx/sbin/nginx
配置FastDFS

 

 

4. 使用


  4.1)【具体使用】

 

技术分享
1、上传文件FastDFS安装包中,自带了客户端程序,通过程序可以进行文件上传。在使用这个客户端程序之前,首先需要配置client.conf,然后再进行文件上传及下载。在tracker上修改客户端配置文件client.conf vim /etc/fdfs/client.confbase_path=/data/fastdfstracker_server=192.168.1.5:22122vim a.htmlThis Is FastDFS Test.上传文件 /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.htmlThis is FastDFS client test program v3.06 Copyright (C) 2008, Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU GeneralPublic License V3, which may be found in the FastDFS source kit.Please visit the FastDFS Home Page http://www.csource.org/ for more detail. [2012-04-29 12:42:53] INFO - base_path=/data/tracker, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0 tracker_query_storage_store_list_without_group: server 1. group_name=group1, ip_addr=192.168.1.51, port=23000server 2. group_name=group1, ip_addr=192.168.1.52, port=23000 group_name=group1, ip_addr=192.168.1.51, port=23000storage_upload_by_filenamegroup_name=group1, remote_filename=M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90.htmlsource ip address: 192.168.1.51file timestamp=2012-04-29 12:42:53file size=14file crc32=674197143file url: http://192.168.1.5/group1/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90.htmlstorage_upload_slave_by_filenamegroup_name=group1, remote_filename=M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.htmlsource ip address: 192.168.1.51file timestamp=2012-04-29 12:42:53file size=14file crc32=674197143file url: http://192.168.1.5/group1/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.html上传成功试试用 http://192.168.1.51/M00/00/00/wKgBM0-cxs32qFyYAAAADigvbpc90_big.html 访问看看吧。 
具体使用

 

 

 

5. 参考文档


  5.1) 分布式文件系统 - FastDFS 简单了解一下

  5.2) 分布式文件系统FastDFS设计原理

  5.3) FastDFS 安装及使用

  5.4) 【好】 分布式文件系统 - FastDFS 配置 Nginx 模块及上传测试
 
 
 
 

【架构设计】分布式文件系统 FastDFS的原理和安装使用