FastDFS

第一节 FastDFS 介绍

FastDFS 是一个开源的高性能分布式文件系统(FDFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  • Tracker Server

    跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  • Storage Server

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

  • Client

    客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

第二节 FastDFS 存储和下载

1. FastDFS 存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

2. FastDFS 上传

FastDFS

3. FastDFS 下载

客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。

FastDFS

跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

第三节 FastDFS 安装

1. 环境准备

# 没有make的需要安装一下make
yum install -y make
yum install -y gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel

# 创建数据存储目录
cd ~
mkdir -p /fdfs/tracker /fdfs/storage /fdfs/logs /fdfs/tmp

2. 安装 libfastcommon

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

cd /usr
# 下载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.sh && ./make.sh install
# 复制文件,解决FastDFS中lib配置文件路径问题。
cp /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
cp /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
#cp /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
#cp /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.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

2. 安装 FastDFS

cd /usr
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

3. 配置FastDFS跟踪器(Tracker)

3.1 拷贝配置文件
# 将配置文件复制到/etc/fdfs目录下
cd /usr/fastdfs-5.05/conf
cp * /etc/fdfs/
3.2 配置跟踪器tracker
cd /etc/fdfs
vi tracker.conf
port=22122
# Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建)
base_path=/fdfs/tracker

# HTTP 服务端口
http.server_port=8888
3.3 配置存储器storage
vi storage.conf
# Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成)
base_path=/fdfs/storage

# 逐一配置 store_path_count 个路径,索引号基于 0。
# 如果不配置 store_path0,那它就和 base_path 对应的路径一样。
store_path0=/fdfs/storage

# FastDFS 存储文件时,采用了两级目录。这里配置存放文件的目录个数。 
# 如果本参数只为 N(如: 256),那么 storage server 在初次运行时,会在 store_path 下自动创建 
# N * N 个存放文件的子目录。
subdir_count_per_path=256

# tracker_server 的列表 ,会主动连接 tracker_server
# 有多个 tracker server 时,每个 tracker server 写一行
# 这里的IP地址就是本机IP地址
tracker_server=1.15.233.195:22122

# 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定。
sync_start_time=00:00
sync_end_time=23:59

# 访问端口
http.server_port=8888
3.4 配置client
vi client.conf
#tracker节点
tracker_server=1.15.233.195:22122
#日志路径
base_path=/fdfs/logs
http.tracker_server_port=8888
3.5 启动FastDFS
# 这里要先启动tracker 再启动storage
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
netstat -unltp|grep fdfs # 查看fdfs运行状态

测试:fastdfs-client-java-master.zip

4. nginx安装fastdfs插件

4.1 fastdfs-nginx-module下载
cd /fdfs
# 下载fastdfs-nginx-module模块
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 没有unzip的需要安装后才能解压
yum install unzip 
# 安装过程出现这种问题就填写y 然后按enter
Is this ok [y/d/N]: y  
# 解压
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
# 解压后的文件夹重命名
mv fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1 fastdfs-nginx-module
4.2 nginx安装fastdfs
cd /usr
# 下载nginx
wget http://nginx.org/download/nginx-1.12.1.tar.gz
# 解压
tar -zxvf nginx-1.12.1.tar.gz
# 安装nginx与fsatdfs-nginx-module
cd nginx-1.12.1
# 安装设置
./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/fdfs/fastdfs-nginx-module/src
# 编译
make
# 安装
make install
4.3 fastdfs插件配置
cd /fdfs/fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/
# 创建日志文件夹
mkdir -p /fdfs/tmp
vi /etc/fdfs/mod_fastdfs.conf
connect_timeout=10   #客户端访问文件连接超时时长(单位:秒)
base_path=/fdfs/tmp   #存储日志路径
tracker_server=1.15.233.195:22122   #tracker服务IP和端口
url_have_group_name=true  #访问链接前缀加上组名
group_name=group1  #和storage的groupname一一对应
store_path0=/fdfs/storage  #文件存储路径
4.4 配置nginx
cd /opt/nginx/conf/
vi nginx.conf
# 这个端口必须与storage server的http通信端口一致
listen: 8888
server_name: 1.15.233.195
location ~/group([0-9])/ {
	ngx_fastdfs_module;
}
4.5 启动nginx

nginx

如果有ngx_http_fastdfs_set pid=7257这样类似的信息说明启动成功

4.6 测试

使用xftp传输一张图片至 /usr目录下,这里以test.png为例

# 上传文件至fdfs
fdfs_upload_file /etc/fdfs/client.conf /usr/test.png

结果:

group1/M00/00/00/rB6Gc2N6VYeALlEEAAAMcGdeEj0255.png

这个结果就是在fastdfs上面存储的路径,当我们配置了nginx支持fastdfs后,可以直接通过nginx访问这张图片。nginx会直接去fastdfs上拉取图片数据

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/d268c70a1e.html