前言
FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)三个部分组成,主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
(1)每次上传文件后都会返回一个地址,用户需要自己保存此地址。
(2)为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
安装tracker服务
安装依赖
yum -y install gcc-c++ libevent
安装基础模块 libfas
# 进入编译目录
cd /usr/local/lib/fastdfs
# 克隆文件
git clone https://github.com/happyfish100/libfastcommon.git
# 编译
cd libfastcommon/
./make.sh
./make.sh install
安装fastdfs
cd /usr/local/lib/fastdfs
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
./make.sh
./make.sh install
此时会在/etc/fdfs目录下生成几个文件
tracker.conf.sample //负责均衡调度服务器配置文件
client.conf.sample //客户端上传配置文件
storage.conf.sample//文件存储服务器配置文件
storage_ids.conf.sample // 集群配置
还需要以下两个文件
# http.conf //http服务器配置文件
# mime.types //文件类型配置文件
cp /usr/local/lib/fastdfs/fastdfs/conf/http.conf /etc/fdfs/http.conf
cp /usr/local/lib/fastdfs/fastdfs/conf/mime.types /etc/fdfs/mime.types
配置tracker 基本参数
cp tracker.conf.sample tracker.conf
vim tracker.conf
# 如果只能本机上传 则改为本机ip如果允许所有IP 则不改
bind_addr=
# tracker 存放日志和数据的目录
base_path=/home/yuqing/fastdfs
# tracker http 端口
http.server_port=8080 改为 http.server_port=80
启动 tracker
fdfs_trackerd /etc/fdfs/tracker.conf
设置开机启动
/sbin/chkconfig --add fdfs_trackerd
配置storage 基本配置
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
#修改storage server的配置文件:
vm /etc/fdfs/storage.conf
# 允许访问的地址
bind_addr=
#base_path表示storage存放数据的目录
base_path=/home/yuqing/fastdfs 改为 base_path=/data/fastdfs
#修改storage的资源存放路径
store_path0=/home/yuqing/fastdfs 改为 store_path0=/data/fastdfs
#如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=......
#store_path2=......
修改storage的对应的tracker_server的ip地址和端口
tracker_server=192.168.209.121:22122
#如果有多个则配置多个tracker_server
tracker_server=......
tracker_server=......
# http 服务地址
http.server_port=8888
启动 tracker
fdfs_storaged /etc/fdfs/storage.conf
设置开机启动
/sbin/chkconfig --add fdfs_storaged
使用fastdfs 提供的测试工具上传文件
修改配置
# 存放日志的目录
base_path=...
# tracker 的配置 请与storage.conf 保持一致
tracker_server = 172.18.36.145:22122
# 请与tracker.conf保持一致
http.tracker_server_port = 8080
测试上传
fdfs_test /etc/fdfs/client.conf upload fdfs_tracker.sh
如果成功则会返回以下结果
This is FastDFS client test program v6.06
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.fastken.com/
for more detail.
[2020-06-09 14:41:11] DEBUG - base_path=/usr/local/lib/fastdfs/runtime/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0,
anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=172.18.36.145, port=23000
group_name=group1, ip_addr=172.18.36.145, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/rBIkkV7fLweAJDyoAAAA7uq26lQ0731.sh
source ip address: 172.18.36.145
file timestamp=2020-06-09 14:41:11
file size=238
file crc32=3937856084
example file url: http://172.18.36.145:8080/group1/M00/00/00/rBIkkV7fLweAJDyoAAAA7uq26lQ0731.sh
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/rBIkkV7fLweAJDyoAAAA7uq26lQ0731_big.sh
source ip address: 172.18.36.145
file timestamp=2020-06-09 14:41:11
file size=238
file crc32=3937856084
example file url: http://172.18.36.145:8080/group1/M00/00/00/rBIkkV7fLweAJDyoAAAA7uq26lQ0731_big.sh
配置nginx 访问文件 (需要在storage上配置)
nginx 本身没有fastdfs 模块 需要在编译的时候加入fastdfs -nginx 模块
下载fastdfs-nginx-module
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
下载nginx 源码及安装编译过程可参照
https://www.jianshu.com/p/da8bc470836c
只需要在configure的时候加入参数
# 加入附加模块
... --add-module=/usr/local/lib/fastdfs/fastdfs-nginx-module/src
然后按照nginx 正常流程make make install
复制并配置module 配置文件
cp /usr/local/lib/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
# fastdfs-nginx 日志目录
base_path=
# 跟storage.conf 里配置一样
tracker_server=
# 跟storage.conf 的配置一样
store_path0=
# http链接是否有groupname
url_have_group_name = true
修改nginx 的配置
加入如下server
server {
listen 80;
server_name 192.168.5.72;
location /group1/M00 {
ngx_fastdfs_module;
}
}
集群与高可用
集群只需要部署多个tracker storage 服务就可以了