前言
博主发现很多博文没有介绍开发者信息,本人习惯加上。FastDFS开发者为happyfish100(真名不清楚),目前在github上发布公开源码,地址为:https://github.com/happyfish100。本文用到的作者的作品有:
fastdfs、libfastcommon、fastdfs-nginx-module。
博主电脑是Manjaro 18.0.4 ,内核4.19.62-1-Manjaro。最近想要配置一个分布式的文件存储服务,相中了FastDFS,然而在网上找到的都是用CentOS或者Ubuntu的安装经验,没有Manjaro的,遂自行挖坑。
索性结局完美,经对比其他系统安装经验,发现Manjaro安装更简单些,因为不需要再额外导入任何的第三方依赖包!
FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
关于FastDFS的架构和能力介绍网上有很多,本文重点是安装测试,架构这里不再赘述。想要了解架构这方面概念的请先请参考:https://blog.csdn.net/kamroselee/article/details/80334621
准备
博主发现各大博文教程都是直接下载的FastDFS历史源码,然后做编译安装,这本身没毛病,但是这个方案当时可能可行,随着原项目开发人员的更新和迭代,如果按照固定地址下载源码的方式安装,某些部件可能已过时。尤其是博主自己安装的时候,总是发现libfastcommon这个官方必要的依赖库不可用。这个包和fastdfs版本是相对应的,在作者github中,fastdfs项目History文件上声明了:correct CRC32, you must upgrade libfastcommon to V1.38 or later,这导致博主在下载其他博主的libfastcommon时编译不通过。
博主推荐个不会随着时间流逝导致这篇博文过时的方式,原作者提供的也仅仅是源代码,需要编译,没有编译好的。
- 下载FastDFS最新源码:https://github.com/happyfish100/fastdfs.git
- 下载libfastcommon最新源码:https://github.com/happyfish100/libfastcommon.git
- 下载fastdfs-nginx-module最新源码:https://github.com/happyfish100/fastdfs-nginx-module.git
- 下载nginx最新源码:http://nginx.org/en/download.html
- 把它们放在同一个目录下,例如:/home/gaoxiang/fastdfs(实际上放哪儿都行,只要你记得路径,这里图方便)
- 解压全部安装包。
- 切换到root账户。(普通账户编译可以,安装不行。尤其是最后的nginx,要配置user为root。 -----写给linux小白。)
安装、配置
我安装的时候没有遇到系统缺少包的情况,推荐各位安装前更新到最新版本。
在 /home/gaoxiang/fastdfs 下提前创建两个目录fdfs-data 和 fdfs-storage。(可以放别处,系统允许范围内随意)
编译安装 libfastcommon
- 进入 libfastcommon 源码目录
- 执行 ./make.sh 进行编译
- 执行 ./make.sh install 进行安装
编译安装 FastDFS
- 进入 fastdfs 源码目录
- 执行 ./make.sh 进行编译
- 执行 ./make.sh install 进行安装
- 安装完成后可执行 ls -la /usr/bin/fdfs* 查看安装的可执行命令有哪些。
配置 FastDFS Tracker 服务
- 进入 /etc/fdfs 目录,有三个后缀为 .sample 的配置文件,拷贝三分,去掉后缀做正式配置文件。
- 编辑 tracker.conf 文件,修改以下内容:
- 更改:base_path=/home/gaoxiang/fastdfs/fdfs-data #tracker存储data和log的跟路径,必须提前创建好
- 端口 port(默认:22122) 和 绑定地址 bind_addr 不用写,保持默认即可,保存文件。
- 启动 tracker :/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start (命令在/usr/bin/下,一般不需要输入绝对路径)
配置 FastDFS Storage 服务
- 进入 /etc/fdfs 目录,编辑 storage.conf 文件,并修改以下内容
- 更改:base_path=/home/gaoxiang/fastdfs/fdfs-data
- 更改:store_path0=/home/gaoxiang/fastdfs/fdfs-storage
- 更改:tracker_server=你的IP:22122 #如果tracker在其他服务器,则填写其它服务器的IP,当然,原理上不推荐这么干。
- 端口 port(默认:23000) 和 绑定地址 bind_addr 不用写,保持默认即可,保存文件。
- 启动 storage :fdfs_storaged /etc/fdfs/storage.conf start (命令在/usr/bin/下,一般不需要输入绝对路径)
检查 storage 和 tracker 的绑定情况
- 执行:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
- 查看系统打印,Group1 下 找到 Storage 1 : 后面 ip_addr 的最后如果是 ACTIVE ,则绑定成功
测试 FastDFS 部署是否可用
- 进入 /etc/fdfs 目录,编辑 client.conf,并修改以下内容:
- 更改:base_path=/home/gaoxiang/fastdfs/fdfs-data
- 更改:tracker_server=你的IP:22122
- 其它保持默认,保存文件。
- 执行:fdfs_test /etc/fdfs/client.conf upload test1.jpeg (看好中间的upload参数别忘了,图片自定义路径)
- 会打印上传结果和文件路径,如:group1/M00/00/00/wKgBI11JMmmANd.jpeg
- 路径中group1代表组名, M00 代表磁盘,00/00 是目录,wKgBI11JMmmANd.jpeg 是随机生成的文件名称。
- 此时在web中还无法访问,不过在 fdfs_storage 目录中可以看到这张图片了。安装nginx模块后可访问。
整合编译 Nginx 和 fastdfs-nginx-module 模块
- 进入 nginx 源码路径
- 配置加载 fastdfs-nginx-module 模块 :./configure --add-module=~/fastdfs/fastdfs-nginx-module/src/(换成自己路径)
- 执行 make 编译
- 执行 make install 安装
配置 Nginx 服务
- 拷贝 fastdfs-nginx-module/src 目录下的 mod_fastdfs.conf 到 /etc/fdfs 下
- 进入 /etc/fdfs 目录,编辑 mod_fastdfs.conf,并修改以下内容:
- 更改:base_path=/home/gaoxiang/fastdfs/fdfs-data
- 更改:tracker_server=你的IP:22122
- 更改:storage_server_port=23000
- 更改:url_have_group_name=true
- 更改:store_path0=/home/gaoxiang/fastdfs/fdfs_storage
- 其它默认,保存文件。
配置 Nginx 增加 fastdfs 模块
拷贝 fastdfs/conf (源码中)下的所有配置文件到 /etc/fdfs 下
进入 /usr/local/nginx/conf 目录下,更改nginx.conf 文件如下:
在server 80 端口下添加
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
文件的最上方要添加上 user root; (这个坑使我启动失败多次)
完整代码如下:
user root;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location ~/group([0-9])/M00{
ngx_fastdfs_module;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动 Nginx,执行:/usr/local/nginx/nginx
如出现 ngx_http_fastdfs_set pid=** 字样,则启动成功。
浏览器访问:http://localhost/group1/M00/00/00/wKgBI11JMmmANd.jpeg 可查看刚开始上传的图片
至此 服务搭建完成 后续如果有需要会再写一篇 spring cloud 集成 fastdfs 的文章。