fastdfs分布式文件系统部署

摘要:
Fastdfs不仅可以存储图片,还可以存储其他非结构化数据。它的特点是可以存储大量的中小型文件,性能和容量不会成为瓶颈。Fastdfs架构Fastdfs由以下两个组件组成:跟踪器节点:存储数据的元数据节点。此节点存储所有数据的元数据,如数据路径、节省时间和其他信息。Github克隆源代码包。因为fastdfs依赖于libevent,所以需要首先安装libevent。
前言

传统web站点部署大部分都是基于动静分离的方式,静态图片存放于一台nfs存储。但是这种架构有一个问题就是nfs存储是单点,而且如果图片量过大的时候,则nfs会成为性能短板。基于此可以采用分布式存储的替代方案来替代nfs。
fastdfs不但可以存储图片,还可以存储其他非结构化数据,其特性是可以存放海量的中小容量文件,而且性能和容量也不会成为瓶颈。

fastdfs架构

fastdfs基于如下两个组件组成:

  • tracker节点:存储数据的元数据节点,此节点存放的是所有数据的元数据,如数据路径,保存时间等信息。其信息是storage节点定时上传到tracker节点的。
  • storage节点:用于存放数据,storage节点的特点是两个或多个节点为一组构成一个集群,类似于镜像集群,数据只存放于两台上任意一台,而另一台则自动从另一台同步数据,保证数据为双份或多份。
    架构图:
    fastdfs分布式文件系统部署第1张
fastdfs访问步骤

fastdfs分布式文件系统部署第2张
上传文件步骤

  1. 客户端上传文件请求,请求到到tracker节点;
  2. tracker节点基于内部算法选择合适的storage节点发送给客户端;
  3. 客户端访问指定的storage节点,然后保存到指定storage上;
    访问文件步骤
  4. 客户端发起请求到tracker节点;
  5. tracker节点基于请求文件路径可以得出文件存放在哪个storage节点上,因为请求文件名是包含路由信息的;
  6. tracker节点返回storage节点信息给client,client访问storage节点拿到数据;
实验配置

此处采用4台服务器进行配置,一台既为tracker节点,也为storage节点,其余3台都为storage节点。
fastdfs分布式文件系统部署第3张

下载源码包制作成rpm包
安装的话可以通过编译安装,不过此处因为要安装4台服务器,所以我从github克隆下来源码制作成源码包进行分发安装,提高效率。

  1. github克隆源码包,因为fastdfs依赖于libevent,所以需要首先安装libevent。
git clone https://github.com/happyfish100/libfastcommon.git
git clone https://github.com/happyfish100/fastdfs.git
  1. 修改下载先来的源码包目录名,加上版本号,版本号可以从目录内的spec文件内查看到,并且制作成.tar.gz格式的包
mv libfastcommon libfastcommon-1.0.36
tar zcf libfastcommon libfastcommon-1.0.36.tar.gz libfastcommon libfastcommon-1.0.36/*
mv fastdfs fastdfs fastdfs fastdfs-5.0.11
tar zcf fastdfs-5.0.11.tar.gz fastdfs-5.0.11/*
  1. 安装development tools编译包,然后创建rpmbuild目录,并把相应tar.gz包和spec文件拷贝到相应目录进行rpm包制作
mkdir /root/rpmbuild/{SOURCES,SPECS}
mv libfastcommon libfastcommon-1.0.36.tar.gz /root/rpmbuild/SOURCES/
mv /root/libfastcommon-1.0.36/libfastcommon.spec /root/rpmbuild/SPECS/
mv fastdfs-5.0.11.tar.gz  /root/rpmbuild/SOURCES/
mv /root/fastdfs-5.0.11/fastdfs.spec /rpm/rpmbuild/SPECS/
  1. 进入/root/rpmbuild/SPECS/目录,进行rpm包制作
rpmbuild -bb libfastcommon.spec
rpmbuild -bb fastdfs.spec
  1. 制作完成之后会在rpmbuild目录下生成一些目录,如下:
    fastdfs分布式文件系统部署第4张
    其中RPMS目录为制作好的源码包
    fastdfs分布式文件系统部署第5张

  2. 先安装libfastcommon,因为fastdfs依赖它,然后再安装fastdfs即可,然后拷贝到其他服务器进行安装。

配置tracker节点
安装完成之后会在/etc目录下生成fdfs目录,其中文件如下,其中为各种配置文件:
fastdfs分布式文件系统部署第6张
配置tracker.conf

base_path=/data/fastdfs    #修改工作路径为自己创建路径

port=22122    #监听端口为221222端口#

# the method of selecting group to upload files    #指定文件上传方式时上传到哪个组#
# 0: round robin    #轮询选择#
# 1: specify group    #指定组#
# 2: load balance, select the max free space group to upload file    #根据负载,哪个组剩余空间最大上传到哪个组#
store_lookup=2

# which group to upload file    #如果指定组,此处指定上传到哪个组#
# when store_lookup set to 1, must set store_group to the group name
store_group=group2

# which storage server to upload file    #上传到组内哪个服务器#
# 0: round robin (default)    #轮询#
# 1: the first server order by ip address    #ip小的服务器#
# 2: the first server order by priority (the minimal)    #根据服务器优先级#
# Note: if use_trunk_file set to true, must set store_server to 1 or 2
store_server=0

# which path(means disk or mount point) of the storage server to upload file    #上传到服务器哪个硬盘#
# 0: round robin    #轮询#
# 2: load balance, select the max free space path to upload file    #根据剩余空间#
store_path=0

# which storage server to download file    #从组内哪个服务器请求数据#
# 0: round robin (default)    #轮询#
# 1: the source storage server which the current file uploaded to    #最开始上传到哪个服务器#
download_server=0

其他参数无需过多修改。
配置storage节点

  1. 四台服务器都需要配置storage节点,修改/etc/fdfs/storage.conf文件
group_name=group1    #指定组名,此处四台服务器,两台为group1,两台为group2,组成镜像组#
port=23000    #指定工作端口#
store_path_count=1    #指定数据存储路径,如果有多个则按照实际数量写,此处只有一个,则写1#
store_path0=/data/storage    #数据存储路径#
tracker_server=192.168.11.200:22122    #tracker节点ip和端口#
upload_priority=10    #数据上传优先级#
  1. 配置完成启动服务,tracker服务器需要启动两个服务,storage服务器只需要启动storage服务:
service fdfs_storaged start
service fdfs_trackerd start
  1. storage服务器启动之后会在指定存储目录创建多级文件夹,上传的数据就是根据文件名hash值选择相应文件夹进行存放的,如下:
    fastdfs分布式文件系统部署第7张

上传文件进行测试

  1. 上传文件需要配置一个节点为client节点,此处配置tracker节点也为client节点,修改/etc/fdfs/client.conf配置文件,只需修改如下两项即可:
base_path=/data/fastdfs    #client日志存储路径#
tracker_server=192.168.11.200:22122    #tracker节点ip和端口#
  1. 上传文件,下图表示上传成功,并显示上传之后的文件名:
    fastdfs分布式文件系统部署第8张
  2. 可以通过fdfs_file_info命令查看文件存储在哪里,下图表示存储在ip为203的节点上:
    fastdfs分布式文件系统部署第9张
  3. 因为203和204服务器互为镜像,所以204节点此时在相同的目录下也会存在此文件。
编译安装nginx,通过http发布文件
  1. 在文件存在相应服务器编译安装nginx,需要给nginx打上fastdfs-nginx-module的补丁;
  2. 下载fastdfs-nginx-module,从https://github.com/happyfish100/fastdfs-nginx-module.git通过git clone即可克隆下来;
  3. 下载nginx源码包进行编译
./configure   --prefix=/usr   --sbin-path=/usr/sbin/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_flv_module   --with-http_stub_status_module   --with-http_gzip_static_module   --http-client-body-temp-path=/var/tmp/nginx/client/   --http-proxy-temp-path=/var/tmp/nginx/proxy/   --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/   --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi   --http-scgi-temp-path=/var/tmp/nginx/scgi   --with-pcre   --with-debug   --add-module=../fastdfs-nginx-module/src/
  1. 在/usr/lib/systemd/system/路径下创建nginx.service文件
[Unit]
Description=nginx server
after=network.target remote-fs.target nss-lookup.target
[service]
type=forking
pidfile=/run/nginx.pid
execstartpre=/usr/bin/rm -rf /run/nginx.pid
execstartpre=/usr/sbin/nginx -t
execstart=/usr/bin/nginx
execreload=/bin/kill -s HUP $MAINPID
killsignal=SIGQUIT
timeoutstopsec=5
killmode=process
privatetmp=true
[install]
wantedby=multi-user.target
  1. 把fastdfs-nginx-module中的mod_fastdfs.conf拷贝到/etc/fdfs/路径下,并修改配置
base_path=/data/fastdfs    #指定工作目录#
tracker_server=192.168.11.200:22122    #指定tracker的ip地址#
group_name=group2    #指定当前服务器所属组#
url_have_group_name = false    #此项如果为true,则访问文件需要在前面添加group信息,否则直接写M00即可#
store_path0=/data/storage    #指定存储路径#
log_filename=/data/fastdfs/logs/mod_fastdfs.log    #指定log日志文件路径#
  1. 编辑/etc/nginx/nginx.conf文件,添加如下内容
location /M00 {
            alias /data/storage/data;
            ngx_fastdfs_module;
}
  1. 启动nginx,然后访问指定文件,如group2/M00/00/00/wKgLy1ltrLCAZ4TOAA6q2wjnW8s371.jpg文件,可以看到访问成功。
    fastdfs分布式文件系统部署第10张
总结

现在文件只是能够分布式上传到不同的服务器节点了,但是如果要访问的话还需要在本地安装nginx,不过nginx需要打fastdfs-nginx-module补丁才能使用。编译成功之后本地配置nginx的反向代理到指定的工作目录即可通过nginx访问到指定资源。不过生产环境中fastdfs中文件的上传下载都是通过前端的程序来自动写入和请求的。

免责声明:文章转载自《fastdfs分布式文件系统部署》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇zookeeper适用场景:配置文件同步HTTP断点续传原理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

细说SVN集中式版本控制器

svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具。在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行。  如图:多人开发同一个php程序文件(重叠部分代码),在做commit提交给服务器的时候,要造成文件彼此覆盖的问题。 svn作用之一:解决文件覆盖,协作多人开发同...

SQL 错误代码汇总

0 操作成功完成。 1 功能错误。 2 系统找不到指定的文件。 3 系统找不到指定的路径。 4 系统无法打开文件。 5 拒绝访问。 6 句柄无效。 7 存储控制块被损坏。 8 存储空间不足,无法处理此命令。 9 存储控制块地址无效。 10 环境错误。 11 试图加载格式错误的程序。 12 访问码无效。 13 数据无效。 14...

Linux删除文件过程解析

目录 Linux删除文件过程解析 1. 概述 2. 源码分析 3. rm对I/O影响 参考文献 Linux删除文件过程解析 1. 概述 当我们执行rm命令删除一个文件的时候,在操作系统底层究竟会发生些什么事情呢,带着这个疑问,我们在Linux-3.10.104内核下对ext4文件系统下的rm操作进行分析。rm命令本身比较简单,但其在内核底层...

linux-基础命令

目录 文件管理 文件查看cat 更改文件权限chmod 改属主属组chown 对比文件diff 文件查看head/tail/more/less实时监控日志 文件移动更名mv 文件删除rm 文件分割split 新建文件touch 文件预设权限umask 文件查找which 文件复制cp 文件查找whereis 远程文件复制scp 文档编辑...

【SQL注入】之SQLMAP工具的使用

(本文仅为平时学习记录,若有错误请大佬指出,如果本文能帮到你那我也是很开心啦) 一、介绍 1.SQL注入工具:明小子、啊D、罗卜头、穿山甲、SQLMAP等等 2.SQLMAP:使用python开发,开源自动化注入利用工具,支持12种数据库 ,在/plugins/dbms中可以看到支持的数据库种类,在所有注入利用工具中它是最好用的!!! 3.支持的注入类型:...

FastDFS简介和安装

    FastDFS是一个轻量级的开源分布式文件系统 FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡 FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储 支持存储服务器在线扩容 支持相同内容的文件只保存一份,节约磁盘空间 FastDFS只能通过Client API访问,不支持POSIX访问方式;...