个人博客请访问 http://www.x0100.top

01

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

02

FastDFS介绍

是一款开源的轻量级分布式文件系统,纯C实现,支持linux、freeBSD等unix系统,这种分布式存储更适合4kb--500MB之间大小的文件存储。

三种角色:

1)客户端

2)tracker追踪服务器

3)storage存储服务器

客户端请求——追踪服务器——给客户端分配一个组——最终客户端将数据写入存储组中

追踪服务器:主要负责调度工作,在访问时起到负载均衡的作用,在内存中记录集群中group和storage服务器的状态信息,是连接客户端与group和storage枢纽

Storage server:存储服务器,文件和文件属性都保存在存储服务器上

FastDFS上传机制:

FastDFS下载机制:

03

FastDFS安装准备

利用两台虚拟机进行模拟环境

fastdfs-1-1  192.168.1.128

fastdfs-1-1  192.168.1.129

yum install git -y

下载官网:https://github.com/happyfish100

下载安装依赖包libfastcommon.git

[root@fastdfs-1-1 src]# git clone https://github.com/happyfish100/libfastcommon.git

[root@fastdfs-1-1 src]# cd libfastcommon/

[root@fastdfs-1-1libfastcommon]# ll

total 36

drwxr-xr-x 2 root root 4096 Mar  6 07:13 doc

-rw-r--r-- 1 root root 7939 Mar  6 07:13 HISTORY

-rw-r--r-- 1 root root  566 Mar  6 07:13 INSTALL

-rw-r--r-- 1 root root 1494 Mar  6 07:13 libfastcommon.spec

-rwxr-xr-x 1 root root 3099 Mar  6 07:13 make.sh

drwxr-xr-x 2 root root 4096 Mar  6 07:13 php-fastcommon

-rw-r--r-- 1 root root 2763 Mar  6 07:13 README

drwxr-xr-x 3 root root 4096 Mar  6 07:13 src

[root@fastdfs-1-1 libfastcommon]# ./make.sh

[root@fastdfs-1-1 libfastcommon]# ./make.sh install

04

FastDFS安装布署

下载安装fastdfs服务

[root@fastdfs-1-1 src]# wget https://github.com/happyfish100/fastdfs/archive/V5.09.tar.gz

[root@fastdfs-1-1 src]# ll

total 336

-rw-r--r-- 1 root root 335132 Mar  6 07:30 fastdfs-5.09.tar.gz

drwxr-xr-x 6 root root   4096 Mar  6 07:23 libfastcommon

[root@fastdfs-1-1 src]# tar zxf fastdfs-5.09.tar.gz

[root@fastdfs-1-1 src]# cd fastdfs-5.09

[root@fastdfs-1-1 fastdfs-5.09]# ./make.sh

[root@fastdfs-1-1 fastdfs-5.09]# ./make.sh install

[root@fastdfs-1-1 src]# ll /etc/fdfs/

total 24

-rw-r--r-- 1 root root 1461 Mar  6 07:32 client.conf.sample

-rw-r--r-- 1 root root 7927 Mar  6 07:32 storage.conf.sample

-rw-r--r-- 1 root root  105 Mar  6 07:32 storage_ids.conf.sample

-rw-r--r-- 1 root root 7318 Mar  6 07:32 tracker.conf.sample

[root@fastdfs-1-1 src]# ll /usr/bin/fdfs_

fdfs_appender_test  fdfs_download_file fdfs_test1

fdfs_appender_test1  fdfs_file_info  fdfs_trackerd

fdfs_append_file  fdfs_monitor fdfs_upload_appender

fdfs_crc32  fdfs_storaged   fdfs_upload_file

fdfs_delete_file  fdfs_test

修改默认路径

[root@fastdfs-1-1 src]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_storaged

[root@fastdfs-1-1 src]# sed -i 's#/usr/local/bin#/usr/bin#g' /etc/init.d/fdfs_trackerd

创建数据目录

[root@fastdfs-1-1 fdfs]# mkdir /fdfs/{tracker,storage} -p

[root@fastdfs-1-1 fdfs]# mkdir /fdfs/storage/base -p

[root@fastdfs-1-1 fdfs]# mkdir /fdfs/storage/store -p

[root@fastdfs-1-1 fdfs]# ll /fdfs/

total 8

drwxr-xr-x 2 root root 4096 Mar  6 07:42 storage

drwxr-xr-x 2 root root 4096 Mar  6 07:42 tracker

修改配置文件

[root@fastdfs-1-1 fdfs]# egrep -v "^#|^$" tracker.conf

disabled=false

bind_addr=  #绑定的IP

port=22122  #端口

connect_timeout=30

network_timeout=60

base_path=/fdfs/tracker #存储路径

max_connections=256

accept_threads=1

work_threads=4

min_buff_size = 8KB

max_buff_size = 128KB

store_lookup=2   #存储的模式

store_group=group2 # which group to upload file

store_server=0   # which storage server to upload file

store_path=0

download_server=0  # which storage server to download file

reserved_storage_space = 10%

# a group <= reserved_storage_space,保留的空间大小

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

sync_log_buff_interval = 10

check_active_interval = 120

thread_stack_size = 64KB

storage_ip_changed_auto_adjust = true

storage_sync_file_max_delay = 86400

storage_sync_file_max_time = 300

use_trunk_file = false

slot_min_size = 256

slot_max_size = 16MB

trunk_file_size = 64MB

trunk_create_file_advance = false

trunk_create_file_time_base = 02:00

trunk_create_file_interval = 86400

trunk_create_file_space_threshold = 20G

trunk_init_check_occupying = false

trunk_init_reload_from_binlog = false

trunk_compress_binlog_min_interval = 0

use_storage_id = false

storage_ids_filename = storage_ids.conf

id_type_in_filename = ip

store_slave_file_use_link = false

rotate_error_log = false

error_log_rotate_time=00:00

rotate_error_log_size = 0

log_file_keep_days = 0

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.server_port=8080

http.check_alive_interval=30

http.check_alive_type=tcp

http.check_alive_uri=/status.html

[root@fastdfs-1-2 fdfs]# /etc/init.d/fdfs_trackerd start

Starting FastDFS tracker server:

[root@fastdfs-1-2 fdfs]# lsof -i :22122

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

fdfs_trac 5913 root  5u  IPv4  30701  0t0  TCP *:22122 (LISTEN)

[root@fastdfs-1-1 fdfs]# egrep -v "^#|^$" storage.conf

disabled=false

group_name=group1

bind_addr=

client_bind=true

port=23000

connect_timeout=30

network_timeout=60

heart_beat_interval=30

stat_report_interval=60

base_path=/fdfs/storage/base

max_connections=256

buff_size = 256KB

accept_threads=1

work_threads=4

disk_rw_separated = true

disk_reader_threads = 1

disk_writer_threads = 1

sync_wait_msec=50

sync_interval=0

sync_start_time=00:00

sync_end_time=23:59

write_mark_file_freq=500

store_path_count=1

store_path0=/fdfs/storage/store

subdir_count_per_path=256

tracker_server=192.168.1.128:22122

tracker_server=192.168.1.129:22122

log_level=info

run_by_group=

run_by_user=

allow_hosts=*

file_distribute_path_mode=0

file_distribute_rotate_count=100

fsync_after_written_bytes=0

sync_log_buff_interval=10

sync_binlog_buff_interval=10

sync_stat_file_interval=300

thread_stack_size=512KB

upload_priority=10

if_alias_prefix=

check_file_duplicate=0

file_signature_method=hash

key_namespace=FastDFS

keep_alive=0

use_access_log = false

rotate_access_log = false

access_log_rotate_time=00:00

rotate_error_log = false

error_log_rotate_time=00:00

rotate_access_log_size = 0

rotate_error_log_size = 0

log_file_keep_days = 0

file_sync_skip_invalid_record=false

use_connection_pool = false

connection_pool_max_idle_time = 3600

http.domain_name=

http.server_port=8888

注:两台服务器保持一致即可

[root@fastdfs-1-1 fdfs]# /etc/init.d/fdfs_storaged start

Starting FastDFS storage server:

查看端口

[root@fastdfs-1-1 fdfs]# lsof -i :22122

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

fdfs_trac 3622 root 5u  IPv4  32395  0t0  TCP *:22122 (LISTEN)

fdfs_trac 3622 root 18w  IPv4 100079 0t0  TCP 192.168.1.128:38516->192.168.1.129:22122 (ESTABLISHED)

fdfs_trac 3622 root19u IPv4 87578 0t0 TCP 192.168.1.128:22122->192.168.1.129:40755 (ESTABLISHED)

fdfs_trac 3622 root 22u IPv4 100019 0t0 TCP 192.168.1.128:22122->192.168.1.128:46962 (ESTABLISHED)

fdfs_stor 3640 root 20u  IPv4 100042 0t0 TCP 192.168.1.128:38511->192.168.1.129:22122 (ESTABLISHED)

fdfs_stor 3640 root 21u  IPv4 100043 0t0 TCP 192.168.1.128:46962->192.168.1.128:22122 (ESTABLISHED)

[root@fastdfs-1-1 fdfs]# lsof -i :23000

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

fdfs_stor 3640 root 5u  IPv4 100024 0t0 TCP *:inovaport1 (LISTEN)

fdfs_stor 3640 root 19u  IPv4 100040 0t0 TCP 192.168.1.128:inovaport1->192.168.1.129:42800 (ESTABLISHED)

fdfs_stor 3640 root  23u  IPv4 100076 0t0  TCP 192.168.1.128:50933->192.168.1.129:inovaport1 (ESTABLISHED)

05

FastDFS客户端配置

客户端配置文件修改后如下

[root@fastdfs-1-1 ~]# egrep -v "^#|^$" /etc/fdfs/client.conf

connect_timeout=30

network_timeout=60

base_path=/tmp

tracker_server=192.168.1.128:22122

tracker_server=192.168.1.129:22122

log_level=info

use_connection_pool = false

connection_pool_max_idle_time = 3600

load_fdfs_parameters_from_tracker=false

use_storage_id = false

storage_ids_filename = storage_ids.conf

http.tracker_server_port=80

测试上传文件

[root@fastdfs-1-1 ~]# fdfs_upload_file

Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]

[root@fastdfs-1-1 ~]# fdfs_upload_file /etc/fdfs/client.conf /etc/passwd

group1/M00/00/00/wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

返回客户端一个fileid

[root@fastdfs-1-1 data]# pwd

/fdfs/storage/store/data

默认在数据存储目录下会创建256个目录,然后在每个目录中又创建256个目录,如下图

[root@fastdfs-1-1 00]# cd 00/

[root@fastdfs-1-1 00]# ls

wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

##刚刚上传的文件

[root@fastdfs-1-1 00]# md5sum wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

9ced869ca031da653ee8b3b708666a28  wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

将上传的文件下载下来

[root@fastdfs-1-1 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

通过检测MD5值来判断是否是同一文件

[root@fastdfs-1-1 ~]# md5sum wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

9ced869ca031da653ee8b3b708666a28  wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

[root@fastdfs-1-1 ~]# md5sum /etc/passwd

9ced869ca031da653ee8b3b708666a28  /etc/passwd

06

FastDFS常用命令介绍

fdfs_appender_test :追加测试

fdfs_crc32

fdfs_file_info :查看文件相关信息

fdfs_test :文件测试

fdfs_upload_appender :更新追加文件

fdfs_appender_test1 :追加文件测试

fdfs_delete_file  :删除文件

fdfs_monitor  :监控客户端

fdfs_test1   :测试

fdfs_upload_file :上传文件

fdfs_append_file :追加文件(先使用fdfs_upload_appender命令更新文件)

fdfs_download_file :下载文件

fdfs_storaged   :存储系统启动命令

fdfs_trackerd   :追踪系统启动命令

实例操作

查看文件信息

[root@fastdfs-1-1 ~]# fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKgBgFi9Z2aAXQdkAAAHT15G9sc8427272

source storage id: 0

source ip address: 192.168.1.128

file create timestamp: 2017-03-06 08:43:02

file size: 1871

file crc32: 1581708999 (0x5E46F6C7)

删除文件

[root@fastdfs-1-1 ~]# fdfs_delete_file /etc/fdfs/client.conf +文件ID

追加文件内容

[root@fastdfs-1-1 ~]# echo "hello" >test01.txt

[root@fastdfs-1-1 ~]# echo "world" >test02.txt

[root@fastdfs-1-1 ~]# fdfs_upload_appender /etc/fdfs/client.conf test01.txt

group1/M00/00/00/wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt

[root@fastdfs-1-1 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt

[root@fastdfs-1-1 ~]# cat wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt

hello

[root@fastdfs-1-1 ~]# fdfs_append_file /etc/fdfs/client.conf group1/M00/00/00/wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt test02.txt

[root@fastdfs-1-1 ~]# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt

[root@fastdfs-1-1 ~]# cat wKgBgFi9bM6EcC2vAAAAAHcc3SA979.txt

hello

world

分布式文件系统FastDFS详解相关推荐

  1. 分布式文件系统FastDFS详解-附带视频教程

    目录 1.FastDFS教程 2.FastDFS安装 安装FastDFS FastDFS配置文件详解 FastDFS启动 3.FastDFS重启与FastDFS关闭 FastDFS关闭 4.FastD ...

  2. FastDFS分布式文件系统实践详解

    FastDFS简介 FastDFS体系结构 上传流程 文件存储 pom.xml依赖 FastDFS配置 文件信息封装 文件上传 FastDFS体系结构 FastDFS是一个开源的轻量级分布式文件系统, ...

  3. GlusterFS/GFS 分布式文件系统--理论详解

    文章目录 一.文件系统简介 1.组成 2.作用 3.文件系统的挂载使用 二.GFS分布式文件系统概述 1.GFS简介 2.GFS的特点 3.GFS专业术语 4. 模块化堆栈式架构 5. GFS 工作流 ...

  4. 文件管理系统FastDFS详解

    什么是FastDFS 很多以文件为载体的在线服务,如相册网站.视频网站等,都需要对文件进行管理,包括文件的存储.同步.访问(文件上传.文件下载)等,同时肯定会伴随着大容量存储和负载均衡的问题. 在日常 ...

  5. 分布式文件系统----FastDFS

    FastDFS 1.分布式文件系统 1.1 FastDFS简介 1.2 FastDFS整体架构 1.3 FastDFS的存储策略 1.4 FastDFS的上传过程 1.5 FastDFS的文件同步 1 ...

  6. 轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级)

    轻量级分布式文件系统FastDFS使用安装说明手册(新手入门级) 实验室所在的课题组以研究云计算为主,但所有的研究都是在基于理论的凭空想像,缺少分布式环境的平台的实践,云计算神马的都是浮云了.因此,我 ...

  7. 分布式文件系统FastDFS架构剖析

    文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX ...

  8. 实战:轻量级分布式文件系统FastDFS(GraphicsMagick图片压缩)

    轻量级分布式文件系统FastDFS--实现用户头像上传/压缩屏幕适配 一.需求分析 1.1 业务场景: 用户上传的头像图片大小不一.手机和PC等设备显示尺寸也存在差异,因此需要能根据http请求指定的 ...

  9. php使用redis分布式锁,php基于redis的分布式锁实例详解

    在使用分布式锁进行互斥资源访问时候,我们很多方案是采用redis的实现. 固然,redis的单节点锁在极端情况也是有问题的,假设你的业务允许偶尔的失效,使用单节点的redis锁方案就足够了,简单而且效 ...

最新文章

  1. 主成分分析、因子分析、聚类分析的比较与应用
  2. 如何快速实现物联网行业中的实名认证
  3. 一些小团队的自动化运维实践经验
  4. python 如何查看模块所有方法-Python 查看模块的帮助文档,方法和帮助信息
  5. 用FTP客户端实现主机和虚拟机之间文件的传输(方法2)
  6. 使用cglib创建代理对象
  7. javascript 面向对象编程小记
  8. Magento安装后无法访问
  9. Mybatis逆向工程自动生成代码文件
  10. 演练 动态数组存储学生对象 并且实现遍历 0119
  11. python 柱状图设置样式_python数据可视化之图表样式调整(三)
  12. oracle改表结构非空字段类型,oracle 表结构的非完全复制
  13. Web安全工具大汇聚
  14. composition api在项目中的使用总结
  15. WordPress模板教程
  16. 未明学院:国际政治专业出身,如何pk掉港大、美籍商科生,拿下亚马逊市场部德勤offer!
  17. CSS基本布局——grid布局
  18. AE中文破解版软件屏蔽_破解教程
  19. 小竹关禁闭(线性dp
  20. 小学计算机设备管理 维护制度,信息化各种设备使用、管理及维护制度

热门文章

  1. 马云公益基金会新版官网上线,启用mayun.xin!
  2. Matlab实现求解乘法逆元实验
  3. 【网络工程师精华篇】超实用!100个网络基础知识汇总,网络工程师必备!
  4. Flink on Yarn的两种模式
  5. DynamoDB 小结
  6. 那个耍了 Google 的天才工程师,又摆了 Uber 一道
  7. LeetCode 904. 水果成篮
  8. 2020最新版Net加壳工具
  9. [Java] 枚举类型
  10. DVWA测试XSS跨站脚本攻击三种类型