Linux系统搭建FastDFS文件服务(单点)

Linux系统搭建FastDFS文件服务

第一章、分布式系统介绍

1、分布式文件系统介绍

分布式文件系统 (Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件。但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。

常见的分布式文件系统有: HDFS(ASF)、MogileFS(LiveJournal)、FastDFS(余庆)、Lustre(Oracle)、GlusterFS(RedHat)等等。
image

2、分布式文件系统与传统文件系统对比

image

3、传统方式弊端

  1. 如果用户数量多,IO操作比较多,对磁盘访问压力很大
  2. 如果磁盘发生故障,会造成数据丢失
  3. 存储容量有限

第二章、FastDFS介绍

FastDFS 就是我们上述所说的专用分布式文件系统FastDFS 是基于 C 语言开发的,是一个轻量级开源的高性能分布式文件系统。主要功能有:文件存储、文件同步、文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。FastDFS 特别适合中大型网站以文件为载体的在线服务,适合存储 4KB ~ 500MB 之间的小文件,如照片共享网站、视频共享网站(图片、文档、音频、视频等等)。

FastDFS是一款国产开源软件,作者余庆项目开源地址Github: 官方论坛:

FastDFS 架构

image

1、Client

客户端,实现文件上传下载的服务器,就是我们自己的项目所部署在的服务器。通过专有接口,使用 TCP/IP 协议与跟踪服务器或存储服务器进行数据交互。 FastDFS 向使用者提供基本文件访问接口,比如 upload、download、append、delete 等,以客户端库的方式提供给用户使用。

2、Tracker Server

跟踪服务器,负责文件访问的调度和负载均衡,负责管理所有的 Storage Servergroup 组/卷。

3、Storage Server

存储服务器,负责文件存储,文件同步/备份,提供文件访问接口,文件元数据管理。以group为单位,每个 group 内可以有多台 Storage Server,数据互为备份,达到容灾的目的。每个Storage在启动以后会主动连接 Tracker,告知自己所属 group `等存储相关信息,并保持周期性心跳。

4、Group

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

5、Metadata

文件系统中存储的数据分为数据元数据两部分,数据是指文件中的实际数据,即文件的实际内容;而元数据是用来描述一个文件特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等。如果文件是一张图片,元数据就是图片的宽,高等等。

第三章、FastDFS 存储策略介绍

为了支持大容量存储,Storage 存储服务器采用了分组(或分卷)的方式。存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。一个组可以由一台或多台存储服务器组成,一个组下的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用。 当组中增加了新的服务器时,系统会自动同步已有的文件,同步完成后,系统自动将新增的服务器切换至线上提供服务。 当存储空间不足时,可以动态添加组,只需要增加一台或多台服务器,并将它们配置为一个新的组,即可扩大存储系统的容量。当你的某个应用或者模块(对应的 group)的并发过高的时候,可以直接在 group 中增加若干个 Storage 来实现负载均衡。 为了避免单个目录下的文件数太多,当 Storage 第一次启动时,会在每个数据存储目录中创建 2 级子目录,每级 256 个,总共 65536 个目录,上传的文件会以 hash 的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录。

image

机器分布:

首先要说明一下:trackerstorage 其实都是 fastdfs,只不过启动时通过不同的配置文件启动,所扮演的角色不同而已。也就是说,安装 trackerstorage 就是在安装 fastdfs,然后通过每个角色具体的配置文件启动即可。

第四章、FastDFS部署

1、依赖及必要工具部署

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake wget httpd-tools vim gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、FastDFS安装包下载方式

1、通过官网下载指定安装包

第一步:在浏览器地址栏输入:https://sourceforge.net/projects/fastdfs/files,我们会看到如下图所示界面。
image

第二步:下载FastDFS的Server安装包,点击上图"FastDFS Server Source Code",会看到如下图所示界面,选择2014-12-02那个版本,因为这个版本是最稳定的版本。
image

第三步:如下图所示界面,点击"FastDFS_v5.05.tar.gz"进行下载即可。

image

2、通过wget命令下载包

wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
wget http://nginx.org/download/nginx-1.12.1.tar.gz

3、安装libfastcommon

压缩包目录解压

tar xf V1.0.7.tar.gz 

进入解压的libfastcommon-1.0.7目录,编译

/root/libfastcommon-1.0.7/make.sh

安装

/root/libfastcommon-1.0.7/ && ./make.sh install

最后,libfastcommon.so文件到usr/lib下 ,请按照自己的实际文件路径修改被复制路径

cp /root/libfastcommon-1.0.7/src/libfastcommon.so /usr/lib

4、安装FastDFS

解压V5.05.tar.gz,然后编译安装FastDFS

tar xf V5.05.tar.gz 

安装成功后将目录conf内的文件拷贝到/etc/fdfs目录下:

cp /root/fastdfs-5.05/conf/* /etc/fdfs/

5、安装tracker

进入/etc/fdfs目录,修改tracker.conf文件。如果不存在,就拷贝tracker.conf.sample文件为tracker.conf,然后修改一下内容:

http.server_port=80 (注解:端口,80是方便默认)
store_group=group1 (注解:组名)
reserved_storage_space = 1%

创建文件夹:

mkdir -p =/home/yuqing/fastdfs

执行以下命令,把文件拷贝到指定目录:

cp /usr/bin/fdfs_trackerd /usr/local/bin/fdfs_trackerd
cp /usr/bin/fdfs_storaged /usr/local/bin/fdfs_storaged
cp /usr/bin/stop.sh /usr/local/bin/stop.sh
cp /usr/bin/restart.sh /usr/local/bin/restart.sh

启动tracker,并查看是启动成功(出现如下提示,表示启动成功):restart重启

/etc/init.d/fdfs_trackerd start
netstat  -lntup | grep tracker
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      12213/fdfs_trackerd 

image

6、安装storage

修改storage.conf文件。如果不存在,就拷贝storage.conf.sample文件为storage.conf,然后再修改:

tracker_server=192.168.150.133:22122 (连接tracker服务器地址)
group_name=group1 (必须和tracker的组名相同)
http.server_port=80 (这个端口也要改)

启动storage,并查看是否成功(出现如下提示,表示启动成功):

/etc/init.d/fdfs_storaged start
netstat -lntup | grep storaged
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      14291/fdfs_storaged

image

查看trackerstorage是不是在通信:

fdfs_monitor /etc/fdfs/storage.conf

如下提示,出现ACTIVE,表示二者均正常启动,至此就可以进行上传文件测试了。
image

7、测试图片上传

Trackerstorage都已经安装完成,使用命令测试文件上传:
FastDFS提供一个文件上传命令:/usr/bin/fdfs_test 测试文件上传。测试上传需要连接tracker服务器,连接storage服务器。因此需要指定一个配置文件:client.conf配置文件,通过Client.conf连接tracker服务器。

修改/etc/fdfsclient.conf

tracker_server=192.168.2.231:22122  (tracker端口)

测试命令

/usr/bin/fdfs_test /etc/fdfs/client.conf upload jbhd.jpg

如下图返回地址则成功
image

第五章、FastDFS通过HTTP访问

1、源码部署Nginx

# 1.解压NGINX源码包
tar xf nginx-1.12.1.tar.gz
# 2.初始化nginx
/root/nginx-1.12.1/configure
# 3.编译nginx服务
/root/nginx-1.12.1/make
# 4.安装nginx
/root/nginx-1.12.1/make install

2、安装fastdfs-nginx-module

首先解压fastdfs-nginx-module_v1.16.tar.gz:

tar xf fastdfs-nginx-module_v1.16.tar.gz

修改/fastdfs-nginx-module/src/config文件。去掉所有的local(三个)
image

拷贝usr/lib64目录下库文件libfdfsclient.so

cp /usr/lib64/libfdfsclient.so /usr/lib

module添加nginx中。通过设置安装参数方式添加模块。

/root/nginx-1.12.1/configure --add-module=/root/fastdfs-nginx-module/src

重新编译安装NGINX

/root/nginx-1.12.1/make
/root/nginx-1.12.1/make install

查看Nginx的模块

 /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) 
configure arguments: --add-module=/root/fastdfs-nginx-module/src

image

复制 fastdfs-nginx-module 源码中的配置文件到/etc/fdfs 目录, 并修改

cd fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/

进入/etc/fdfs/修改mod_fastdfs.conf如下配置,其他默认

# 连接超时时间
connect_timeout=10
# Tracker Server
tracker_server=192.168.150.133:22122
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true

配置Nginx

vim /usr/local/nginx/conf/nginx.conf

修改配置,其它的默认,在80端口下添加fastdfs-nginx模块

location ~/group([0-9])/M00 {
    ngx_fastdfs_module;
}
cat /usr/local/nginx/conf/nginx.conf
#user  nobody;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  192.168.150.133;
        location ~/group([0-9])/M00 {
            ngx_fastdfs_module;
        }
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

注意:

  1. listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 (前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口,如果防火墙已关闭,则不用配置防火墙。
  2. location的配置,如果有多个group则配置location ~/group([0-9])/M00,没有则不用配group

启动nginx

#启动nginx
/usr/local/nginx/sbin/nginx
#设置开机启动
vim /etc/rc.local
/usr/local/nginx/sbin/nginx
# 设置执行权限
chmod 755 /etc/rc.local 

查看Nginx是否启动

 ps -ef | grep nginx
root     15899 21620  0 21:34 pts/0    00:00:00 grep --color=auto nginx
root     24437     1  0 17:50 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody   24438 24437  0 17:50 ?        00:00:00 nginx: worker process

image

在地址栏中访问成功:http://192.168.150.133/group1/M00/00/00/wKiWhWJf16iATa_kAAGjV6gKGUk859_big.jpg
image

注意:

  1. group2同组的Storage2Storage3 FastDFS服务端口必须一致: port=23000
  2. 一台服务器可以装多个组(group)但不能装同组的多个Storage,日志会报错误,日志报错原因是"注意1"
  3. Version 4.05之前fastdfs内部绑定了libevent作为http服务器.Version 4.05之后的版本删除了内置的web http服务,内置的web http服务是个累赘,不用也罢!
  4. 启动storage server时,一直处于僵死状态.启动storage serverstorage将连接tracker server,如果连不上,将一直重试。直到连接成功,启动才算真正完成!如果集群中有2台tracker server,而其中一台tracker没有启动,可能会导致storage server一直处于僵死状态。
posted @ 2022-04-20 21:44  婷婷~玉立  阅读(7)  评论(0编辑  收藏  举报