惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - 山峰旺旺

博文阅读密码验证 - 博客园 2019年春节第一天上班 博文阅读密码验证 - 博客园 CentOS7 下docker 部署 Asp.Net Core Linux (CentOS7.0)安装Asp.Net Core项目总结 Linux 下 安装 .Net Core(CentOS 7) Spring框架IOC容器和AOP解析(转) 文本相似度simhash算法 Intellij Idea 2017.3版本MAVEN项目打JAR包 java 敏感词过滤 (DFA算法)(转) intellij idea 修改背景保护色&&修改字体&&快捷键大全(转) C#队列Queue实现一个简单的电商网站秒杀程序 2018年目标和愿景 CDN原理(转,学习用) 面试理论整理 C#中的where泛型约束中的new()使用(转) C# unsafe(fixed) 介于 managed code & unmanaged code之间的特性(转) C#中重写(override)和覆盖(new)的区别 (备注:转,留自己用) 2015年总结
FastDFS搭建文件系统(单机版)
山峰旺旺 · 2019-01-31 · via 博客园 - 山峰旺旺

1、FastDFS介绍

FastDFS开源地址:https://github.com/happyfish100

1.1、简介

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

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

Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

1.2、FastDFS的存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

1.3、FastDFS的上传过程

FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。在分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。

1.4、FastDFS的文件同步

写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracker在选择读storage的时候会以同步进度作为参考。

1.5、FastDFS的文件下载

FastDFS的安装

2.1、安装准备

操作环境:CentOS7 X64,以下操作都是单机环境。

把所有的安装包上传到/usr/local/src/下,解压到当前目录(利用Xshell工具,rz命令):

2.2、安装 libfastcommon-master

Libfastcommon- master是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。

进入软件安装包目录

cd /usr/local/src

如果没有装解压工具unzip可以通过以下yum命令进行安装后再解压(ctrl+c  强制退出):

yum -y install unzip zip

直接解压:

unzip libfastcommon-master.zip

解压成功后进入目录看一下压缩包的文件: 

cd libfastcommon-master

解压完成后就可以进行编译安装了

分别执行:

./make.sh

./make.sh install

由于是新安装的系统有可能会提示找不到gcc命令(未报错则跳过): 

看到类似如下提示信息就说明libfastcommon已安装成功

至此libfastcommon就已经安装成功了,但注意一下上图中红色框标注的内容,libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以此处需要重新设置软链接(类似于Windows的快捷方式):

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so                  --(ln: 无法创建符号链接"/usr/lib/libfastcommon.so": 文件已存在)

ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

设置完毕后就可以开始安装fastdfs了。

2.3、安装 FastDFS

第一步解压(已解压)

进入软件安装包目录

cd /usr/local/src

tar –zxvf fastdfs-5.11.tar.gz

cd fastdfs-5.11

LL

解压完成后进入目录fastdfs-5.11,依次编译安装:

./make.sh

./make.sh install

没有报错就说明安装成功了,在log中我们可以发现安装路径: 

没错,正是安装到了/etc/fdfs中,我们看一下该目录下的文件: 

cd /etc/fdfs

上图,安装成功后就会生成如上的3个.sample文件(示例配置文件),我们再分别拷贝出3个后面用的正式的配置文件:

cp client.conf.sample client.conf

cp storage.conf.sample storage.conf

cp tracker.conf.sample tracker.conf

 

至此FastDFS已经安装完毕,接下来的工作就是依次配置Tracker和Storage了。

2.4、配置FastDFS跟踪器(Tracker)

在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:

mkdir /opt/fastdfs_tracker
cd /etc/fdfs

vim tracker.conf

编辑tracker.conf ,标红的需要修改下,其它的默认即可。

# the base path to store data and log files 

base_path=/opt/fastdfs_tracker

# HTTP port on this tracker server HTTP 服务端口

http.server_port=80

scp tracker.conf 192.168.96.140:/etc/fdfs/

配置完成后就可以启动Tracker服务器了,但首先依然要为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:

ln -s /usr/bin/fdfs_trackerd /usr/local/bin

ln -s /usr/bin/stop.sh /usr/local/bin

ln -s /usr/bin/restart.sh /usr/local/bin

防火墙中打开跟踪端口(默认的22122等)

vim /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22122 -j ACCEPT

-A INPUT -p tcp -m state --state NEW -m tcp --dport 23000 -j ACCEPT

重启防火墙:

service iptables restart

最后通过命令启动Tracker服务器:

service fdfs_trackerd start

命令执行后可以看到以下提示:

查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

netstat -unltp|grep fdfs

确认tracker正常启动后可以将tracker设置为开机启动

chkconfig fdfs_trackerd on

或者:

vim /etc/rc.d/rc.local

service fdfs_trackerd start

如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录:

cd /opt/fastdfs_tracker

2.5、配置FastDFS跟踪器(Storage)

同理,步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:

mkdir /opt/fastdfs_storage

mkdir /opt/fastdfs_storage_data

接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:

cd /etc/fdfs

--cp storage.conf.sample storage.conf
vim storage.conf

标红的需要修改,其它的默认即可。

disabled=false #启用配置文件(默认启用)

group_name=groupimages1 #组名(注意:区分大小写),根据实际情况修改

port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致

base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录

store_path_count=1 #存储路径个数,需要和store_path个数匹配

store_path0=/opt/fastdfs_storage_data #实际文件存储路径

tracker_server=192.168.174.133:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)

http.server_port=80 #设置 http 端口号

scp storage.conf  192.168.96.134:/etc/fdfs/(注:同一group中的不同storage配置)

设置 Storage 开机启动

chkconfig fdfs_storaged on

或者:
vim /etc/rc.d/rc.local
加入配置:

service fdfs_storaged start

配置完成后同样要为Storage服务器的启动脚本设置软引用:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

接下来就可以启动Storage服务了:

service fdfs_storaged start

命令执行后可以看到以下提示:

查看 Storage 是否成功启动,23000 端口正在被监听,就算 Storage 启动成功。

netstat -unltp|grep fdfs

同理,如果启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看是否启动成功了:

cd /opt/fastdfs_storage

cd /opt/fastdfs_storage_data

查看Storage和Tracker是否在通信:

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

如上所示,看到192.168.174.133 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器,同理别忘了添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:service fdfs_storaged  start     

然后重启service fdfs_storaged start

 两台情况下:

2.6、文件上传测试:

修改 Tracker 服务器中的客户端配置文件 

cd /etc/fdfs

cp client.conf.sample client.conf

vi  client.conf

mkdir /opt/fastdfs_client

编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:

base_path=/opt/fastdfs_client  # Client 的数据和日志目录

tracker_server=192.168.174.133:22122  #tracker服务器IP地址和端口号

http.tracker_server_port=80  # tracker 服务器的 http 端口号,必须和tracker的设置对应起来  默认端口80

集群用到的命令:

scp client.conf 192.168.96.140:/etc/fdfs/

上传测试:

在linux内部执行如下命令上传 dog.jpg 图片

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf   /opt/dog.jpg

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /opt/1.jpg

上传成功后返回文件ID号:group1/M00/00/00/wKhggVwjKcmAQ3JvAAEOZuTbzfE207.jpg

特别注意: http://192.168.174.133/groupimages1/M00/00/00/wKiuhVxRXAiAKmClAABQRxwl8tI698.jpg (不能访问,不支持http)

3、安装Nginx

上面将文件上传成功了,但我们无法下载。因此安装Nginx作为服务器以支持Http方式访问文件。同时,后面安装FastDFS的Nginx模块也需要Nginx环境。

Nginx只需要安装到StorageServer所在的服务器即可,用于访问文件。我这里由于是单机,TrackerServer和StorageServer在一台服务器上。

3.1、安装nginx所需环境  

gcc 安装

# yum install gcc-c++

 PCRE pcre-devel 安装

# yum install -y pcre pcre-devel

zlib 安装

# yum install -y zlib zlib-devel

 OpenSSL 安装

yum install -y openssl openssl-devel

3.2、安装Nginx

进入Nginx安装包目录

cd /usr/local/src/

解压

tar -zxvf nginx-1.15.8.tar.gz

cd nginx-1.15.8

 使用默认配置

./configure

编译、安装

make

make install

启动nginx

cd /usr/local/nginx/sbin/

./nginx

其它命令

./nginx -s stop

./nginx -s quit

./nginx -s reload

设置开机启动

vim /etc/rc.local

添加一行:

/usr/local/nginx/sbin/nginx

查看nginx的版本及模块

/usr/local/nginx/sbin/nginx -V

3.3、访问文件

简单的测试访问文件

修改nginx.conf

vim /usr/local/nginx/conf/nginx.conf

group名称 根据自己设定来设置,假如是 group1

添加如下行,将 /group1/M00 映射到 /opt/fastdfs_storage_data/data

location /group1/M00 {

    alias /opt/fastdfs_storage_data/data;

# 重启nginx
# /usr/local/nginx/sbin/nginx -s reload

在浏览器访问之前上传的图片、成功。

http://192.168.174.133/groupimages1/M00/00/00/wKiuhVxRXAiAKmClAABQRxwl8tI698.jpg

特别注意:

Linux  重启后 ,用命令查看 Tracker  和 Storage  服务是否启动成功“

命令如下: /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

并且可能要重启一下 防火墙设置;:

1.service iptables restart

2. 启动nginx

cd /usr/local/nginx/sbin/

./nginx

4、FastDFS 配置 fasdfs和Nginx重定向文件获取模块

4.1 fastdfs-nginx-module 模块说明

  FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。

  假设 Tracker 服务器将文件上传到了 192.168.96.128,上传成功后,文件 ID已经返回给客户端。

  此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.96.129,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.96.129 上取文件,就会出现文件无法访问的错误。

  而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

4.2 下载 fastdfs-nginx-module、解压(开始已经下载好 直接解压)

cd /usr/local/src/

unzip fastdfs-nginx-module-master.zip

4.3配置Nginx

在nginx中添加模块

先停掉nginx服务
/usr/local/nginx/sbin/nginx -s stop

cd nginx-1.15.8

添加模块

 ./configure --add-module=../fastdfs-nginx-module-master/src

重新编译、安装

make

make install

查看Nginx的模块

/usr/local/nginx/sbin/nginx -V

有下面这个就说明添加模块成功:

4.4复制fastdfs-nginx-module-master中的的配置文件到/etc/fdf目录, 并修改

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

cd /etc/fdfs/

vim mod_fastdfs.conf

修改如下配置,其它默认

# Tracker Server

tracker_server=192.168.174.133:22122
# StorageServer 默认端口

storage_server_port=23000

group_name=groupimages1

# 如果文件ID的uri中包含/group**,则要设置为true

url_have_group_name = true

# Storage 配置的store_path0路径,必须和storage.conf中的一致

store_path0=/opt/fastdfs_storage_data

scp  mod_fastdfs.conf 192.168.96.134:/etc/fdfs/

4.5复制 FastDFS 的部分配置文件到/etc/fdfs 目录

cd /usr/local/src/fastdfs-5.11/conf

cp anti-steal.jpg  http.conf  mime.types  /etc/fdfs/

4.6配置nginx,修改nginx.conf

 vim /usr/local/nginx/conf/nginx.conf

修改配置,其它的默认

在80端口下添加fastdfs-nginx模块(注释掉之前Nginx的配置)

location ~/group([0-9])/M00 {

    ngx_fastdfs_module;

}

注意:

listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

location 的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。

4.7启动nginx

/usr/local/nginx/sbin/nginx

如下所示则配置成功

4.8在地址栏访问

能下载文件就算安装成功。注意和第三点中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件,防止出现同一组中的storage 同步文件(图片)延迟造成请求访问不到的情况。

http://192.168.174.133/groupimages1/M00/00/00/wKiuhVxRXAiAKmClAABQRxwl8tI698.jpg

5.注意事项 遇到的Error解决方案:

fatal error: common_define.h: No such file or directory:

在CentOS7 Linux安装FastDFS报错

/usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory

主要发生在以下步骤中:

1 配置,并加载fastdfs-nginx-module模块:

Cd 到 nginx-1.15.8

 ./configure --add-module=../fastdfs-nginx-module-master/src2  编译安装:

make  (此处会发生报错)

make install

解决方案:

修改fastdfs-nginx-module-1.20/src/config文件,在从1处重新配置

ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

6.参考博文:

单机模式:

参考博文:

http://www.cnblogs.com/beyondcj/p/7160090.html

集群模式:

参考博文:

https://blog.csdn.net/u012453843/article/details/68957209

https://blog.csdn.net/u012453843/article/details/69055570

https://blog.csdn.net/u012453843/article/details/69172423