fastDFS安装使用
前言:
项目中有需要上传文件或者图片功能的情况,应该是经常碰到的事情,每个公司可能都有不一样的处理方案,有的公司可能选择七牛云做图片服务器,有的可能选择搭建ftp+nginx做简单图片处理,或者搭建FastDFS+nginx来存储和管理图片。这篇博客主要讲解下如何在云服务器上搭建FastDFS和springboot如何整合FastDFS客户端上传图片。
正文:
一、FastDFS的介绍
1.1 什么是FastDFS
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
1.2 FastDFS的架构
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
服务端两个角色:
Tracker:管理集群,tracker也可以实现集群。每个tracker节点地位平等。
收集Storage集群的状态。
Storage:实际保存文件。
Storage分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员,组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念 。
1.3 文件上传的流程
客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息包括:组名,虚拟磁盘路径,数据两级目录,文件名。
组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。
数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。
文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。
1.4 文件下载
二、FastDFS的安装
2.1 准备工作:
2.1 .1 安装前我们需要准备的东西
下载的地址:https://github.com/happyfish100
下面是我准备好的源码包和nginx的安装包,总共5个包
一定看好上面的版本,如果版本和我不一致,安装也许会出现其他的问题。
2.1.2 把这些安装包通过xftp上传到服务器你想安装的目录下
2.2 开始安装:
2.2.1 安装libfastcommon
解压libfastcommon-master.zip安装包
unzip libfastcommon-master.zip
如果unzip没有安装的话,会出现下面的提示
安装下unzip就可以,指令如下
yum -y install unzip zip
解压完后进到解压后的目录
进到解压的libfastcommon-master文件下,然后分别执行./make.sh和./make.sh install(红色箭头指的文件解压后是不存在的,是后续操作生成的)
编译安装完后要注意,libfastcommon默认会被安装到/usr/lib64/libfastcommon.so但是FastDFS的主程序却在/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
------------------------------------------------------到此libfastcommon安装完毕。
2.2.2 安装FastDFS
解压FastDFS安装包
unzip fastdfs-5.11.zip
解压后进到fastdfs-5.11目录下
在fastdfs-5.11目录下执行./make.sh和./make.sh install
如果没有报错那么就成功了。安装log中会提示FastDFS安装到了/etc/fdfs目录下。
成功后会有client.conf.sample、storage.conf.sample、tracker.conf.sampl这个文件,下面截图中多余的文件是后续步骤出现的文件。
我们需要把这三个示例文件复制一份,去掉.sample。
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
----------------------------------------------------到此FastDFS安装结束。
2.2.3 安装tracker
2.2.3.1 创建tracker的工作目录,我的根目录是app,然后依次创建了mainapp/dev/fastdfs/fastdfs_tracker文件夹,根据自己的需求和喜好也可以随意创建,因为这个目录的作用是用来保存tracker的data和log 的。
2.2.3.2 配置tracker
cd /etc/fdfs
vim tracker.conf
打开后重点关注下面4个配置:
1.disabled=false #默认开启 2.port=22122 #默认端口号 3.base_path=/app/mainapp/dev/fastdfs/fastdfs_tracker #上面创建的目录就用在这里 4.http.server_port=6666 #默认端口是8080
2.2.3.3 启动tracker
保存配置后启动tracker,命令如下:
service fdfs_trackerd start
如果不能启动,或提示用systemctl可改用命令:
systemctl start fdfs_trackerd
成功后应该可以看到:
进行刚刚创建的tracker目录,发现目录中多了data和log两个目录
最后我们需要给tracker加入开机启动,先ll下看看对文件有没有执行权限 ll /etc/rc.d/rc.local,下图-rwxr-xr-x表示有执行权限
如果权限是 -rw-r--r--,那需要刷下权限
chmod +x /etc/rc.d/rc.local
修改rc.local文件
vim /etc/rc.d/rc.local
查看一下tracker的端口监听情况
端口22122成功监听。
2.2.4 安装storage
storage的安装与tracker很类似。这里强调下,我这篇博客tracker和storage的我是安装到一台服务器里啦,有的会把tracker和storage安装到不同的服务器里,基本按着步骤操作一波,就会理解啦。
2.2.4.1 为storage配置工作目录
与tracker不同的是,由于storage还需要一个目录用来存储数据,所以需要另外多建了一个fasdfs_storage_data
2.2.4.2 修改storage配置文件
vim /etc/fdfs/storage.conf
1.disabled=false
2.group_name=group1 #组名,根据实际情况修改
3.port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
4.base_path=/usr/yong.cao/dev/fastdfs/fastdfs_storage #设置storage数据文件和日志目录
5.store_path_count=1 #存储路径个数,需要和store_path个数匹配
6.base_path0=/app/mainapp/dev/fastdfs/fastdfs_storage_data #实际文件存储路径
7.tracker_server=ip:22122 #这里我写的是服务器内网ip
8.http.server_port=8999 #设置 http 端口号
修改保存后创建软引用(类似于快捷方式)
ln -s /usr/bin/fdfs_storaged /usr/local/bin
2.2.4.3 启动storage
service fdfs_storaged start
如果不能启动,或提示用systemctl可改用命令:
systemctl start fdfs_storaged
成功后应该可以看到:
同样的,设置开机启动:
修改rc.local
vim /etc/rc.d/rc.local
查看一下服务是否启动
netstat -unltp | grep fdfs
服务已正常启动。
2.2.4.4 校验整合
到这里,fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去。
查看命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
成功后可以看到:
ip_addr = 服务器的ip ACTIVE
server_count=1, server_index=0
tracker server is 192.168.xxx.x:22122
group count: 1
Group 1:
group name = group1
disk total space = 503832 MB
disk free space = 475083 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 8999
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0
Storage 1:
id = 192.168.xxx.x
ip_addr = 192.168.xxx.x ACTIVE
http domain =
version = 5.11
join time = 2019-04-10 17:53:06
up time = 2019-04-11 21:21:31
total storage = 503832 MB
free storage = 475083 MB
upload priority = 10
store_path_count = 1
subdir_count_per_path = 256
storage_port = 23000
storage_http_port = 8999
current_write_path = 0
source storage id =
if_trunk_server = 0
connection.alloc_count = 256
connection.current_count = 0
connection.max_count = 1
total_upload_count = 8
success_upload_count = 8
total_append_count = 0
success_append_count = 0
total_modify_count = 0
success_modify_count = 0
total_truncate_count = 0
success_truncate_count = 0
total_set_meta_count = 0
success_set_meta_count = 0
total_delete_count = 0
success_delete_count = 0
total_download_count = 0
success_download_count = 0
total_get_meta_count = 0
success_get_meta_count = 0
total_create_link_count = 0
success_create_link_count = 0
total_delete_link_count = 0
success_delete_link_count = 0
total_upload_bytes = 124622
success_upload_bytes = 124622
total_append_bytes = 0
success_append_bytes = 0
total_modify_bytes = 0
success_modify_bytes = 0
stotal_download_bytes = 0
success_download_bytes = 0
total_sync_in_bytes = 0
success_sync_in_bytes = 0
total_sync_out_bytes = 0
success_sync_out_bytes = 0
total_file_open_count = 8
success_file_open_count = 8
total_file_read_count = 0
success_file_read_count = 0
total_file_write_count = 8
success_file_write_count = 8
last_heart_beat_time = 2019-04-18 12:31:15
last_source_update = 2019-04-17 18:56:35
last_sync_update = 1970-01-01 08:00:00
last_synced_timestamp = 1970-01-01 08:00:00
到这里FastDFS基本安装完毕。
参考的文章:https://blog.csdn.net/m0_37797991/article/details/73381648 这篇博客前两篇没有太大的问题,就是在与nginx整合时有点小问题。然后我之所以没有把软件安到/usr下(因为很多博客都是安装到usr目录下),是因为有的公司,会专门建一个文件夹作为应用盘,而且权限只给你这个文件夹的操作权限,所以根据自己的需求选择安装目录。
总结:
FastDFS搭建起来的确比较麻烦,但是只要足够有耐心,还是会比较顺利的。我是阿达,一名喜欢分享知识的程序员,时不时的也会荒腔走板的聊一聊电影、电视剧、音乐、漫画,这里已经有71位小伙伴在等你们啦,感兴趣的就赶紧来点击关注我把,哪里有不明白或有不同观点的地方欢迎留言。