FastDFS单节点安装

什么是 FastDFS?
FastDFS 是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:文件大小为 4KB-500MB)为载体的在线服务,如相册网站、视频网站等等。在 UC 基于 FastDFS 开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。

FastDFS 是一款开源的轻量级分布式文件系统纯 C 实现,支持 Linux、FreeBSD 等 UNIX系统类 google FS,不是通用的文件系统,只能通过专有 API 访问,目前提供了 C、Java 和 PHP API 为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性 FastDFS 可以看做是基于文件的 key value pair 存储系统,称作分布式文件存储服务更为合适。

FastDFS 服务端有三个角色:跟踪服务器(tracker)、存储服务器(storage)和客户端(client)。

在这里插入图片描述
Tracker:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。不记录文件索引信息,占用的内存量很少。

Tracker 是 FastDFS 的协调者,负责管理所有的 storage 和 group,每个 storage 在启动后会连接 Tracker,告知自己所属的 group 等信息,并保持周期性的心跳,tracker根据 storage 的心跳信息,建立 grou 与 storage 的映射表Tracker 需要管理的元信息很少,会全部存储在内存中;另外 tracker 上的元信息都是由 storage 汇报的信息生成的,本身不需要持久化任何数据,这样使得 tracker 非常容易扩展,直接增加 tracker 机器即可扩展为 tracker cluster 来服务,cluster 里每个 tracker 之间是完全对等的,所有的 tracker 都接受 stroage 的心跳信息,生成元数据信息来提供读写服务。

group :组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage 之间是对等的, 文件上传、 删除等操作可以在任意一台 storage 上进行 。

Storage:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage 直接利用 OS 的文件系统调用管理文件。Storage 以组(卷,group 或 volume)为单位组织,一个 group 内包含多台 storage 机
器,数据互为备份,存储空间以 group 内容量最小的 storage 为准,所以建议 group内的多个 storage 尽量配置相同,以免造成存储空间的浪费。

以 group 为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group 内storage 数量即为该 group 的副本数),比如将不同应用数据存到不同的 group 就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的 group 来做负载均衡;缺点是 group 的容量受单机存储容量的限制,同时当 group 内有机器坏掉时,数据恢复只能依赖 group 内地其他机器,使得恢复时间会很长。

group 内每个 storage 的存储依赖于本地文件系统,storage 可配置多个数据存储目录,比如有 10 块磁盘,分别挂载在 /data/disk1-/data/disk10,则可将这 10 个目录都配置为 storage 的数据存储目录。

storage 接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在 storage 第一次启动时,会在每个数据存储目录里创建 2 级子目录,每级 256 个,总共 65536 个文件,新写的文件会以 hash 的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

lient:客户端,作为业务请求的发起方,通过专有接口,使用 TCP/IP 协议与跟踪器服务器或存储节点进行数据交互。FastDFS 向使用者提供基本文件访问接口,比如upload、download、append、delete 等,以客户端库的方式提供给用户使用。

Tracker 相当于 FastDFS 的大脑,不论是上传还是下载都是通过 tracker 来分配资源;客户端一般可以使用 ngnix 等静态服务器来调用或者做一部分的缓存;存储服务器内部分为组,组与组之间是平行的关系,之间不可以通信,可以根据资源的使用情况随时增加,组内服务器文件相互同步备份,以达到容灾的目的,类似于 RAID 1。
上传机制:
在这里插入图片描述
下载机制:
在这里插入图片描述

单节点FastDFS安装
首先在两台虚拟机都安装部署 gcc 环境的依赖包

yum install -y make cmake gcc gcc-c++ 

在两台虚拟机上都使用 git clone 命令下载所需的安装包
git clone https://github.com/happyfish100/libfastcommon.git
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
首先安装libfastcommon

cd /opt/libfastcommon/
./make.sh
./make.sh install

接下来安装fastDFS

tar zxf V5.05.tar.gz
cd fastdfs-5.05/
./make.sh
./make.sh install

安装后生成的/etc/fdfs目录就是我们的配置目录,里面包含配置文件模板

复制配置文件到/etc/fdfs目录下

cp conf/* /etc/fdfs/

配置跟踪服务文件

vim /etc/fdfs/tracker.conf
修改内容如下:
# 启用配置文件
disabled=false		
#存储日志和数据的根目录
base_path=/fastdfs/tracker
#默认端口
port=22122

保存退出,创建文件夹并启动。

mkdir /fastdfs/tracker -p
fdfs_trackerd /etc/fdfs/tracker.conf
netstat -anput | grep 22122
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      28397/fdfs_trackerd
#关闭
fdfs_trackerd /etc/fdfs/tracker.conf stop

配置存储服务文件

vim /etc/fdfs/storage.conf
修改内容如下:
#启动配置
disabled=false
# 数据和日志文件存储根目录
base_path=/fastdfs/storage
store_path0=/fastdfs/storage
#第一个存储目录
tracker_server=0.0.0.0:22122
# http访问文件的端口
http.server_port=8888

http.server_port=8888 指的是在tracker服务器上启动http服务进程,如:apache或者nginx 启动时所监听的端口。

保存退出,创建文件夹并启动。

mkdir /fastdfs/storage
fdfs_storaged /etc/fdfs/storage.conf
netstat -anput | grep storage
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      28644/fdfs_storaged 
tcp        0      0 127.0.0.1:52004         127.0.0.1:22122         ESTABLISHED 28644/fdfs_storaged 

配置客户端文件

vim /etc/fdfs/client.conf
修改内容如下:
base_path=/fastdfs/client
tracker_server=0.0.0.0:22122

保存退出,创建文件夹。

mkdir /fastdfs/client

上传文件测试。

fdfs_test /etc/fdfs/client.conf upload /root/1.jpg

This is FastDFS client test program v5.05

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.csource.org/ 
for more detail.

[2020-01-10 03:08:51] DEBUG - base_path=/fastdfs/client, connect_timeout=30, 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=127.0.0.1, port=23000

group_name=group1, ip_addr=127.0.0.1, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423.jpg
source ip address: 127.0.0.1
file timestamp=2020-01-10 03:08:51
file size=99773
file crc32=632648544
example file url: http://127.0.0.1/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg
source ip address: 127.0.0.1
file timestamp=2020-01-10 03:08:51
file size=99773
file crc32=632648544
example file url: http://127.0.0.1/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg

返回url路径即正确。

这些命令是我们安装 FastDFS 生成的命令 ,这次测试我们将使用以下几个命令
fdfs_upload_file 
Usage: fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
用于上传文件 用法为 fdfs_upload_file + 配置文件 + 文件
fdfs_download_file 
Usage: fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> 
<download_bytes>]
用于下载文件 用法为 fdfs_download_file + 配置文件 + 文件
fdfs_file_info
Usage: fdfs_file_info <config_file> <file_id>
用于查看文件信息 用法为 fdfs_file_info + 配置文件 + 文件
fdfs_delete_file 
Usage: fdfs_delete_file <config_file> <file_id>
用于删除文件 用法为 fdfs_delete_file + 配置文件 + 文件
fdfs_monitor 
Usage: fdfs_monitor <config_file> [-h <tracker_server>] [list|delete|set_trunk_server 
<group_name> [storage_id]]
用于查看集群信息 用法为 fdfs_monitor + 配置文件

FastDFS和nginx整合
安装fastdfs-nginx-module
FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进入文件复制, 有同步延迟的问题。假设 Tracker 服务器将文件上传到了 192.168.50.137,上传成功后文件 ID已经返回给客户端。此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.50.138,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.50.138 上取文件,就会出现文件无法访问的错误。而 fastdfs-nginx-module 可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。(解压后的 fastdfs-nginx-module 在 nginx 安装时使用)

wget wget https://github.com/happyfish100/fastdfs-nginx-module/archive/5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip
unzip 5e5f3566bbfa57418b5506aaefbe107a42c9fcb1.zip

在Tracker上安装Nginx

yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar zxf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre --with-http_ssl_module --with-http_gzip_static_module --user=nginx --group=nginx --add-module=/opt/fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1/src/ && make && make install
cd /opt/fastdfs-nginx-module-5e5f3566bbfa57418b5506aaefbe107a42c9fcb1/src/
cp mod_fastdfs.conf /etc/fdfs/

配置mod_fastdfs.conf文件

vim /etc/fdfs/mod_fastdfs.conf
修改内容如下:
#存储日志文件的基本路径
base_path=/fastdfs/tmp
#必须与storage路径相同
store_path0=/fastdfs/storage
#跟踪服务器iP地址
tracker_server=192.168.2.16:22122
storage_server_port=23000 

创建文件夹

mkdir /fastdfs/tmp

修改nginx的配置文件

vim /usr/local/nginx/conf/nginx.conf
修改内容如下:
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /group1/M00 {
                alias /fastdfs/storage/data;
        }

保存退出并启动nginx

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/usr/local/nginx/sbin/nginx

访问 http://IP地址/group1/M00/00/00/fwAAAV4YMROARwaxAAGFvSW1c2A423_big.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章