FastDFS分布式文件服务器部署与运用

FastDFS介绍

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

server端分为两个部分,一个是tracker,一个是storage。顾名思义,前者调度管理,负载均衡,后者则是实际的存储节点。两个都能做成集群,以防止单点故障。

Storage server

Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。

以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。

group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。

storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

Tracker server

Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。

Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

2安装部署FastDFS

安装libfatscommon

git clone https://github.com/happyfish100/libfastcommon.git --depth 1

cd libfastcommon/

./make.sh && ./make.sh install

libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。

安装FastDFS

git clone https://github.com/happyfish100/fastdfs.git --depth 1

cd fastdfs/

./make.sh && ./make.sh install#配置文件准备

cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf

cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf

cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf #客户端文件,测试用

cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/ #供nginx访问使用

cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/ #供nginx访问使用

tracker配置

vim /etc/fdfs/tracker.conf#需要修改的内容如下

port=22122  # tracker服务器端口(默认22122,一般不修改)

base_path=/fastdfs/tracker  # 存储日志和数据的根目录#保存后启动

/etc/init.d/fdfs_trackerd start #启动tracker服务

chkconfig fdfs_trackerd on #自启动tracker服务

storage配置

vim /etc/fdfs/storage.conf#需要修改的内容如下

port=23000  # storage服务端口(默认23000,一般不修改)

base_path=/fastdfs/storage  # 数据和日志文件存储根目录

store_path0=/fastdfs/storage  # 第一个存储目录

tracker_server=192.168.0.xxx:22122  # tracker服务器IP和端口,可配置多个

http.server_port=8888  # http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)#保存后启动

/etc/init.d/fdfs_storaged start #启动storage服务

chkconfig fdfs_storaged on #自启动storage服务

client配置及测试

vim /etc/fdfs/client.conf#需要修改的内容如下

base_path=/fastdfs/tracker

tracker_server=192.168.1.xxx:22122    #tracker IP地址#保存后测试,返回ID表示成功 eg:group1/M00/00/00/wKgAQ1pysxmAaqhAAA76tz-dVgg.tar.gz

fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/nginx-1.12.2.tar.gz

//或者 /usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件

查看监听FastDFS及操作

查看进程及端口是否启动

netstat -unltp|grep fdfs

可以在任何storage机器上执行如下命令,查看fastdfs集群状态,如果各个storage状态都为ACTIVE,则搭建成功。

/usr/local/bin/fdfs_monitor /etc/fdfs/storage.conf

关闭tracker(storage)

/usr/local/bin/stop.sh /usr/local/bin/fdfs_trackered(fdfs_storaged) /etc/fdfs/tracker.conf(storage.conf)

# 或者 killall fdfs_trackered(storaged)  -------注意,千万不要使用-9强行杀死进程。否则可能会导致binlog数据丢失的问题。

重启tracker(storage)

/usr/local/bin/restart.sh /usr/local/bin/fdfs_trackered(fdfs_storaged) /etc/fdfs/tracker.conf(storage.conf)

删除storage

/usr/local/bin/fdfs_monitor /etc/fdfs/storage.conf delete group2 20.12.1.73(删除group2中ip为20.12.1.73的storage)

注意:在配置过程,要注意防火墙的设置。关闭防火墙,或者设置对相关端口例外。

3Nginx与FastDFS

安装fastdfs-nginx-module

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

cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs

Vi /etc/fdfs/mod_fastdfs.conf

base_path=/fastdfs

url_have_group_name = true

store_path0=/fastdfs/storage

安装nginx

git clone https://github.com/nginx/nginx

./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/

make && make install

配置nginx访问

vim /etc/fdfs/mod_fastdfs.conf#需要修改的内容如下

tracker_server=192.168.0.xxx:22122

url_have_group_name=true

store_path0=/fastdfs/storage#配置nginx.config

vi /usr/local/nginx/conf/nginx.conf#添加如下配置

server {

listen       8888;    ## 该端口为storage.conf中的http.server_port相同

server_name  localhost;

location ~/group[0-9]/ {

ngx_fastdfs_module;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}#测试下载,用外部浏览器访问刚才已传过的nginx安装包,引用返回的ID

http://192.168.0.xxx:8888/group1/M00/00/00/wKgAQ1pysxmAaqhAAA76tz-dVgg.tar.gz#弹出下载单机部署全部跑通,否则首先检查防火墙,再检查其他配置。

4Python运用

安装使用依赖

git clone https://github.com/hay86/fdfs_client-py.git

cd fdfs_client-py

$ sudo python setup.py install   //使用虚拟环境的需要使用虚拟环境的python

//虚拟环境中安装需要将fdfs_client/storage_client.py文件,将12行删除或注释(否则,使用时会报错ImportError: No module named sendfile)非虚拟环境可直接安装。

项目使用讲解

Qdc中我是利用Nginx做为文件上传服务器,然后文件调用接口保存文件数据和文件处理,通过celery执行后台任务将文件上传到分布式文件系统工具fastfdfs中,由fastfdfs系统将文件上传到各个服务器并返回信息到任务中,对数据进行保存。

对文件下载处理是调用了接口去回去文件资源信息,若后台任务还未执行完则获取上传文件时的资源地址,已被分布式文件系统上传到各个服务器就使用nginx利用负载均衡的方式去各个分布的服务器获取文件。

5参考资料:

  1. https://github.com/happyfish100/fastdfs/wiki#环境准备
  2. https://yq.aliyun.com/articles/448386

FastDFS分布式文件服务器部署与运用相关推荐

  1. 第三章、一文告诉你FastDFS分布式如何部署

            上一章节介绍了FastDFS的单机部署和使用,但是实际上的场景中不可能只用单机来做,更多的时候是采用集群部署,那么本章就带大家进入集群部署的研究. 1.准备环境 我这里采用7台,当然你 ...

  2. FastDFS分布式文件服务器

    1 FastDFS体系结构 FastDFS是用 c 语言编写的一款开源的分布式文件系统,它对文件进行管理,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问 ...

  3. JavaEE 企业级分布式高级架构师(十五)FastDFS分布式文件服务器(1)

    FastDFS学习笔记 FastDFS介绍 传统文件存储弊端 FastDFS是什么 为什么使用FastDFS FastDFS架构原理分析 架构整体分析 Tracker Server跟踪服务器 Stor ...

  4. JavaEE 企业级分布式高级架构师(十五)FastDFS分布式文件服务器(3)

    FastDFS学习笔记 Java操作FastDFS 测试文件上传 Spring Boot整合FastDFS 实现图片压缩 FastDFS主从文件 应用背景 解决办法 流程说明 Java代码 Nginx ...

  5. 【tool】企业级开源分布式文件服务器搭建(FastDFS)

    项目介绍 FastDFS介绍 FastDFS是一个以C语言开发的开源轻量级分布式文件系统,由阿里巴巴开发并开源.它对文件进行管理,功能包括:文件存储.文件同步.文件访问(上传.下载)等.解决了大容量存 ...

  6. fastdfs文件服务器部署

    fastdfs文件服务器部署 操作系统:CentOS 7.6 需开启端口:80(nginx),8888(nginx),22122(tracker),23000(storage) 注:所有前面带&quo ...

  7. 一文搞定FastDFS分布式文件系统配置与部署

    Ubuntu下FastDFS分布式文件系统配置与部署 白宁超 2017年4月15日09:11:52 摘要: FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件 ...

  8. FastDFS分布式文件系统配置与部署

    一文搞定FastDFS分布式文件系统配置与部署 阅读目录 1 分布式文件系统介绍 2 系统架构介绍 3 FastDFS性能方案 4 Linux基本命令操作 5 安装VirtualBox虚拟机并配置Ub ...

  9. Docker部署Fastdfs分布式文件存储系统

    Docker部署Fastdfs分布式文件存储系统 Fastdfs分布式文件存储系统 拉取镜像 部署Tracker和Storage 开放端口 SpringBoot代码示例 Fastdfs分布式文件存储系 ...

最新文章

  1. Splunk学习与实践
  2. java飞行器服务端_使用jvisualvm和飞行记录器分析Java程序cpu占用率过高
  3. SQL Server 2008 无法删除用户的解决方法
  4. 初学SSH 配置+错误总结
  5. 放弃winform的窗体吧,改用html作界面,桌面应用程序UI的新的开发方式。
  6. 禁止i5笔记本按Ctrl+Alt+向下键翻转屏幕
  7. python中int函数是什么作用_python中int函数怎么用
  8. mysql+last_query_cost_辛星简译MySQL中的last_query_cost
  9. 零值初始化字符串常数作为函数模板参数
  10. jetty 找不到html页面,记一次jetty 404问题排查修复
  11. 从《学书津梁》看五体创作思路(篆书)
  12. 口模块型3500/22-01-01-00
  13. javascript,jQuery,vue的区别
  14. MEMS智能传感器技术的新进展
  15. 计算机打字打出来的是数字,打字为什么出现数字
  16. 不破坏背景的情况下在线ps替换文字
  17. Mcad学习笔记之通过反射调用類的方法,屬性,字段,索引器(2種方法)
  18. XP和Java大战,谁胜一筹?
  19. 泛微e-cology OA 系统远程代码执行漏洞
  20. javaweb JSP JAVA 新闻发布系统源码(新闻管理系统)jsp新闻发布系统

热门文章

  1. 谈谈对于百度春晚战事的看法
  2. 17岁高中生证明著名数学难题,因此被MIT录取
  3. ToBeContinued
  4. 程序的指令和数据为什么分开存放?
  5. 条码打印软件有关打印错误的解决方法
  6. 2021年4月总结5月计划
  7. 20190925-ORA-00600错误及被注入的软件
  8. 解决org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags
  9. MoveIt的使用(二)机械臂URDF在ROS中MoveIt的配置和使用
  10. 开源操作系统社区OpenCloudOS正式成立