FastDFS + Nginx搭建文件系统

服务器

浏览数:9

2019-11-2

前言

近期在学习搭建FastDFS文件系统,参考网上资料以及自己爬坑,总结如下。感谢在网上提供学习文档的大佬,在这里引用参考。

环境

阿里云、Linux、Cent OS 7.2

1. 安装libfastcommon

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

# 在 ~/ (root) 下新建fastdfs-install-package文件夹,用来存放有关fastdfs相关的安装包
cd #
mkdir fastdfs-install-package
cd fastdfs-install-package/

# 下载libfastcommon安装包
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz

# 解压,进入到解压后的文件夹中
 tar -zxvf V1.0.7.tar.gz
 cd libfastcommon-1.0.7/
 
# 编译安装
./make
./make install

# 安装之后可以看到libfastcommon.so被安装到:/usr/lib64/libfastcommon.so,由于FastDFS主程序设置的lib目录是:/usr/local/lib,所有建立软连接
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 install done
2. 安装FastDFS
# 下载FastDFS安装包
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz

# 解压
tar -zxvf V5.05.tar.gz
cd fastdfs-5.05/

# 编译安装
./make.sh
./make.sh install

# 编译安装完成之后,FastDFS会生成一些的可执行脚本,在/usr/bin/ 下,例如:
/usr/bin/fdfs_trackerd  # 跟踪器相关脚本
/usr/bin/fdfs_storaged  # 仓库相关脚本
/usr/bin/stop.sh        # 停止服务脚本
/usr/bin/restart.sh     # 重启脚本

# 相关配置文件, /etc/fdfs/ 下
/etc/fdfs/tracker.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/client.conf.sample
/etc/fdfs/storage_id.conf.sample    # 版本高会有这个文件
3. 配置FastDFS Tracker Server(跟踪服务器)

主要做调度工作,起到均衡的作用。负责管理所有的Storage Servergroup,每个Storage在启动后会连接Tracker,告知Tracker Server当前Storage所属group等其他信息,并保持周期性心跳

# 进入tracker配置目录下
cd /etc/fdfs/
# 拷贝tracker.conf.sample文件,并更名为:tracker.conf
cp tracker.conf.sample tracker.conf
# 使用vim编辑(了解Vim编辑器的相关操作)
vim tracker.conf

-----tracker.conf 重点关注的几个配置-----
#  是否禁用配置文件
disabled=false
# 服务端口
port=22122
# tracker数据和日志目录路径(这个路径可自定义)
base_path=/file-resource/fastdfs/tracker
# HTTP 服务端口(端口可自定义,与其他服务端口不冲突即可)
http.server_port=8501
-----配置完之后保存退出即可----------------


# 创建在tracker.conf中配置的base_path
mkdir -p /file-resource/fastdfs/tracker

# 操作到这一步,网上有很多例子是建立/usr/bin 到 /usr/local/bin 的软连接。本人在学习搭建过程中,在之后启动storage服务失败之后,更改配置文件,再次启动不生效的情况出现(也许操作不当或者未重新加载文件,如有高见请指点,谢谢),所有直接使用/usr/bin下关联对应的配置文件启动
# 启动tracker server
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

# 启动完之后,在之前配置的/file-resource/fastdfs/tracker目录下会生成data和logs文件夹,对应数据和日志目录。查看是否生成data和logs目录
ll /file-resource/fastdfs/tracker

# 在logs下,会生成tracker.log文件,使用less命令查看相关日志,如果出现启动失败可以在这个日志文件查找
less tracker.log

# 查看tracker server 是否启动成功。如果启动成功会看到fdfs_tracker服务已启动,并监听22122端口
netstat -unltp | grep fdfs 

# 在防火墙中打开22122端口,并重新载入(Cent OS 7以下开放端口的方式会不一样)
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --reload
4. 配置FastDFS Storage Server(存储服务器)

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

# storage server配置与tracker server相似
# 进入storage配置目录下
cd /etc/fdfs/
# 拷贝storage.conf.sample文件,并更名为:storage.conf
cp storage.conf.sample storage.conf
# 使用vim编辑
vim storage.conf

-----storage.conf 重点关注的几个配置-----
#  是否禁用配置文件
disabled=false
# 服务端口
port=23000
# 向tracker server发送心跳间隔时间,时间为秒
heart_beat_interval=30
# storage数据和日志目录路径(这个路径可自定义)
base_path=/file-resource/fastdfs/storage
# 存放文件时 storage server 支持多个路径,这里配置存放文件的基路径数目,通常只配一个目录
store_path_count=1
# 配置store_path_count设置的个数,上面的数量为1,所有配置store_path0即可,索引从0开始,依次累加
# 这里是存放文件的真正目录
store_path0=/file-resource/fastdfs/file
# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数
# 此处配置为256,storage server 在初次运行时,会在 store_path下自动创建 256*256 个子目录,如果为N,也就是N*N
subdir_count_per_path=256
# 配置连接tracker server的host和port,这里写自己的服务器IP
tracker_server=192.168.7.133:22122
# HTTP 服务端口(端口可自定义,与其他服务端口不冲突即可)
http.server_port=8502
-----配置完之后保存退出即可----------------

# 配置完之后,创建对应的base_path和store_path0
mkdir -p /file-resource/fastdfs/storage
mkdir -p /file-resource/fastdfs/file

# 启动storage server,与tracker server一样的方式,会在/file-resource/fastdfs/storage下生成data和logs文件夹
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

# 启动完成,提示[ok],查看是否启动成功
netstat -unltp | grep fdfs 

# 发现并没有fdfs_storage相关服务,以及23000端口。然后去到/file-resource/fastdfs/storage/logs下
less storage.log

# 连接失败,发现提示Connection time out,但是host和port都正确。经过爬坑,原来是阿里云没有配置相关安全组,配置相关安全组之后restart就可以了
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

# 同理,tracker server和storage server关闭命令
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop

# 启动成功之后在/file-resource/fastdfs/file/data目录下会创建256*256的子目录
ls /file-resource/fastdfs/file/data

# 在防火墙中打开23000端口,并重新载入
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --reload
5.配置Client,上传文件测试
# 进入/etc/fdfs/下
cd /etc/fdfs/
# 拷贝client.conf.sample文件,并更名为:client.conf
cp client.conf.sample client.conf
# 使用vim编辑
vim client.conf

-----client.conf 重点关注的几个配置-----
# client 的数据和日志目录
base_path=/file-resource/fastdfs/client
# Tracker端口
tracker_server=192.168.7.133:22122
-----配置完之后保存退出即可----------------

# 测试上传,将root下的一个页面上传到FastFDS上
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ~/404.html

# 会生成:group1/M00/00/00/rBIcWlw4Ts2AKw0NAACTjyPXgeM055.html,其中:
# group1:组名
# M00:磁盘名
# 00:一级目录名
# 00: 二级目录名
# rBIcWlw4Ts2AKw0NAACTjyPXgeM055.html:文件名

# 得到remoteFileName,说明上传成功,但是无法访问,所有安装Nginx来访问
6. 安装Nginx
# 安装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

# 下载Nginx,(目录在~/fastdfs-install-package下)
wget -c https://nginx.org/download/nginx-1.12.1.tar.gz

# 解压
tar -zxvf nginx-1.12.1.tar.gz
cd nginx-1.12.1/

# 使用默认配置
./configure

# 编译安装
make
make install

# 启动Nginx
cd /usr/local/nginx/sbin/
./nginx

# nginx相关命令
./nginx -s stop
./nginx -s quit
./nginx -s reload

# Nginx默认监听80端口,防火墙打开80端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

# 拼接之前生成的地址,可以看到效果
http://192.168.7.113/group1/M00/00/00/rBIcWlw4Ts2AKw0NAACTjyPXgeM055.html

# 为了每次不需要拼接,修改nginx.conf,将/group1/M00映射到/file-resource/fastdfs/file/data
vim /usr/local/nginx/conf/nginx.conf

---------
# 在server中加入如下配置
location /group1/M00 {
    alias /file-resource/fastdfs/file/data;
}
---------

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

# 再次访问,完成搭建

作者:JasonDev