FastDFS服务
1.介绍
- FastDFS 是一个开源的高性能分布式文件系统(DFS)。
- 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。
- 主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
2.角色介绍
FastDFS 系统有三个角色:
跟踪服务器(Tracker Server) 存储服务器(Storage Server) 客户端(Client)。
Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。
3.存储策略
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS 安装(源码安装)
实验环境介绍
前面我们介绍了一些fastDFS的基本概念下面
我们来介绍一下当前的实验环境:
在您的左侧是关于实验的说明,在您的右边是一个Cent OS 7 的操作面板。
在您当前的工作目录 /root 下我们已经为您下载好了fastdfs
源码, 您可以使用ls进行查看。
1. 环境准备(实验环境已经下载完成,仅供参考)
1.fastDFS下载
下载地址:https://github.com/happyfish100
下载的安装包如下
libfatscommon:FastDFS分离出的一些公用函数包
FastDFS:FastDFS程序
fastdfs-nginx-module:FastDFS和nginx的关联模块
2.nginx 下载
下载地址:http://nginx.org/en/download.html
下载安装包:1.16.1
3.安装fastdfs 需要的插件
yum install -y gcc gcc-c++
yum -y install libevent
环境准备完成了,我们来正式开始安装吧
2. libfastcommon服务安装
libfastcommon
为FastDFS操作的基础库,FastDFS没有使用标准的库,而是封装了一 套和FastDFS相关的库,下面我们使用make脚本进行安装 libfastcommon
/root/libfastcommon-master/make.sh install
安装成功可以从控制台看到安装目录为
/usr/lib64
/usr/lib
/usr/incloude/fastcommon
3. fastdfs 主程序安装
前面我们介绍了,fastdfs
主要的角色为storage tracker
和客户端
所以主程序主要提供storage
和 tracker
的配置文件和启动脚本
下面让我们开始安装主程序吧
/root/fastdfs-master/make.sh install
从控制台可以看到安装完成后目录为
mkdir -p /usr/bin
mkdir -p /etc/fdfs
mkdir -p /usr/lib64
mkdir -p /usr/lib
4. 配置文件同步
下面我们把安装文件夹下的配置,拷贝到/etc/fdfs 目录下,来进行服务启动之前的配置吧
/root/fastdfs-master/conf/* /etc/fdfs
5.配置tracker服务
我们先回顾一下tracekr的概念,跟踪服务器,主要做调度工作,起到流量均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
tracker服务是客户端请求和storage存储的重要桥梁,下面我们来配置它
首先我们进入fdfs目录创建tracker目录
cd /etc/fdfs
mkdir -p /usr/local/fastdfs/tracker
下面我们修改tracker配置文件,保存并退出
修改的主要内容是tracker数据的base目录
vim tracker.conf
base_path=/usr/local/fastdfs/tracker
6.启动tracker服务
配置都完成了,下面我们通过fastdfs提供的tracker启动程序来启动traceker服务吧
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
到现在已经完成了tracker的启动,那么启动的是否正常呢,我们通过
检查进程启动情况,来检查一下服务是否启动完成
ps -ef |grep "tracker"
7. 配置storage服务
tracker服务已经启动完成了,接下来我们来启动storage服务,先来回顾一下storage服务的概念
存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
本次实验我们以一台storage为例,下面我们进行storage的配置吧
首先进入storage的目录
cd /etc/fdfs
mkdir -p /usr/local/fastdfs/storage
下面我们需要修改storage的工作空间,还有存储空间
因为storage需要和tracker交互存储客户端传来的数据,所以我们还需要配置
tracker的地址,我们开始进行配置
vim storage.conf
# 修改storage的工作空间
base_path=/usr/local/fastdfs/storage
# 修改storage的存储空间
store_path0=/usr/local/fastdfs/storage
# 修改tracker的地址和端口号,用于心跳
tracker_server=本机IP地址:22122
8. 启动storage服务
配置完成后,让我们用fastdfs的storage的启动命令,来启动它吧
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
服务启动完成了,我们还是先来检查服务启动情况
ps -ef |grep "storage"
9. 客户端配置
前面服务端已经安装完成了。下面我们来安装客户端并且进行服务的整体测试
首先进入client目录,修改client配置文件
cd /etc/fdfs
mkdir /usr/local/fastdfs/client
我们先修改客户端的base目录,在修改
tracker的ip,修改的时候需要根据实际tracker的ip地址来进行修改
vim client.conf
base_path=/usr/local/fastdfs/client
tracker_server=本机IP地址:22122
10.测试上传图片
恭喜你,到现在fastdfs已经安装完成了,下面我们通过一张测试图片来测试服务
可以上传/etc/fdfs 目录下的anti-steal.jpg 图片测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg
上传成功以后文件存储目录
/usr/local/fastdfs/storage/data
11. fastdfs_nginx模块安装准备
因为fastdfs安装好以后是无法通过http访问的,这个时候就需要借助nginx了,所以我们需要安装fastdfs的第三方模块到nginx中。
nginx 和 fastdfs 要在一个节点上,下面我们开始配置安装nginx吧
1.首先复制mod_fastdfs文件到 fdfs
cp /root/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs
2.接下来修改/fastdfs-nginx-module/src/config文件,主要是修改路径,把local删除,因为fastdfs安装的时候我们没有修改路径,原路径是/usr
所以我们要修改这2个配置
ngx_module_incs=“/usr/include”
CORE_INCS=“$CORE_INCS /usr/include”
vim /root/fastdfs-nginx-module-master/src
ngx_addon_name=ngx_http_fastdfs_module
if test -n "${ngx_module_link}"; then
ngx_module_type=HTTP
ngx_module_name=$ngx_addon_name
ngx_module_incs="/usr/include"
ngx_module_libs="-lfastcommon -lfdfsclient"
ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
ngx_module_deps=
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
. auto/module
else
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include"
CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi
~
12.安装nginx
1.要安装nginx之前,我们先安装一些必备的软件
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
mkdir -p /var/temp/nginx
2.因为要进行编译安装所以我们需要设置一下nginx的pid, 日志模块
端口转发等功能模块的路径
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--add-module=/root/fastdfs-nginx-module-master/src
3.安装
配置完成后,我们通过make来进行服务的安装
make && make install
4.启动
启动之前我们先通过nginx -t来检查一下配置是否正常
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx
13. fastdfs_nginx模块配置
配置fastdfs-nginx 模块之前我们先来介绍一下模块
- FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储, 但是同组存储服务器之间需要进行文件复制, 有同步延迟的问题
- 假设 Tracker 服务器将文件上传到了 10.0.10.121,上传成功后文件 ID已经返回给客户端。
- 此时 FastDFS 存储集群机制会将这个文件同步到同组存储 10.0.10.121,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 10.0.10.121 上取文件,就会出现文件无法访问的错误
- 而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
我们来修改/etc/mod_fastdfs.conf
mkdir /usr/local/fastdfs/tmp
vim /etc/mod_fastdfs.conf
base_path=/usr/local/fastdfs/tmp
#tracker地址
tracker_server=本机IP地址:22122
url_have_group_name = true
store0_path=/usr/local/fastdfs/storage
添加nginx 关于fastdfs配置
vim /usr/local/nginx/conf # 在http模块追加配置
server {
listen 8888;
server_name localhost;
location /group1/M00 {
ngx_fastdfs_module;
}
}
/usr/local/nginx/sbin/nginx -t 验证
/usr/local/nginx/sbin/nginx -s reload 重启nginx
14 访问验证
nginx配置完成后,服务就全安装完成了,我们来测试一下
http://服务IP地址:8888/group1/M00/00/00/CgAKeWG6-bqAZQw-AABdreSfEnY878_big.jpg
FastDFS 安装(docker安装)
1. 获取FastDFS镜像
概念和宿主机一样,我们首先来拉取fastdfs镜像
sudo docker image pull delron/fastdfs:latest
mkdir /var/fdfs/tracker
mkdir /var/fdfs/storage
2.运行tracker 容器
我们将 tracker 运行目录映射到宿主机的 /var/fdfs/tracker目录中。
docker run -dit --name tracker \
--network=host \
-v /var/fdfs/tracker:/var/fdfs \
delron/fastdfs tracker \
3.运行storage 容器
- TRACKER_SERVER=Tracker的ip地址:22122(Tracker的ip地址不要使用127.0.0.1)
- 将 storage 运行目录映射到宿主机的 /var/fdfs/storage目录中。
docker run -dti --name storage \
--network=host \
-e TRACKER_SERVER=宿主机IP:22122 \
-v /var/fdfs/storage:/var/fdfs \
delron/fastdfs storage \
4.客户端测试(和宿主机安装方式一样)
修改client配置文件
cd /etc/fdfs
mkdir /usr/local/fastdfs/client
tracker的ip根据实际tracker的ip地址配置
vim client.conf
base_path=/usr/local/fastdfs/client
tracker_server=本机IP地址:22122
5.测试上传图片
可以上传/etc/fdfs 目录下的anti-steal.jpg 图片测试
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg