分布式文件系统-FastDFS

 

一、FastDFS简介

一、FastDFS简介

FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100 
 FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。 
 支持存储服务器在线扩容,支持相同的文件只保存一份,节约磁盘。 
 FastDFS只能通过Client API访问,不支持POSIX访问方式。 
 FastDFS适合中大型网站使用,用来存储资源文件(如:图片、文档、视频等)

二、FastDFS组成部分及其它名词

1、tracker server

跟踪服务器:用来调度来自客户端的请求。且在内存中记录所有存储组和存储服务器的信息状态。

2、storage server

存储服务器:用来存储文件(data)和文件属性(metadata)

3、client

客户端:业务请求发起方,通过专用接口基于TCP协议与tracker以及storage server进行交互

group

组,也可称为卷:同组内上的文件是完全相同的

文件标识

包括两部分:组名和文件名(包含路径)

meta data

文件相关属性:键值对(Key Value Pair)方式

fid

文件标识符: 
例如: 
group1/M00/00/00/CgEOxVegXB2AdYafAAAB0b8tBbQ9155303 
group_name:存储组的组名;上传完成后,需要客户端自行保存 
M##:服务器配置的虚拟路径,与磁盘选项store_path#对应 
两级以两位16进制数字命名的目录 
文件名:与原文件名并不相同;由storage server根据特定信息生成。文件名包含:源存储服务器的IP地址、文件创建时间戳、文件大小、随机数和文件扩展名等

三、FastDFS同步机制

1、同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行; 
 2、文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器; 
 3、源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了; 
 上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。

四、FastDFS与集中存储方式对比

五、FastDFS和mogileFS对比

六、FastDFS安装配置

1、安装开发环境

# yum groupinstall "Development Tools" "Server platform Development"

2、安装libfastcommon

# git clone https://github.com/happyfish100/libfastcommon.git# cd libfastcommon/# ./make.sh # ./make.sh install

3、安装fastdfs

# cd /root/# git clone https://github.com/happyfish100/fastdfs.git# cd fastdfs/# ./make.sh # ./make.sh install

tracker 配置

配置文件修改:根据需求修改

# cd /etc/fdfs# cp tracker.conf.sample tracker.conf# vim /etc/fdfs/tracker.conf  base_path=/data/fdfs/tracker # 存储日志及tracker的状态信息

启动服务(Centos6):

# mkdir -pv /data/fdfs/tracker# service fdfs_trackerd start

启动服务(Centos7)方式一:

# mkdir -pv /data/fdfs/tracker# /etc/init.d/fdfs_trackerd start

启动服务(Centos7)方式二: 
添加systemd的units文件

# cat > /usr/lib/systemd/system/fdfs_trackerd << EOF# Systemd unit file for default tomcat# 

[Unit]Description=FastDFS tracker scriptAfter=syslog.target network.target

[Service]Type=notifyExecStart=/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

[Install]WantedBy=multi-user.targetEOF

通过systemd启动

systemctl start fdfs_trackerd.service# ss -tnl|grep 22122LISTEN     0      128          *:22122                    *:*  

storage 配置

根据需求修改

# cd /etc/fdfs# cp storage.conf.sample storage.conf# vim /etc/fdfs/storage.conf  group_name=group1  #指定组名  base_path=/data/fdfs/storage # 用于存储数据  store_path_count=2 # 设置设备数量  store_path0=/data/fdfs/storage/m0 #指定存储路径0  store_path1=/data/fdfs/storage/m1 #指定存储路径1  # 注意:同一组内存储路径不能冲突,例如:下一个节点的存储路径就是m2,m3....等  tracker_server=10.1.14.197:22122 #指定tracker

启动服务(Centos6):

# mkdir -pv /data/fdfs/storage/{m0,m1} # 创建数据目录# service fdfs_storaged start

启动服务(Centos7)方式一:

# mkdir -pv /data/fdfs/storage/{m0,m1} # 创建数据目录# /etc/init.d/fdfs_storaged start

启动服务(Centos7)方式二: 
添加systemd的units文件

# mkdir -pv /data/fdfs/storage/{m0,m1} # 创建数据目录

# cat > /usr/lib/systemd/system/fdfs_trackerd << EOF# Systemd unit file for default fastdfs storage# 

[Unit]Description=FastDFS storage scriptAfter=syslog.target network.target

[Service]Type=notifyExecStart=/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

[Install]WantedBy=multi-user.targetEOF

通过systemd启动

systemctl start fdfs_storaged.service# ss -tnl|grep 23000LISTEN     0      128          *:23000                    *:*   

client配置

修改客户端配置文件

base_path=/data/fdfs/clienttracker_server=10.1.14.197:22122

七、测试FastDFS

1、上传文件

fdfs_upload_file   [storage_ip:port] [store_path_index]

# fdfs_upload_file /etc/fdfs/client.conf /etc/issuegroup1/M00/00/00/CgEOxVeMxeuABKiEAAAAF30Ccq85795930

2、查看文件

fdfs_file_info

# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/CgEOxVeMxeuABKiEAAAAF30Ccq85795930

source storage id: 0source ip address: 10.1.14.198file create timestamp: 2016-07-18 20:04:59file size: 23file crc32: 2097312431 (0x7D0272AF)

3、下载文件

fdfs_download_file   [local_filename] [ ]

# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/CgEOxVeMxeuABKiEAAAAF30Ccq85795930 /tmp/issue

4、查看存储节点状态

# fdfs_monitor /etc/fdfs/client.conf[2016-08-03 11:58:20] DEBUG - base_path=/data/fdfs/client, 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

server_count=1, server_index=0

tracker server is 10.1.14.197:22122

group count: 1

Group 1:group name = mage1disk total space = 18898 MBdisk free space = 17222 MBtrunk free space = 0 MBstorage server count = 2active server count = 2storage server port = 23000storage HTTP port = 8888store path count = 1subdir count per path = 256current write server index = 1current trunk file id = 0

   Storage 1:        id = 10.1.14.198        ip_addr = 10.1.14.198  ACTIVE        http domain =         version = 5.08        join time = 2016-08-03 20:40:46        up time = 2016-08-03 11:58:16        total storage = 18898 MB        free storage = 17222 MB        upload priority = 10        store_path_count = 1        subdir_count_per_path = 256        storage_port = 23000        storage_http_port = 8888        current_write_path = 0        source storage id =         if_trunk_server = 0        connection.alloc_count = 256        connection.current_count = 0        connection.max_count = 0        total_upload_count = 1        success_upload_count = 1        total_append_count = 0        success_append_count = 0        total_modify_count = 0        success_modify_count = 0        total_truncate_count = 0        success_truncate_count = 0        total_set_meta_count = 0        success_set_meta_count = 0        total_delete_count = 0        success_delete_count = 0        total_download_count = 0        success_download_count = 0        total_get_meta_count = 0        success_get_meta_count = 0        total_create_link_count = 0        success_create_link_count = 0        total_delete_link_count = 0        success_delete_link_count = 0        total_upload_bytes = 23        success_upload_bytes = 23        total_append_bytes = 0        success_append_bytes = 0        total_modify_bytes = 0        success_modify_bytes = 0        stotal_download_bytes = 0        success_download_bytes = 0        total_sync_in_bytes = 0        success_sync_in_bytes = 0        total_sync_out_bytes = 0        success_sync_out_bytes = 0        total_file_open_count = 1        success_file_open_count = 1        total_file_read_count = 0        success_file_read_count = 0        total_file_write_count = 1        success_file_write_count = 1        last_heart_beat_time = 2016-08-03 11:58:15        last_source_update = 2016-08-03 20:43:55        last_sync_update = 1970-01-01 08:00:00        last_synced_timestamp = 1970-01-01 08:00:00     Storage 2:        id = 10.1.14.199        ip_addr = 10.1.14.199  ACTIVE        http domain =         version = 5.08        join time = 2016-08-03 20:42:13        up time = 2016-08-03 11:58:08        total storage = 18898 MB        free storage = 17222 MB        upload priority = 10        store_path_count = 1        subdir_count_per_path = 256        storage_port = 23000        storage_http_port = 8888        current_write_path = 0        source storage id = 10.1.14.198        if_trunk_server = 0        connection.alloc_count = 256        connection.current_count = 0        connection.max_count = 0        total_upload_count = 0        success_upload_count = 0        total_append_count = 0        success_append_count = 0        total_modify_count = 0        success_modify_count = 0        total_truncate_count = 0        success_truncate_count = 0        total_set_meta_count = 0        success_set_meta_count = 0        total_delete_count = 0        success_delete_count = 0        total_download_count = 0        success_download_count = 0        total_get_meta_count = 0        success_get_meta_count = 0        total_create_link_count = 0        success_create_link_count = 0        total_delete_link_count = 0        success_delete_link_count = 0        total_upload_bytes = 0        success_upload_bytes = 0        total_append_bytes = 0        success_append_bytes = 0        total_modify_bytes = 0        success_modify_bytes = 0        stotal_download_bytes = 0        success_download_bytes = 0        total_sync_in_bytes = 23        success_sync_in_bytes = 23        total_sync_out_bytes = 0        success_sync_out_bytes = 0        total_file_open_count = 1        success_file_open_count = 1        total_file_read_count = 0        success_file_read_count = 0        total_file_write_count = 1        success_file_write_count = 1        last_heart_beat_time = 2016-08-03 11:58:07        last_source_update = 1970-01-01 08:00:00        last_sync_update = 2016-08-03 20:43:57        last_synced_timestamp = 2016-08-03 20:43:55 (0s delay)

八、配置nginx为storage server提供http访问接口

1、下载fastdfs-nginx-module

# git clone https://github.com/happyfish100/fastdfs-nginx-module.git

2、下载nginx源码,并编译支持fastdfs

# 安装依赖程序# yum install openssl-devel pcre-devel -y &>/dev/null

# wget http://nginx.org/download/nginx-1.10.1.tar.gz &>/dev/null

# tar xf /root/nginx-1.10.1.tar.gz

# cd /root/nginx-1.10.1# useradd -r nginx &>/dev/null

# ./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre --add-module=../fastdfs-nginx-module/src# make# make install

3、复制配置文件

# cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf  /etc/fdfs/# cp /root/fastdfs-5.0.8/conf/{http.conf,mime.types}  /etc/fdfs/

注意:fastdfs-5.0.8fastdfs源码目录,如为更改,应叫fastdfs

4、配置fastdfs-nginx-module配置文件

# vim /etc/fdfs/mod_fastdfs.confbase_path=/data/fdfs/storage #存储节点的目录位置tracker_server=10.1.14.197:22122 #制定tracker-serverstorage_server_port=23000group_name=mage1  #制定组名url_have_group_name = true  #访问路径中是否包括组名store_path_count=1 #配置路径个数store_path0=/data/fdfs/storage/m0  #指定要查看的路径

[group1]group_name=mage1storage_server_port=23000store_path_count=1store_path0=/data/fdfs/storage/m0

5、配置nginx

# vim /etc/nginx/nginx.conflocation ~ /mage[0-9]+/M00/ {    root /data/fdfs/storage/m0/data/;    ngx_fastdfs_module;}       # cat >> /etc/profile.d/nginx.sh << EOFexport PATH=$PATH:/usr/local/nginx/sbinEOF

# source /etc/profile.d/nginx.sh

6、为存储文件路径穿件链接至M00

# ln -sv /data/fdfs/storage/m0/data  /data/fdfs/storage/m0/data/M00 

7、启动nginx和重启storage并上传文件测试

启动nginx# nginx -t# nginx# /etc/init.d/fdfs_storaged restart# ss -tnl|grep -E "(80|23000)"LISTEN     0      128          *:80                       *:*                  LISTEN     0      128          *:23000                    *:*  

上传文件

# fdfs_upload_file /etc/fdfs/client.conf /usr/share/wallpapers/CentOS7/contents/images/2560x1600.jpgmage1/M00/00/00/CgEOx1ehc2eATt6RAA6q2wjnW8s035.jpg

查看测试

 作者:Antony WX&QQ:1257465991 
 Q/A:如有问题请慷慨提出

如有格式问题请访问:
http://zantony.top/2016/08/02/%E5%88%86%E5%B8%83%E5%BC%8F%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F-FastDFS/

时间: 2024-09-28 06:11:18

分布式文件系统-FastDFS的相关文章

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

  原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server).存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务.   Storage server Storage server(后简称st

网站文件系统发展&amp;&amp;分布式文件系统fastDFS

  网站文件系统发展   1.单机时代的图片服务器架构    初创时期由于时间紧迫,开发人员水平也很有限等原因.所以通常就直接在website文件所在的目录下,建立1个upload子目录,用于保存用户上传的图片文件.如果按业务再细分,可以在upload目录下再建立不同的子目录来区分.例如:upload\QA,upload\Face等 优点:实现起来最简单,无需任何复杂技术,就能成功将用户上传的文件写入指定目录.保存数据库记录和访问起来倒是也很方便. 缺点:上传方式混乱,严重不利于网站的扩展.  

TFS分布式文件系统应用

TFS是淘宝开源的一套高性能文件存储系统,在阿里广泛应用, 除了自建文件系统,在应用上云的大趋势下,还可以使用阿里云的对象存储OSS服务:阿里云对象存储OSS首页 一.关于TFS TFS(Taobao File System)是一个高可扩展.高可用.高性能.面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问. TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各

C#和.NET中如何利用FastDFS打造分布式文件系统

背景 海量存储.系统负载的迁移.服务器吞吐的瓶颈等等 让文件系统独立于业务系统 提高整个项目的扩展性以及可维护性 目前主流的方案 MFS FASTDFS GFS LUSTRE HADOOP等等 我选择的是FASTDFS 用一句广告语来说 "免费.快速.找得到".FASTDFS的作者是淘宝的资深架构师余庆,很诙谐.很有爱!!!其他方案还没玩过 暂不评论. 简介 FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux.FreeBSD等UNIX系统类google FS,不是通

FastDFS+Nginx搭建分布式文件系统

一,关于FastDFS      FastDFS是用c语言编写的一款开源的分布式文件系统.FastDFS为互联网量身定制,充分考虑了冗余备份.负载均衡.线性扩容等机制,并注重高可用.高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传.下载等服务.      如上图,其中tracker并不保存实际的图片,而是起到一个协调的作用,具体的图片存储在storage里面.但我们页面上通过url读取图片的时候,我们读取的还是storager的地址,但是storager本身是不带

各种分布式文件系统的比较

适合做通用文件系统的有 MooseFS,GlusterFS,Lustre. MooseFS 支持FUSE,相对比较轻量级,对master服务器有单点依赖,用perl编写,性能相对较差,国内用的人比较多,易用,稳定,对小文件很高效. + 支持文件元信息 + mfsmount 很好用 + 编译依赖少,文档全,默认配置很好 + mfshdd.cfg 加 * 的条目会被转移到其它 chunk server,以便此 chunk server 安全退出 + 不要求 chunk server 使用的文件系统格

分布式文件系统应用(上) 理论

自从6月份出山以来 就一直琢磨着搞一套通用的服务化平台.在设计用户行为分析以及用户推广的时候,发现自己的构架里对海量文件的存储没有一个合理的方案.起初打算用windows2003中dfs系统开发一套新的文件系统,后来发现win下的dfs是个大坑,未遂.然后考虑到win平台与linux系统之间关于文件处理的优劣与稳定性,最终选择linux下fastdfs. 下面先简单介绍下分布式文件系统然后结合我的实际case给大家图文演示,在这之前先感谢下fishman.咕咚.以及菲雪同学的大力支持.你们是最棒

分布式文件系统试用比较

  MooseFS 很不错,已经实用了半月了,易用,稳定,对小文件很高效. MogileFS 据说对于 Web 2.0 应用存储图片啥的很好. GlusterFS 感觉广告宣传做的比产品本身好. OpenAFS/Coda 是很有特色的东西. Lustre 复杂,高效,适合大型集群. PVFS2 搭配定制应用会很好,据说曙光的并行文件系统就是基于 PVFS. 适合做通用文件系统的有 MooseFS,GlusterFS,Lustre. ================================

当下流行的分布式文件系统大阅兵

当下流行的分布式文件系统大阅兵 本文对目前数种分布式文件系统进行简单的介绍.当前比较流行的分布式文件系统包括:Lustre.Hadoop.MogileFS.FreeNAS.FastDFS.NFS.OpenAFS.MooseFS.pNFS.以及GoogleFS. Lustre(www.lustre.org) lustre是一个大规模的.安全可靠的,具备高可用性的集群文件系统,它是由SUN公司开发和维护.该项目主要的目的就是开发下一代的集群文件系统,可以支持超过10000个节点,数以PB的数量存储系