centos7下部署FastDFS分布式文件系统
- 前言
- 项目中用到文件服务器,有朋友推荐用FastDFS,所以就了解学习了一番,感觉确实颇为强大,在此再次感谢淘宝资深架构师余庆大神开源了如此优秀的轻量级分布式文件系统,本篇文章就记录一下FastDFS的最新版本5..5在CentOS7中的安装与配置。
- 简介
- 首先简单了解一下基础概念,FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。FastDFS的系统结构图如下:
- FastDFS的两个核心概念分别是:
- Tracker(跟踪器)
- Storage(存储节点)
- Tracker主要做调度工作,相当于mvc中的controller的角色,在访问上起负载均衡的作用。跟踪器和存储节点都可以由一台或多台服务器构成,跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务,其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。Tracker负责管理所有的Storage和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表,Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
- Storage采用了分卷[Volume](或分组[group])的组织方式,存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。一个卷[Volume](组[group])可以由一台或多台存储服务器组成,一个组中的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。更多原理性的内容可以参考这篇文章,介绍的很详细:分布式文件系统FastDFS设计原理
- 接下来就具体看一下FastDFS的整个下载安装过程~
- 下载
- 目前作者最后一次releases的时间的14年11月22号,对应的最新版本是5.0.5,直接在余大的GitHub上下载就可以了:
- https://github.com/happyfish100/fastdfs/releases
- 由于FastDFS是纯C语言实现,只支持Linux、FreeBSD等UNIX系统,所以我们直接下载tar.gz的压缩包,同时FastDFS 5.0.5同以前版本相比将公共的一些函数等单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon,在余大的GitHub首页可以看到:
- 下载完成后将下面这两个文件上传至CentOS服务器,然后就可以开始解压安装了:
- 安装
- libfastcommon
- 首先第一步是安装libfastcommon,我这里将libfastcommon上传到的/usr/local目录下,直接解压:
- unzip libfastcommon-master.zip
- 解压成功后进入目录看一下压缩包的文件:
- 如果没有装解压工具unzip可以通过以下yum命令进行安装后再解压:
- yum -y install unzip zip
- 解压完成后就可以进行编译安装了,分别执行./make.sh和./make.sh install,由于是新安装的系统有可能会提示找不到gcc命令:
- 所以我们先要安装gcc编译器:
- yum -y install gcc-c++
- 看到如下信息说明gcc已经安装成功:
- 此时再次执行./make.sh命令进行编译,没有error信息的话就说明编译成功了,最后再执行./make.sh install进行安装,看到类似如下提示信息就说明libfastcommon已安装成功(画风突变,黑底白字看的眼睛累T_T,所以换成白底黑字了):
- 至此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 -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
- ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
- 设置完毕后就可以开始安装fastdfs了。
- FastDFS
- 第一步依然是解压:
- tar -zxvf fastdfs-5.05.tar.gz
- 解压完成后进入目录fastdfs-5.05,依次执行./make.sh和./make.sh install:
- ./make.sh
- ./make.sh install
- 没有报错就说明安装成功了,在log中我们可以发现安装路径:
- 没错,正是安装到了/etc/fdfs中,我们看一下该目录下的文件:
- 安装成功后就会生成如上的3个.sample文件(示例配置文件),我们再分别拷贝出3个后面用的正式的配置文件:
- cp client.conf.sample client.conf
- cp storage.conf.sample storage.conf
- cp tracker.conf.sample tracker.conf
- 之后再查看一下/etc/fdfs的文件目录:
- 至此FastDFS已经安装完毕,接下来的工作就是依次配置Tracker和Storage了。
- Tracker
- 在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:
- mkdir /opt/fastdfs_tracker
- 接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:
- disabled=false #启用配置文件(默认启用)
- port= #设置tracker的端口号,通常采用22122这个默认端口
- base_path=/opt/fastdfs_tracker #设置tracker的数据文件和日志目录
- http.server_port= #设置http端口号,默认为8080
- 配置完成后就可以启动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
- 最后通过命令启动Tracker服务器:
- service fdfs_trackerd start
- 命令执行后可以看到以下提示:
- 如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
- netstat -unltp|grep fdfs
- 可以看到tracker服务运行的22122端口正常被监听:
- 确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:
- service fdfs_trackerd start
- Tracker至此就配置好了,接下来就可以配置FastDFS的另一核心——Storage。
- Storage
- 同理,步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
- mkdir /opt/fastdfs_storage
- mkdir /opt/fastdfs_storage_data
- 接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:
- disabled=false #启用配置文件(默认启用)
- group_name=group1 #组名,根据实际情况修改
- port= #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
- base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
- store_path_count= #存储路径个数,需要和store_path个数匹配
- store_path0=/opt/fastdfs_storage_data #实际文件存储路径
- tracker_server=192.168.111.11: #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
- http.server_port= #设置 http 端口号
- 配置完成后同样要为Storage服务器的启动脚本设置软引用:
- ln -s /usr/bin/fdfs_storaged /usr/local/bin
- 接下来就可以启动Storage服务了:
- service fdfs_storaged start
- 命令执行后可以看到以下提示:
- 同理,如果启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录,端口23000也应被正常监听,还有一点就是文件存储路径下会生成多级存储目录,那么接下来看看是否启动成功了:
- 可以看到/opt/fastdfs_storage/data目录下生成好的pid文件和dat文件,那么再看一下实际文件存储路径下是否有创建好的多级目录呢:
- 没有任何问题,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:
- 可以看到此时已经正常监听tracker的22122端口和storage的23000端口,至此storage服务器就已经配置完成,确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:
- /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
- [root@localhost /]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
- [-- ::] DEBUG - base_path=/opt/fastdfs_storage, connect_timeout=, network_timeout=, tracker_server_count=, anti_steal_token=, anti_steal_secret_key length=, use_connection_pool=, g_connection_pool_max_idle_time=3600s, use_storage_id=, storage server id count:
- server_count=, server_index=
- tracker server is 192.168.111.11:
- group count:
- Group :
- group name = group1
- disk total space = MB
- disk free space = MB
- trunk free space = MB
- storage server count =
- active server count =
- storage server port =
- storage HTTP port =
- store path count =
- subdir count per path =
- current write server index =
- current trunk file id =
- Storage :
- id = 192.168.111.11
- ip_addr = 192.168.111.11 ACTIVE
- http domain =
- version = 5.05
- join time = -- ::
- up time = -- ::
- total storage = MB
- free storage = MB
- upload priority =
- store_path_count =
- subdir_count_per_path =
- storage_port =
- storage_http_port =
- current_write_path =
- source storage id =
- if_trunk_server =
- connection.alloc_count =
- connection.current_count =
- connection.max_count =
- total_upload_count =
- success_upload_count =
- total_append_count =
- success_append_count =
- total_modify_count =
- success_modify_count =
- total_truncate_count =
- success_truncate_count =
- total_set_meta_count =
- success_set_meta_count =
- total_delete_count =
- success_delete_count =
- total_download_count =
- success_download_count =
- total_get_meta_count =
- success_get_meta_count =
- total_create_link_count =
- success_create_link_count =
- total_delete_link_count =
- success_delete_link_count =
- total_upload_bytes =
- success_upload_bytes =
- total_append_bytes =
- success_append_bytes =
- total_modify_bytes =
- success_modify_bytes =
- stotal_download_bytes =
- success_download_bytes =
- total_sync_in_bytes =
- success_sync_in_bytes =
- total_sync_out_bytes =
- success_sync_out_bytes =
- total_file_open_count =
- success_file_open_count =
- total_file_read_count =
- success_file_read_count =
- total_file_write_count =
- success_file_write_count =
- last_heart_beat_time = -- ::
- last_source_update = -- ::
- last_sync_update = -- ::
- last_synced_timestamp = -- ::
- 如上所示,看到192.168.111. ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器,同理别忘了添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:
- service fdfs_storage start
- 至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
- 初步测试
- 测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:
- base_path=/opt/fastdfs_tracker #tracker服务器文件路径
- tracker_server=192.168.111.11: #tracker服务器IP地址和端口号
- http.tracker_server_port= # tracker 服务器的 http 端口号,必须和tracker的设置对应起来
- 配置完成后就可以模拟文件上传了,先给/opt目录下放一张图片(暴雪爸爸的LOGO):
- 然后通过执行客户端上传命令尝试上传:
- /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/BLIZZARD.jpg
- 运行后可以发现给我们返回了一个路径:
- 这就表示我们的文件已经上传成功了,当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成,如下图:
- 同时在之前配置的storage服务器的实际文件存储路径中也可以根据返回的路径找到实际文件:
- 接下来尝试用浏览器发送HTTP请求访问一下文件:
- 此时发现并不能访问,因为FastDFS目前已不支持http协议,我们在FastDFS 4.0.5的版本更新日志中可以看到这样一条信息:
- 4.0.5版本开始移除了自带的HTTP支持(因为之前自带的HTTP服务较为简单,无法提供负载均衡等高性能服务),所以余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,接下来就具体记录一下fastdfs-nginx-module的安装配置过程。
- fastdfs-nginx-module
- 在余大的GitHub上下载好fastdfs-nginx-module上传到我们的CentOS中就可以开始安装了,在安装nginx之前需要先安装一些模块依赖的lib库,我在以前写的文章有做详细介绍(Linux CentOS & Tengine(Nginx)安装与配置),直接贴出安装代码:
- yum -y install pcre pcre-devel
- yum -y install zlib zlib-devel
- yum -y install openssl openssl-devel
- 依次装好这些依赖之后就可以开始安装nginx了。
- storage nginx
- 首先是为storage服务器安装nginx,首先将nginx和fastdfs-nginx-module的安装包上传至CentOS:
- 首先分别进行解压:
- tar -zxvf nginx-1.8..tar.gz
- unzip fastdfs-nginx-module-master.zip
- 解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
- ./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-master/src
注意:nginx的v5.11前的版本要下载以前的module(如https://github.com/happyfish100/fastdfs-nginx-module/tree/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1),不然安装失败- 配置成功后会看到如下信息:
- 紧接着就可以进行编译安装了,依次执行以下命令:
- make
- make install
- 安装完成后,我们在我们指定的目录/usr/local/nginx中就可以看到nginx的安装目录了:
- 接下来要修改一下nginx的配置文件,进入conf目录并打开nginx.conf文件加入以下配置:
- listen ;
- location ~/group1/M00 {
- root /opt/fastdfs_storage_data/data;
- ngx_fastdfs_module;
- }
- 然后进入FastDFS的安装目录/usr/local/fastdfs-.05目录下的conf目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:
- cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
- cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/
- 接下来还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
- cp -r /usr/local/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
- 看一下/etc/fdfs目录下当前所有的配置文件:
- 没什么问题,接下来就需要编辑刚拷贝的这个mod_fastdfs.conf文件了,打开mod_fastdfs.conf并按顺序依次编译以下内容:
- base_path=/opt/fastdfs_storage #保存日志目录
- tracker_server=192.168.111.11: #tracker服务器的IP地址以及端口号
- storage_server_port= #storage服务器的端口号
- url_have_group_name = true #文件 url 中是否有 group 名
- store_path0=/opt/fastdfs_storage_data # 存储路径
- group_count = #设置组的个数,事实上这次只使用了group1
- 设置了group_count = ,接下来就需要在文件尾部追加这3个group setting:
- [group1]
- group_name=group1
- storage_server_port=
- store_path_count=
- store_path0=/opt/fastdfs_storage_data
- [group2]
- group_name=group2
- storage_server_port=
- store_path_count=
- store_path0=/opt/fastdfs_storage_data
- [group3]
- group_name=group3
- storage_server_port=
- store_path_count=
- store_path0=/opt/fastdfs_storage_data
- 接下来还需要建立 M00 至存储目录的符号连接:
- ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
- 最后启动nginx:
- /usr/local/nginx/sbin/nginx
- 显示如下信息说明nginx已启动成功:
- 通过浏览器也可以看到nginx的主页:
- storage服务器的nginx就已经安装完毕,接下来看一下tracker服务器的nginx安装。
- tracker nginx
- 同理,再装一个nginx,目录命名为nginx2,安装路径依旧放在/usr/local下,由于和之前一样,此处就不再做详细解释:
- mkdir nginx2
- cd nginx-1.8./
- ./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx-module-master/src
- make
- make install
- 接下来依然是修改nginx2的配置文件,进入conf目录并打开nginx.conf文件加入以下配置,storage的nginx无需修改listen端口,即默认的80端口,并将upstream指向tracker的nginx地址:
- upstream fdfs_group1 {
- server 127.0.0.1:;
- }
- location /group1/M00 {
- proxy_pass http://fdfs_group1;
- }
- 接下来启动nginx2:
- /usr/local/nginx2/sbin/nginx
- 此时访问nginx2的主页,由于没有修改端口,直接访问ip地址即可:
- 最后一步就是需要修改/etc/fdfs目录下的client.conf文件,打开该文件并加入以下配置:
- base_path=/data/fastdfs_storage #日志存放路径
- tracker_server=192.168.116.145: #tracker 服务器 IP 地址和端口号
- http.tracker_server_port= # tracker 服务器的 http 端口号,必须和tracker的设置对应起来
- 至此关于fastdfs就已经全部配置完毕了,再一次进行测试看看是否能正常上传文件并通过http访问文件。
- HTTP测试
- 再给/opt目录下上传一张暴雪爸爸的LOGO图:
- 通过客户端命令测试上传:
- 依旧上传成功,接下来的关键就是通过HTTP测试文件访问,打开浏览器输入ip地址+文件名看看是否能正常访问该图片:
- 一切正常~ 至此关于FastDFS在CentOS 7下的部署测试就已经全部完成了。
- 总结
- 本篇文章记录了开源分布式文件系统FastDFS在Linux CentOS 7中安装部署以及测试的全过程,The End。
转自:http://www.linuxidc.com/Linux/2016-09/135537.htm
centos7下部署FastDFS分布式文件系统的更多相关文章
- 关于Linux单机、集群部署FastDFS分布式文件系统的步骤。
集群部署:2台tarcker服务器,2台storage服务器. 192.168.201.86 ---------(trackerd+storage+nginx) 192.168.201.87 ...
- FastDFS 分布式文件系统部署实战及基本使用
FastDFS 分布式文件系统部署实战及基本使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. FastDFS是一个开源的高性能分布式文件系统.它的主要功能包括:文件存储,文件同步 ...
- CentOS7 安装FastDFS分布式文件系统
CentOS7 安装FastDFS分布式文件系统 最近要用到fastDFS,所以自己研究了一下,在搭建FastDFS的过程中遇到过很多的问题,为了能帮忙到以后搭建FastDFS的同学,少走弯路,与大家 ...
- 07.Linux系统-Fastdfs分布式文件系统-互为主从配置搭建部署
Fastdfs分布式文件系统-互为主从配置部署 1.安装基础依赖 yum install -y gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl ...
- FastDFS分布式文件系统
FastDFS分布式文件系统 阅读目录 相关文章 1 分布式文件系统介绍 2 系统架构介绍 3 FastDFS性能方案 4 Linux基本命令操作 5 安装VirtualBox虚拟机并配置Ubuntu ...
- Dubbo入门到精通学习笔记(八):ActiveMQ的安装与使用(单节点)、Redis的安装与使用(单节点)、FastDFS分布式文件系统的安装与使用(单节点)
文章目录 ActiveMQ的安装与使用(单节点) 安装(单节点) 使用 目录结构 edu-common-parent edu-demo-mqproducer edu-demo-mqconsumer 测 ...
- FastDFS 分布式文件系统的安装与使用(单节点)
FastDFS 分布式文件系统的安装与使用(单节点) 跟踪服务器:192.168.4.121 (edu-dfs-tracker-01) 存储服务器:192.168.4.125 (edu-dfs-sto ...
- django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除
运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下: fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.16 ...
- FastDFS分布式⽂文件系统
FastDFS分布式⽂文件系统 1. 什么是FastDFS FastDFS 是⽤用 c 语⾔言编写的⼀一款开源的分布式⽂文件系统.FastDFS 为互联⽹网量量身定制, 充分考虑了了冗余备份.负载均 ...
随机推荐
- JavaScript 事件对内存和性能的影响
程序代码: <%-- Created by IntelliJ IDEA. User: 乔克叔叔 Date: 2017/12/26 Time: 16:45 To change this templ ...
- 获取DATA的数据
num=DataTable("参数名",dtGlobalSheet) 'systemutil.Run "C:\Program Files (x86)\HP\QuickTe ...
- js js键盘各键对应的代码 ---转
0x1 鼠标左键\r 0x2 鼠标右键\r 0x3 CANCEL 键\r 0x4 鼠标中键\r 0x8 BACKSPACE 键\r 0x9 TAB 键\r 0xC CLEAR 键\r 0xD ENTE ...
- rpc框架--grpc-java
rpc框架--grpc-java grpc源码:https://github.com/grpc/grpc-java/releases/tag/v1.0.0 gradle下载:https://gradl ...
- [Tailwind] Get started with Tailwindcss
In this lesson, we learn how to generate CSS utility classes from Tailwind's JavaScript config file. ...
- Python学习笔记-小记
1.字符串string 推断一个字符(char)是数字还是字母 str.isalpha() #推断是否为字母 str.isdigit() #推断是否为数字 推断一个字符串是否为空 if not str ...
- HDU 2838 (树状数组求逆序数)
题意: 给你N个排列不规则的数(1~N),任务是把它从小到大排好,每次仅仅能交换相邻两个数,交换一次的代价为两数之和.求最小代价 思路:对于当前数X.我们如果知道前面比它大的数有多少,如果为K,那么有 ...
- IntelliJ IDEA 10 配置 Tomcat7
http://blog.csdn.net/neutrojan/article/details/8064145
- (素数求解)I - Dirichlet's Theorem on Arithmetic Progressions(1.5.5)
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit cid=1006#sta ...
- HDFS 文件格式——SequenceFile RCFile
 HDFS块内行存储的例子  HDFS块内列存储的例子  HDFS块内RCFile方式存储的例子