FastDFS简介
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
服务端两个角色:
Tracker:管理集群,tracker 也可以实现集群。每个 tracker 节点地位平等。收集 Storage 集群的状态。
Storage:实际保存文件 Storage 分为多个组,每个组之间保存的文件是不同的。每个组内部可以有多个成员, 组成员内部保存的内容是一样的,组成员的地位是一致的,没有主从的概念。
Ubuntu1604安装配置FastDFS:
- 安装libfastcommon
下载地址:https://github.com/happyfish100/libfastcommon.git
在/usr/fastdfs目录下解压、编译:
root@linuxidc: /usr/fastdfs# unzip libfastcommon-master.zip
cd libfastcommon-master
./make.sh
./make.sh install
- 安装FastDFS
下载可百度搜索FastDFS_v5.04.tar.gz下载,使用xhell存放到服务器
也可以直接下载:
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
tar xf V5.11.tar.gz
cd fastdfs-5.11
./make.sh
./make.sh install
安装完成后所有的配置文件在 /etc/fdfs/ 目录下
- 配置tracker
进入到 /etc/fdfs 目录下,复制模版文件tracker.conf.sample到 tracker.conf
cp client.conf.sample client.conf
cp tracker.conf.sample tracker.conf
cp storage.conf.sample storage.conf
创建数据文件和日志文件目录:
mkdir -pv /data/fastdfs/tracker
mkdir: 已创建目录 "/data"mkdir:
已创建目录 "/data/fastdfs"mkdir:
已创建目录 “/data/fastdfs/tracker”
编辑 tracker.conf 文件,测试的时候只需要修改以下参数即可
disabled=false #启用配置文件
port=22122 #设置 tracker 的端口号
base_path=/data/fastdfs/tracker #设置 tracker 的数据文件和 日志目录(需预先创建)
http.server_port=8888 #设置 http 端口号
http.server_port=8888 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口
4.运行tracker:
启动tracker进程,然后使用netstat 查看端口是 否起来。
命令如下:
fdfs_trackerd /etc/fdfs/tracker.conf restart
注:如不能正常启动则 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
netstat -antp | grep trackerd
绑定端口则启动正常
5.配置storage
创建数据文件和日志文件目录:
mkdir -pv /data/fastdfs/storage
命令如下:vim storage.conf
修改内容如下:
disabled=false#启用配置文件
group_name=group1 #组名,根据实际情况修改
port=23000 #设置 storage 的端口号
base_path=/data/fastdfs/storage #设置 storage 的日志目录(需预先创建)
store_path_count=1 #存储路径个数,需要和 store_path 个数匹配
store_path0=/data/fastdfs/storage #存储路径
tracker_server=127.0.0.1:22122 #tracker 服务器的 IP 地址和端口号,注意不能使用127.0.0.1,使用内网ip或者公网ip
http.server_port=8888 #设置storage上启动的http服务的
端口号,如安装的nginx的端口号
运行storage:
fdfs_storaged /etc/fdfs/storage.conf restart
注:如不能正常启动则 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
查看端口是否启动
netstat -antp | grep storage
6.配置client.conf
创建数据文件和日志文件目录:
mkdir -pv /data/fastdfs/log
命令如下:vim client.conf
修改内容如下:
base_path=/data/fastdfs/log #设置 log 的日志目录(需预先创建)
tracker_server=xxx.xx.xx.xxx:22122 #tracker服务器的 IP 地址和端口号 根据自己tracker服务器配置
http.tracker_server_port=8888
- 客户端上传文件测试
进入/usr/local/bin/目录,上传文件,执行
sudo fdfs_test /etc/fdfs/client.conf upload a.txt
注:a.txt可以在/usr/local/bin/目录下自己创建一个
如果命令行反馈文件地址
说明上传完成。
安装fastdfs-nginx-module模块
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。假设Tracker服务器将文件上传到了192.168.104.118,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.104.119,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.104.119上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
#新建nginx下载目录
mkdir -p /usr/local/bak/nginx
#新建日志存储目录
mkdir -p /data/fastdfs/nginx
cd /usr/local/bak/nginx
#下载并解压
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz fastdfs-nginx-module-V1.20.tar.gz
tar xf V1.20
cd fastdfs-nginx-module-1.20/src/
拷贝fastdfs-nginx-module模块的配置文件mod_fastdfs.conf到/etc/fdfs目录中并编辑
cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
编辑fastdfs-nginx-module-1.20/src/目录下的config文件(没前缀,没后缀,就叫config),主要修改以下两处地方,否则会有报错,而且报错是不可预料的,不要问为什么,反正就是干。
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
拷贝fastdfs-nginx-module模块的配置文件mod_fastdfs.conf到/etc/fdfs目录中并编辑
cp /usr/local/bak/nginx/fastdfs-nginx-module-1.20/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
cd /etc/fdfs/
修改内容如下,圈红为重点修改部分(感谢@驿外残香 反馈,此处的store_path0应该与storage.conf中的store_path0一致,这样nginx才能够找到资源的正确路径):
base_path=/data/fastdfs/nginx
store_path0=/data/fastdfs/storage
tracker_server=tracker_server=xx.xxx.xx.xx:22122 #填本机外网ip即可
storage_server_port=23000(默认配置为23000)
url_have_group_name = true
group_name=group1(默认配置为group1)
安装nginx(此处极易出错务必小心谨慎)
解压nginx到/usr/local
wget https://nginx.org/download/nginx-1.15.8.tar.gz --no-check-certificate
tar xf nginx-1.15.8.tar.gz
此时编译nginx会报错,需要安装pcre工具和zlib工具包
#我是将所有工具包下载并放置在/srv/ftp下
wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz
wget http://zlib.net/zlib-1.2.11.tar.gz
将上述两个工具包解压至/usr/local/
tar -xzvf pcre-8.40.tar.gz -C /usr/local/
tar -xzvf zlib-1.2.11.tar.gz -C /usr/local/
进入pcre-8.40并编译
cd /usr/local/pcre-8.40
#编译1
./configure
#编译2
make && make install
进入zlib-1.2.11并编译
cd /usr/local/zlib-1.2.11
#编译1
./configure
#编译2
make && make install
安装编译时需要用到的库和工具
apt-get install build-essential libtool gcc automake autoconf make
执行成功不报错后
编译nginx
cd nginx-1.15.8
./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --sbin-path=/usr/local/nginx/sbin --add-module=/usr/local/bak/nginx/fastdfs-nginx-module-1.20/src
make && make install
未报错即为编译成功,如果有报错必须解决,否则nginx无法启动成功。
拷贝FastDFS中的部分配置文件到/etc/fdfs目录中
cp /usr/fastdfs/fastdfs-5.11//conf/http.conf /etc/fdfs/
cp /usr/fastdfs/fastdfs-5.11//conf/mime.types /etc/fdfs/
配置nginx的配置文件,路径是/application/nginx/conf/nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动nginx
先上传一个文件
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /data/fastdfs/111.png
上传成功返回了一个文件地址:
测试下载:
http://xx.xxx.xx.xx:8888/group1/M00/00/00/rBM2HF6iorCAMeNOAAKo50Gq43I582.png
即可看到图片,集群内容和安全问题下面继续补充。