朋友做了个视频在线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
在地址栏访问
系统环境:CentOS 7.0 64位操作系统
Nginx版本:nginx-1.13.9
FastDFS版本:fastdfs-5.12
以下操作都是单机环境。
我把所有的安装包上传到/usr/local/package/FastDFS下,解压到/usr/local/FastDFS目录。
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到/usr/local/FastDFS目录。
# unzip libfastcommon-master.zip -d /usr/local/FastDFS/
[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
如果没有权限可以给权限
# chmod -R 777 libfastcommon-master
# ./make.sh
# ./make.sh install
ibfastcommon.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
解压fastdfs-5.12到/usr/local/FastDFS目录。
unzip fastdfs-5.12.zip -d /usr/local/FastDFS/
[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
chmod +x make.sh
./make.sh
./make.sh install
如下图所示则安装成功:
cd etc/init.d/
cd /etc/fdfs/
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。
cd /etc/init.d
vim fdfs_trackerd
vim fdfs_storaged
我这个安装完就已经是 /usr/bin 所以我这边不做任何处理。
如果不是,可以使用
# vim fdfs_trackerd
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
# vim fdfs_storaged
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin
建立 /usr/bin 到 /usr/local/bin 的软链接
# 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
cd /etc/fdfs/
发现样例文件并不是我们需要的,而且和上面我截图的配置文件中的conf也不是一个,cp一下就好了
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
#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/
cd /etc/fdfs/
vi tracker.conf
#当前配置是否可用 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
上面是一些常用的配置修改,这里只修改存储数据和日志文件的基本路径,其他默认不变;
# the base path to store data and log files
base_path=/home/yuqing/fastdfs
改为:
# the base path to store data and log files
base_path=/home/fastdft/fastdfs_tracker_log
vi storage.conf
#组名称很重要,如果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
上面是一些常用的配置修改,这里只修改以下内容,其他默认不变;
# 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
改为:
# 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
方式一:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
方式二:
/etc/init.d/fdfs_trackerd start
方式三:
提是上面创建了软链接,后面都用这种方式
service fdfs_trackerd start
初次成功启动,会在 /home/fastdft/fastdfs_tracker_log (配置的base_path)下创建 data、logs 两个目录。
第一次启动的时候最好先用方式一启动这样可以看到启动是否出错,也可以查看日志
查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则算是Tracker服务安装成功。
netstat -unltp|grep fdfs
service fdfs_trackerd stop
chkconfig fdfs_trackerd on
或者
vim /etc/rc.d/rc.local
#fastdfs
/etc/init.d/fdfs_trackerd start
# vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
重启防火墙:
# service iptables restart
[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 日志文件
方式一:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
方式二:
/etc/init.d/fdfs_storaged start
方式三:
提是上面创建了软链接,后面都用这种方式
service fdfs_storaged start
初次成功启动,会在 /home/fastdft/fastdfs_tracker_log (配置的base_path)下创建 data、logs 两个目录。
第一次启动的时候最好先用方式一启动这样可以看到启动是否出错,也可以查看日志
查看 FastDFS storage是否已成功启动 ,23000端口正在被监听,则算是storage服务安装成功。
netstat -unltp|grep fdfs
service fdfs_trackerd stop
chkconfig fdfs_storaged on
或者
vim /etc/rc.d/rc.local
#fastdfs
/etc/init.d/fdfs_storaged start
同 Tracker,Storage 启动成功后,在base_path 下创建了data、logs目录,记录着 Storage Server 的信息。
在 store_path0 目录下,创建了N*N个子目录:
# vim /etc/sysconfig/iptables
添加如下端口行:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT
重启防火墙:
# service iptables restart
查看tracker上是否有相应的存储节点,即 tracker和storage是否连接起来了
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
如图所示,安装任务便完成了:
vim /etc/fdfs/client.conf
#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
修改如下配置即可,其它默认。
# 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
改为:
# 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/上传一张图片
使用以下命令,进行测试
/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 通过 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目录。
# unzip fastdfs-nginx-module-master.zip -d /usr/local/FastDFS/
配置前应注意,安装nginx
/usr/local/nginx/sbin/nginx -s stop
cd usr/local/package/Nginx/nginx-1.13.9
./configure --prefix=/usr/local/nginx --add-module=/usr/local/FastDFS/fastdfs-nginx-module-master/src/
make && make install
/usr/local/nginx/sbin/nginx -V
cd fastdfs-nginx-module-master/src/
cp mod_fastdfs.conf /etc/fdfs/
vim mod_fastdfs.conf
修改如下配置,其它默认
# 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
# cd usr/local/FastDFS/fastdfs-master/conf/
# cp anti-steal.jpg http.conf mime.types /etc/fdfs/
vim /usr/local/nginx/conf/nginx.conf
修改配置,其它的默认
在80端口下添加fastdfs-nginx模块
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。
在存储目录下创建软连接,将其链接到实际存放数据的目录,这一步可以省略
ln -s /home/fastdft/resource /home/fastdft/resource/data/M00
/usr/local/nginx/sbin/nginx
打印处如下就算配置成功
能下载文件就算安装成功。注意和第三点中直接使用nginx路由访问不同的是,这里配置 fastdfs-nginx-module 模块,可以重定向文件链接到源服务器取文件。
最终部署结构图(盗的图):可以按照下面的结构搭建环境。
参考文献:
感谢每一位大佬的默默帮助,谢谢分享;
用FastDFS一步步搭建文件管理系统
fastdfs文件服务器的基本安装和配置
FastDFS教程Ⅰ-文件服务器安装与Nginx配置
Nginx - Linux下部署安装Nginx