您的位置:首页 > 运维架构 > Nginx

FastDFS - Linux下搭建FastDFS 文件服务器与Nginx配置(部署和运维)

2019-06-22 04:44 483 查看
[code]朋友做了个视频在线App,线上运维我来帮他折腾。此篇记录部署步骤,方便下次直接查看使用。部分内容来源于网络,如侵联删。

本篇文章只叙述FastDFS的部署与运维,简介请点击FastDFS - 快速的分布式文件系统

目录

FastDFS

前置操作

准备工作

安装相关依赖

下载相关软件

上传相关软件

安装libfastcommon-master

解压

打开安装目录

编译

安装

设置软连接,即快捷方式

安装fastdfs-5.12

解压

打开安装目录

添加可执行权限

编译

安装

默认安装后相应文件与目录

服务脚本

配置文件(样例配置文件)

命令工具

修改脚本相应的命令路径

打开配置文件夹

创建相关目录

配置跟踪器(tracker)

打开目录

编辑tracker.conf

配置存储器(storage)

编辑tracker.conf

启动

tracker跟踪服务器启动

启动tracker

查看tracker

关闭tracker

设置tracker开机启动

 防火墙中打开跟踪端口(默认的22122)

 tracker server 目录及文件结构 

storage存储节点服务启动

启动storage

查看storage

关闭storage

设置storage开机启动

查看storage数据

 防火墙中打开存储器端口(默认的 23000) 

查看Storage和Tracker是否在通信

文件上传测试

编辑client.conf

上传测试

FastDFS 配置 Nginx 模块

fastdfs-nginx-module 模块说明

解压

 

配置nginx

在nginx中添加模块

先停掉nginx服务

打开nginx安装目录

添加模块

重新编译、安装

查看Nginx的模块

复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

编辑mod_fastdfs.conf

复制 FastDFS 的部分配置文件到/etc/fdfs 目录

配置nginx,修改nginx.conf

数据目录创建软连接

启动nginx

在地址栏访问

FastDFS

前置操作

系统环境:CentOS 7.0 64位操作系统

 Nginx版本:nginx-1.13.9

FastDFS版本:fastdfs-5.12

以下操作都是单机环境。

我把所有的安装包上传到/usr/local/package/FastDFS下,解压到/usr/local/FastDFS目录。

准备工作

安装相关依赖

[code]yum -y install make cmake gcc gcc-c++ bison-devel ncurses-devel autoconf automake lrzsz zip unzip netstat-nat libevent.x86_64 libevent-devel.x86_64
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel

下载相关软件

下载地址:https://github.com/happyfish100

上传相关软件

将下载好的安装包,通过ftp工具上传到指定文件夹/usr/local/package/FastDFS下

安装libfastcommon-master

解压

解压libfastcommon-master到/usr/local/FastDFS目录。

[code]# unzip libfastcommon-master.zip -d /usr/local/FastDFS/

打开安装目录

[code][root@jtxws56k FastDFS]# cd ..
[root@jtxws56k package]# cd ..
[root@jtxws56k local]# cd FastDFS/
[root@jtxws56k FastDFS]# ls
libfastcommon-master
[root@jtxws56k FastDFS]# cd libfastcommon-master/
[root@jtxws56k libfastcommon-master]# ls
doc  HISTORY  INSTALL  libfastcommon.spec  make.sh  php-fastcommon  README  src

如果没有权限可以给权限

[code]# chmod -R 777 libfastcommon-master

编译

[code]# ./make.sh

安装

[code]# ./make.shinstall

设置软连接,即快捷方式

ibfastcommon.so 安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。

[code]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-5.12

解压

解压fastdfs-5.12到/usr/local/FastDFS目录。

[code]unzip fastdfs-5.12.zip -d /usr/local/FastDFS/

打开安装目录

[code][root@jtxws56k local]# cd FastDFS/
[root@jtxws56k FastDFS]# ls
fastdfs-master  libfastcommon-master
[root@jtxws56k FastDFS]# cd fastdfs-master/
[root@jtxws56k fastdfs-master]# ls
client  conf             docker        HISTORY  INSTALL  php_client  restart.sh  storage  tracker
common  COPYING-3_0.txt  fastdfs.spec  init.d   make.sh  README.md   stop.sh     test

添加可执行权限

[code]chmod +x make.sh

编译

[code]./make.sh

安装

[code]./make.shinstall

如下图所示则安装成功:

默认安装后相应文件与目录

服务脚本

[code]cd etc/init.d/

配置文件(样例配置文件)

[code] cd /etc/fdfs/

命令工具

[code]cd usr/bin/
ls | grep fdfs

修改脚本相应的命令路径

FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin, 但实际命令安装在 /usr/bin/ 下。

两种方式修改命令路径:

修改配置文件

修改FastDFS 服务脚本中相应的命令路径,也就是把 /etc/init.d/fdfs_storaged 和 /etc/init.d/fdfs_tracker 两个脚本中的 /usr/local/bin 修改成 /usr/bin。

[code]cd  /etc/init.d
vim fdfs_trackerd

[code] vim fdfs_storaged

我这个安装完就已经是 /usr/bin 所以我这边不做任何处理。

如果不是,可以使用

[code]# vim fdfs_trackerd
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
# vim fdfs_storaged
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

建立 /usr/bin 到 /usr/local/bin 的软链接

[code]# ln -s /usr/bin/fdfs_trackerd   /usr/local/bin
# ln -s /usr/bin/fdfs_storaged   /usr/local/bin
# ln -s /usr/bin/stop.sh         /usr/local/bin
# ln -s /usr/bin/restart.sh      /usr/local/bin

打开配置文件夹

[code]cd /etc/fdfs/

发现样例文件并不是我们需要的,而且和上面我截图的配置文件中的conf也不是一个,cp一下就好了

[code]cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

创建相关目录

[code]#tracker日志目录
mkdir -p /home/fastdft/fastdfs_tracker_log
#storage日志目录
mkdir -p /home/fastdft/fastdfs_storage_log
#storage1日志目录
mkdir -p /home/fastdft/fastdfs_storage_1_log
#文件目录
mkdir -p /home/fastdft/resource
#文件图片目录
mkdir -p /home/fastdft/images
#给文件权限rwx all
chmod -R 777 /home/fastdft/

配置跟踪器(tracker)

打开目录

[code] cd /etc/fdfs/

 

编辑tracker.conf

[code]vi tracker.conf
[code]#当前配置是否可用 false:可用 true:不可用
disabled=false
#是否绑定IP,不设置为不绑定
bind_addr=
#默认的端口 不冲突的话不要修改
port=22122
#针对socket套接字函数connect的连接超时时间设置
connect_timeout=30
#设置网络超时,单位秒,发送或接收数据时,如果在超时时间之后依然不能进行,则本次网络通讯失败
network_timeout=60
#日志文件 可根据需要修改
base_path= /home/fastdft/fastdfs_tracker_log
#服务器支持的最大连接数
max_connections=256
#工作线程数,通常设置为CPU数量
accept_threads=1
#上传组(卷)的方式:0轮询,1:指定,2:负载平衡(剩余空间最大选择)
store_lookup=2
#组名称很重要 如果上一参数选择1方式,即制定组名,当前参数用来设置指定的组,如果选择其他方式,当前参数无效
store_group=group1
#服务器IP:端口 ,IP根据本机IP来填写
store_server=101.201.113.170:22122
store_path=0
#http端口,使用Nginx来访问则不需要这个
http.server_port=9090

上面是一些常用的配置修改,这里只修改存储数据和日志文件的基本路径,其他默认不变;

[code]# the base path to store data and log files
base_path=/home/yuqing/fastdfs

改为:

[code]# the base path to store data and log files
base_path=/home/fastdft/fastdfs_tracker_log

配置存储器(storage)

编辑tracker.conf

[code]vi storage.conf
[code]#组名称很重要,如果tracker.conf配置为指定组名的话要和tracker.conf配置的相同
group_name=group1
#storaged服务日志目录
base_path= /home/fastdft/fastdfs_storage_log
#文件数据存放目录
store_path0= /home/fastdft/resource
#服务器IP:端口 ,IP根据本机IP来填写
tracker_server=192.168.1.129:22122
#http端口,使用Nginx来访问则不需要这个
http.server_port=8888

上面是一些常用的配置修改,这里只修改以下内容,其他默认不变;

[code]# the base path to store data and log files
base_path=/home/yuqing/fastdfs# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs2
# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.209.121:22122

改为:

[code]# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/home/fastdft/resource

# the base path to store data and log files
base_path=/home/fastdft/fastdfs_storage_log

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=127.0.0.1:22122

启动

tracker跟踪服务器启动

启动tracker

方式一:

[code]/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start

方式二:

[code]/etc/init.d/fdfs_trackerd start

方式三:

[code]提是上面创建了软链接,后面都用这种方式
[code]service fdfs_trackerd start

初次成功启动,会在 /home/fastdft/fastdfs_tracker_log  (配置的base_path)下创建 data、logs 两个目录。

第一次启动的时候最好先用方式一启动这样可以看到启动是否出错,也可以查看日志

查看tracker

查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。

[code]netstat -unltp|grep fdfs

关闭tracker

[code]service fdfs_trackerd stop

设置tracker开机启动

[code]chkconfig fdfs_trackerd on

或者

[code]vim /etc/rc.d/rc.local

#fastdfs
/etc/init.d/fdfs_trackerd start

 防火墙中打开跟踪端口(默认的22122)

[code]
# vim /etc/sysconfig/iptables

添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重启防火墙:
# service iptables restart

 tracker server 目录及文件结构 

[code][root@jtxws56k fastdfs_tracker_log]# tree
.
├── data
│ ├── fdfs_trackerd.pid
│ ├── storage_changelog.dat
│ ├── storage_groups_new.dat        存储分组信息
│ ├── storage_servers_new.dat        存储服务器列表
│ └── storage_sync_timestamp.dat
└── logs
└── trackerd.log                日志文件

storage存储节点服务启动

启动storage

方式一:

[code]/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

方式二:

[code]/etc/init.d/fdfs_storaged start

方式三:

[code]提是上面创建了软链接,后面都用这种方式
[code]service fdfs_storaged start

初次成功启动,会在 /home/fastdft/fastdfs_tracker_log  (配置的base_path)下创建 data、logs 两个目录。

第一次启动的时候最好先用方式一启动这样可以看到启动是否出错,也可以查看日志

查看storage

查看 FastDFS storage是否已成功启动 ,23000端口正在被监听,则算是storage服务安装成功。

[code]netstat -unltp|grep fdfs

关闭storage

[code]service fdfs_trackerd stop

设置storage开机启动

[code]chkconfig fdfs_storaged on

或者

[code]vim /etc/rc.d/rc.local

#fastdfs
/etc/init.d/fdfs_storaged start

查看storage数据

同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。

在 store_path0 目录下,创建了N*N个子目录:

 防火墙中打开存储器端口(默认的 23000) 

[code]# vim /etc/sysconfig/iptables

添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重启防火墙:
# service iptables restart

查看Storage和Tracker是否在通信

查看tracker上是否有相应的存储节点,即 tracker和storage是否连接起来了

[code]/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

如图所示,安装任务便完成了:

文件上传测试

 

编辑client.conf

[code]vim /etc/fdfs/client.conf
[code]#tracker服务器文件路径
base_path=/home/fastdft/fastdfs_client_log
#tracker服务器IP地址和端口号
tracker_server=192.168.1.129:22122
# tracker 服务器的 http 端口号,必须和tracker的设置对应
http.tracker_server_port=9090

修改如下配置即可,其它默认。

[code]# the base path to store log files
base_path=/home/yuqing/fastdfs

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.0.197:22122

改为:

[code]# the base path to store log files
base_path=/home/fastdft/fastdfs_client_log

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=你的ip:22122

上传测试

用ftp工具在/usr/games/上传一张图片

使用以下命令,进行测试

[code]/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf /usr/local/package/FastDFS/fastdfs-5.12.zip

如下图所示,返回了文件的路径

返回的文件ID由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。

这个时候就可以使用java api进行上传、同步和下载,但是想要通过http方式进行下载,还需要配置nginx。

FastDFS 配置 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 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。

解压

解压fastdfs-nginx-module-master.zip到/usr/local/FastDFS目录。

[code]# unzip fastdfs-nginx-module-master.zip -d /usr/local/FastDFS/

配置nginx

配置前应注意,安装nginx

在nginx中添加模块

先停掉nginx服务

[code]/usr/local/nginx/sbin/nginx -s stop

打开nginx安装目录

[code] cd usr/local/package/Nginx/nginx-1.13.9

添加模块

[code]./configure --prefix=/usr/local/nginx --add-module=/usr/local/FastDFS/fastdfs-nginx-module-master/src/

重新编译、安装

[code]make && make install

查看Nginx的模块

[code]/usr/local/nginx/sbin/nginx -V

复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

[code]cd fastdfs-nginx-module-master/src/

cp mod_fastdfs.conf /etc/fdfs/

编辑mod_fastdfs.conf

[code]vim mod_fastdfs.conf

修改如下配置,其它默认

[code]
# connect timeout in seconds
#
# default value is 30s
connect_timeout=10

# FastDFS tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
# valid only when load_fdfs_parameters_from_tracker is true
tracker_server=127.0.0.1:22122

# if the url / uri including the group name
# set to false when uri like /M00/00/00/xxx
# set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx
# default value is false
url_have_group_name = true

# store_path#, based 0, if store_path0 not exists, it's value is base_path
# the paths must be exist
# must same as storage.conf
#store_path0=/home/yuqing/fastdfs
#store_path1=/home/yuqing/fastdfs1
store_path0=/home/fastdft/resource

复制 FastDFS 的部分配置文件到/etc/fdfs 目录

[code]# cd usr/local/FastDFS/fastdfs-master/conf/

# cp anti-steal.jpg http.conf mime.types /etc/fdfs/

配置nginx,修改nginx.conf

[code]vim /usr/local/nginx/conf/nginx.conf

修改配置,其它的默认

在80端口下添加fastdfs-nginx模块

[code]location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}

注意:

  listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口。

  location 的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。

数据目录创建软连接

在存储目录下创建软连接,将其链接到实际存放数据的目录,这一步可以省略

[code]ln -s /home/fastdft/resource /home/fastdft/resource/data/M00

启动nginx

[code]/usr/local/nginx/sbin/nginx

打印处如下就算配置成功

在地址栏访问

能下载文件就算安装成功。注意和第三点中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。

最终部署结构图(盗的图):可以按照下面的结构搭建环境。

 

 

参考文献:

感谢每一位大佬的默默帮助,谢谢分享;

用FastDFS一步步搭建文件管理系统

fastdfs文件服务器的基本安装和配置

FastDFS教程Ⅰ-文件服务器安装与Nginx配置

Nginx - Linux下部署安装Nginx

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: