这篇文章介绍如何搭建 FastDFS 集群
不明白什么是 FastDFS 的小伙伴可以先看看上一篇文章 FastDFS 分布式文件系统详解
安装 FastDFS
安装依赖包(在安装 FastDFS 和 Nginx 之前,需确保 gcc、gcc-c++、 libstdc++-devel、make 等依赖库和工具已经安装):
yum -y install gcc gcc-c++ libstdc++-devel pcre-devel zlib-devel wget make
安装 libfastcommon:
安装 FastDFS 必须先安装 libfastcommon 类库,否则会导致报错
-
下载源包:
cd /usr/local
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
-
解压:
tar -xvf V1.0.7.tar.gz
-
编译安装:
cd libfastcommon-1.0.7
./make.sh
./make.sh install
安装 FastDFS:
-
下载 FastDFS:
cd /usr/local
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
-
解压:
tar -xvf V5.05.tar.gz
-
编译、安装:
cd fastdfs-5.05
./make.sh
./make.sh install
安装好之后,在/usr/bin 目录下,可以看 fdfs 开头的命令工具
作者提供的示例配置文件在/etc/fdfs 目录下,tracker 需要 tracker.conf 配置文件,storage 需要 storage.conf 配置文件。
配置 Tracker
将 tracker.conf.sample 文件复制为 tracker.conf,然后修改 tracker.conf 文件
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
vim tracker.conf
这里我修改了两个配置:
##Tracker 数据和日志目录地址
base_path=/data/fastdfs
##HTTP 服务端口
http.server_port=8081
还有一些配置说明:
##配置文件是否不生效,false 为生效
disabled=false
##提供服务的端口
port=22122
##Tracker 数据和日志目录地址(这个目录需要手动创建)
base_path=/data/fastdfs
##HTTP 服务端口
http.server_port=8081
手动创建下文件目录:
mkdir /data/fastdfs
测试下启动 Tracer:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
确认是否启动成功,查看 22122 端口是否开始监听:
netstat -unltp|grep fdfs
Tracker 服务启动成功后,也会在 base_path 下创建 data、logs 两个目录。
配置 Storage
同样的复制示例配置文件 storage.conf.sample 后修改:
cd /etc/fdfs
cp storage.conf.sample storage.conf
vim storage.conf
这里修改了如下配置:
##Storage 数据和日志目录地址(这个目录需要手动创建)
base_path=/data/fastdfs/storage
##文件存储目录
store_path0=/data/fastdfs/storage/file
##Tracker服务器IP和端口
tracker_server=`你的Tracker服务器IP`:23000
##HTTP 服务端口
http.server_port=8082
其它的一些配置说明:
##配置文件是否不生效,false 为生效
disabled=false
##指定此 storage server 所在 组(卷)
group_name=group1
##storage server 服务端口
port=23000
##心跳间隔时间,单位为秒 (这里是指主动向 tracker server 发送心跳)
heart_beat_interval=30
##Storage 数据和日志目录地址(这个目录需要手动创建)
base_path=/data/fastdfs/storage
##存储路径个数,需要和store_path个数匹配
store_path_count=1
##第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path0=/data/fastdfs/storage/file
##FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。
##如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 N * N 个存放文件的子目录
subdir_count_per_path=256
##tracker_server 的列表 ,会主动连接 tracker_server
##有多个 tracker server 时,每个 tracker server 写一行
tracker_server= [tracker_server ip]:23000
手动创建下文件目录:
mkdir /data/fastdfs/storage
测试启动 Storage:
这边要确保服务器端口已经开放
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
这边一开始没有启动成功,报错解决:
查看日志:cat /data/fastdfs/storage/logs/storaged.log
原因: 缺少目录/data/fastdfs/storage/file/data
mkdir /data/fastdfs/storage/file/data
确认是否启动成功,查看 23000 端口是否开始监听:
netstat -unltp | grep fdfs
启动 Storage 前确保 Tracker 是启动的。初次启动成功,会在 base_path 配置的路径下创建 data、 logs 两个目录。如果看到 23000 端口正常被监听后,这时候说明 Storage 服务启动成功啦
还可以验证下 Storage 是否登记到了 Tracker 服务器
运行 fdfs_monitor 查看 storage 服务器是否已经登记到 tracker 服务器: fdfs_monitor /etc/fdfs/storage.conf
如果出现 ip_addr = Active
行, 则表明 storage 服务器已经登记到 tracker 服务器。
安装 Nginx 并配置 fastdfs-nginx-module 模块
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题。
假设 Tracker 服务器将文件上传到了 192.168.51.128,上传成功后文件 ID 已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.51.129,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.51.129 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
下载安装包并解压:
cd /usr/local
wget http://nginx.org/download/nginx-1.14.2.tar.gz
tar -zxvf nginx-1.14.2.tar.gz
下载fastdfs-nginx-module_v1.16.tar.gz上传至服务器目录 /usr/local
下载地址: https://pan.baidu.com/s/1hs3qp84#list/path=%2F&parentPath=%2FIT%E6%96%87%E6%A1%A3%E8%B5%84%E6%96%99
上传好后解压:
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
安装之前需要先配置下软连接:
ln -sv /usr/include/fastcommon /usr/local/include/fastcommon
ln -sv /usr/include/fastdfs /usr/local/include/fastdfs
ln -sv /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
在安装 Nginx 之前,先添加 fastdfs-nginx-module-master 模块:
cd /usr/local/nginx-1.14.2
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src
成功后的输出结果:
编译:
make
安装:
make install
查看 Nginx 版本信息:
/usr/local/nginx/sbin/nginx -V
编译的时候有个报错解决:
修改以下 fastdfs-nginx-module 的配置文件:
vim /usr/local/fastdfs-nginx-module-master/src/config
修改项:
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
重新添加模块:
cd /usr/local/nginx-1.14.2
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module/src
重新编译:
make
编译成功。
配置
配置 fastdfs-nginx-module
复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录:
cp /usr/local/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改这个配置文件:
vim /etc/fdfs/mod_fastdfs.conf
##保存日志目录
base_path=/data/fastdfs/storage
##tracker服务连接信息
tracker_server=[tracker_server_ip]:22122
##storage服务器的端口号
storage_server_port=23000
##当前服务器的group名
group_name=group1
##文件url是否有group名
url_have_group_name=true
##存储路径个数,需要和store_path个数匹配
store_path_count=1
##存储路径,必须和storage.conf中配置的store_path0路径一致
store_path0=/data/fastdfs/storage/file
##设置组的个数
group_count=0
复制 FastDFS 的部分配置文件到/etc/fdfs 目录:
cp /usr/local/fastdfs-5.05/conf/http.conf /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs
配置 nginx
编辑 nginx 的配置文件:
vim /usr/local/nginx/conf/nginx.conf
##将server段中的listen端口号修改为8080
listen 8080;
##在server段中添加:
location ~/group[0-9]/M00 {
root /data/fastdfs/data;
ngx_fastdfs_module;
}
启动 nginx: /usr/local/nginx/sbin/nginx
确认 nginx 是否启动成功: netstat -unltp | grep nginx
这个时候打开浏览器,访问 8080 端口的页面,可以看到 nginx 的欢迎页。
测试上传
需要配置下 client.conf 文件
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
修改以下参数:
##日志存放路径
base_path=/data/fastdfs
tracker_server=[tracker服务器ip]:22122
http.tracker_server_port=8080
测试上传一个文件:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/7418.jpg
返回:
使用浏览器访问:
http://[tracker服务器ip]:8080/group1/M00/00/00/rBPhW1wKFbWASYfCAACOupBwVaA219.jpg
有看到上传的图片,说明搭建成功啦~~!
参考:
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于