Linux下FastDFS的安装、测试与部署实战

·  阅读 222

一、简介

1. FastDFS简介

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

传统方式弊端:

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

常见的分布式文件系统有:FastDFS、GFS、HDFS、Lustre 、Ceph 、GridFS 、mogileFS、TFS等。

在这里插入图片描述 FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。

FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。

FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

2. FastDFS整体架构

FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端

  • 客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和PHP几种编程语言的API,用来访问FastDFS文件系统。
  • 服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage)
    • 跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。tracker会记录ip,端口,名字,磁盘路径等,因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。
    • 存储节点(storage)用于存储文件,包括文件和文件属性(meta data:扩展名,类型,大小,简单名字,一般存在数据库中)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。

二、FastDFS环境搭建

1. 安装需要的库

检查Linux上是否安装了 gcc、libevent、libevent-devel,若没有安装则安装:

yum install gcc libevent libevent-devel -y
复制代码

2. 安装 libfastcommon 库

libfastcommon 库是 FastDFS 文件系统运行需要的公共 C 语言函数库

下载地址:github.com/happyfish10…

  1. 将下载好的 libfastcommon 文件上传到Linuxs(/home/soft)

  2. 解压下载下来的tar.gz压缩包到当前目录

    tar -zxvf libfastcommon-1.0.36.tar.gz
    复制代码
  3. 切换到解压后的libfastcommon目录,执行make脚本进行编译

    ./make.sh
    复制代码

    注意: make编译的时候如果报错,需解决错误后再次进行make,通常发生错误是由于Linux缺少某些依赖库导致,根据错误提示解决错误

  4. 执行make install进行安装

    ./make.sh install
    复制代码

3. 安装FastDFS

FastDFS没有Windows版本,不能在Windows下使用。FastDFS需要安装部署在Linux环境下,我们这里使用的是fastdfs-5.11版本(201901) 下载地址:github.com/happyfish10…

安装步骤与libfastcommon 类似:

  1. 将下载好的FastDFS文件上传到Linux(home/soft)

  2. 解压下载下来的tar.gz压缩包到当前目录

    tar -zxvf fastdfs-5.11.tar.gz
    复制代码
  3. 切换到解压后FastDFS的目录,执行make脚本进行编译

    ./make.sh
    复制代码
  4. 执行make install进行安装

    ./make.sh install
    复制代码

4. 查看编译后的文件

FastDFS所有编译出来的文件存放在/usr/bin目录下,所有配置文件存放在/etc/fdfs目录下

  • 查看FastDFS相关的可执行程序:

    ll /usr/bin/fdfs*
    复制代码

    在这里插入图片描述

/usr/bin是Linux的环境变量,可通过echo $PATH查看

  • 查看FastDFS的配置文件
    ll /etc/fdfs/
    复制代码

另外注意需要把解压后的fastdfs-5.11/conf目录下的两个文件拷贝到/etc/fdfs/ ,否则后续会有很多奇怪问题不好解决

cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
复制代码

5. FastDFS配置

去掉/etc/fdfs/目录下FastDFS配置文件的后缀名 .sample

注意:配置文件中不要出现中文,另外别忘了创建配置文件中指定的目录

(1)修改tracker.conf文件

base_path=/opt/fastdfs/tracker		#配置tracker存储数据的目录,需要手动创建
复制代码

(2)修改storage.conf文件

base_path=/opt/fastdfs/storage 			#storage存储数据目录,需要手动创建
store_path_count=1                      #指定真正存放文件的目录的个数
store_path0=/opt/fastdfs/storage/files 	#真正存放文件的目录,需要手动创建,可以指定多个,和store_path_count搭配修改
tracker_server=192.168.29.128:22122 	#注册当前存储节点的跟踪器地址,默认端口号为22122
复制代码

(3)创建上面指定的三个目录

6. FastDFS启动

(1)启动tracker服务

在任意目录下执行:

fdfs_trackerd /etc/fdfs/tracker.conf
复制代码

(2)启动storage服务

在任意目录下执行:

fdfs_storaged /etc/fdfs/storage.conf
复制代码

(3)查看storage是否已经注册到了tracker下

fdfs_monitor /etc/fdfs/storage.conf
复制代码

在这里插入图片描述

(4)存储文件的目录

首次启动storage后,会在配置的路径下创建存储文件的目录 在这里插入图片描述

7. FastDFS重启

重启tracker:fdfs_trackerd /etc/fdfs/tracker.conf restart 重启storage:fdfs_storaged /etc/fdfs/storage.conf restart

8. FastDFS关闭

关闭tracker执行命令:fdfs_trackerd /etc/fdfs/tracker.conf stop 关闭storage执行命令:fdfs_storaged /etc/fdfs/storage.conf stop

或者kill关闭fastdfs,但不建议在线上使用 kill -9 强制关闭,因为可能会导致文件信息不同步问题

9. 使用fdfs_test进行测试

(1)修改client.conf配置文件,修改两个配置

这个文件的配置文件是专门用来配置storage客户端的,只有在使用命令的时候才有用

base_path=/opt/fastdfs/client         # 存放日志的目录,需要手动创建
tracker_server=192.168.179.128:22122  # 注册当前存储节点的跟踪器地址,默认端口号为22122
复制代码

创建base_path指定的目录

(2)fdfs命令格式

  • 上传文件命令:fdfs_test <config_file> <operation> <local_filename>
    • config_file:配置文件的位置
    • operation:upload,download,getmeta,setmeta,delete and query_servers,上传使用的是upload
    • local_filename:要上传的文件名字
  • 下载文件命令:fdfs_test <config_file> download <group_name> <remote_filename>
    • group_name: 要下载的文件所在的组名
    • remote_filename:要下载的文件名(要指定在fastDFS中存储的名字)
  • 删除文件命令:fdfs_test <config_file> delete <group_name> <remote_filename>

(3)执行上传命令

执行上传命令后,会得到如下的信息: 在这里插入图片描述 FastDFS生成的文件目录结构及名称示例: 在这里插入图片描述 跟据得到的文件位置remote_filename=M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt,可以在相应的目录中查看存储后的文件: 在这里插入图片描述

(4)删除文件

有两个命令:

fdfs_delete_file /etc/fdfs/client.conf 组名/远程文件
例如:fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt
或者:
fdfs_test /etc/fdfs/client.conf delete 组名 远程文件名
例如:fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt
复制代码

(5)注意

  • 没有搭建集群默认只有一个组group1
  • 后缀名包含-m的为属性文件(meta)
  • 在Linux中并没有磁盘一说,是虚拟的

三、FastDFS的HTTP访问

FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件

1. 安装Nginx并且添加FastDFS模块

  1. 检查并安装 Nginx 依赖的库:

    yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel –y
    复制代码
  2. 将Fastdfs的Nginx扩展模块源代码上传到Linux上,并解压

    unzip fastdfs-nginx-module-master.zip
    复制代码
  3. 因为FastDFS模块必须在Nginx的安装的过程中才能添加,所以需要重新安装一个nginx,为了和原来已安装的Nginx进行区分,我们把新安装的Nginx取名为nginx_fdfs

  4. 将Nginx的tar包上传到Linux上,并解压:

    tar -axvf nginx-1.14.2.tar.gz
    复制代码
  5. 切换至解压后的Nginx主目录,执行配置操作

    ./configure --prefix=/usr/local/nginx_fdfs --add-module=/home/soft/fastdfs-nginx-module-master/src
    复制代码
    • --prefix:指定nginx安装路径
    • --add-module:指定fastDFS的nginx模块的源代码路径
  6. 进行编译

    make
    复制代码
  7. 进行安装

    make install
    复制代码

2. 配置Nginx

  1. 将/home/soft/fastdfs-nginx-module-master/src(自己实际存放Nginx扩展模块的目录)目录下的mod_fastdfs.conf文件拷贝到 /etc/fdfs/目录下,这样才能正常启动Nginx

    cp /home/soft/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
    复制代码
  2. 修改mod_fastdfs.conf配置文件:

    base_path=/opt/fastdfs/nginx_mod         # 指定日志存放位置,目录依然是手动创建
    tracker_server=192.168.29.128:22122      # 指定tracker的ip和端口
    storage_server_port=23000				 # storage服务的端口
    group_name=group1						 # 组名
    url_have_group_name = true				 # true表示请求的路径包含组名,默认为false,为false时,组名默认为上面group_name指定的值
    store_path0=/opt/fastdfs/storage/files	 # 指定文件存放的位置
    复制代码
  3. 创建上面指定的目录/opt/fastdfs/nginx_mod

  4. 配置Nginx的配置文件:

    #拦截请求路径中包含 /group[1-9]/M0[0-9] 的请求,用 fastdfs的Nginx 模块进行转发
    location ~ /group[1-9]/M0[0-9] {	
         ngx_fastdfs_module;  
    }
    复制代码
    • ngx_fastdfs_module; :这个指令不是Nginx本身提供的,是扩展模块提供的,根据这个指令找到FastDFS提供的Nginx模块配置文件,然后找到tracker,最终找到stroager

3. 启动带有Fastdfs模块的Nginx

  1. 正常启动Nginx即可:

    /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf
    复制代码
  2. 在浏览器中访问上传的文件

文件的上传信息中,会有一个example file url,直接将该属性后面的地址拷到浏览器中即可访问

如果浏览器可以解析文件格式,则会直接解析,否则会提供一个下载框进行下载
复制代码
  1. 当遇到400错误,检查配置/etc/fdfs/mod_fastdfs.conf url_have_group_name=true ,配置表示访问路径中是否需要带有group1,改为true表示路径中需要有group1

4. HTTP访问流程

在这里插入图片描述

四、分布式集群搭建实战

1. 架构图

首先在虚拟机中安装了6个最小版的Linux,占用磁盘及资源小,ip为从129-134,还有一个最上面的Nginx,是我之前用的Linux,ip为128,共七台Linux 在这里插入图片描述

2. 部署分布式FastDFS

  1. 安装6个迷你版的Linux,迷你版Linux没有图形界面,占用磁盘及资源小,企业里面使用的Linux都是没有图形界面的Linux;

    可能安装的linux(无图形的)没有开启网卡服务,可以修改/etc/sysconfig/network-scripts 下的网卡配置文件设置

    ONBOOT=yse   # 表示开机启动网卡
    复制代码

    然后重启网络服务即可:

    service network restart
    复制代码
  2. 由于迷你版Linux缺少一些常用的工具库,操作起来不方便,推荐安装如下的工具库:

    yum install lrzsz wget vim unzip net-tools -y
    复制代码

    安装nginx及fastdfs需要的库依赖:

    yum install gcc perl openssl openssl-devel pcre pcre-devel zlib zlib-devel libevent libevent-devel -y
    复制代码

    关闭防火墙,两个命令:

    systemctl stop firewalld     # 停止防火墙
    systemctl disable firewalld  # 禁用开机启动防火墙
    复制代码
  3. 安装fastdfs

(1)上传fastdfs的安装包和libfastcommon的安装包 (2)解压libfastcommon 安装libfastcommon (3)解压fastdfs 安装fastdfs (4)拷贝fastdfs目录中的http.conf和mime.types到/etc/fdfs 目录中 注:6台机器全部执行这些操作

同时操作多个Xshell窗口的小技巧:点击:查看-->撰写-->撰写栏 打开撰写栏(Xshell底部),点击撰写栏左侧的图标,可以选择将当前的命令发送到哪些窗口 注意:以下命令不要发送到多个窗口:上传(rz),下载(sz)

  1. 部署两个tracker server服务器,需要做的工作:

    (1) 修改两个tracker服务器的配置文件 tracker.conf 修改一个地方:

    base_path=/opt/fastdfs/tracker   #设置tracker的数据文件和日志目录(需预先创建)
    #FastDFS默认是带有负载均衡策略的
    # 0 轮询
    # 1 访问指定的组
    # 2 选择磁盘空间小的优先存放 默认值
    store_lookup=0 
    
    复制代码

    (2)启动tracker服务器

    fdfs_trackerd /etc/fdfs/tracker.conf
    复制代码
  2. 修改两个组中的4台storage中storage.conf文件(同一组中的两台配置相同) (1)第一组group1的两个storage server(修改storage.conf配置文件):

    group_name=group1   #组名,根据实际情况修改,值为 group1 或 group2
    base_path=/opt/fastdfs/storage   #设置storage的日志目录(需预先创建)
    store_path0=/opt/fastdfs/storage/files    #存储路径(需预先创建)
    tracker_server=192.168.230.129:22122  #tracker服务器的IP地址以及端口号,配2个
    tracker_server=192.168.230.130:22122
    复制代码

    (2)第二组group2的两个storage server(修改storage.conf配置文件):

    group_name=group2   #组名,根据实际情况修改,值为 group1 或 group2
    base_path=/opt/fastdfs/storage   #设置storage的日志目录(需预先创建)
    store_path0=/opt/fastdfs/storage/files    #存储路径(需预先创建)
    tracker_server=192.168.230.129:22122  #tracker服务器的IP地址以及端口号
    tracker_server=192.168.230.130:22122
    复制代码

    (3)启动4台storage服务器

    fdfs_storaged /etc/fdfs/storage.conf
    复制代码

    (4)测试 测试FastDFS的6台机器是否可以上传文件,是否为轮询的上传策略

至此,一个FastDFS的分布式文件系统集群就搭建好了。

3. 部署FastDFS中的Nginx

  1. 安装Nginx,使用nginx 对fastdfs 进行负载均衡 (1)添加nginx的安装依赖

    yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
    复制代码

    (2)解压nginx

    tar -zxvf  nginx-1.12.2.tar.gz
    复制代码

    (3)解压fastdfs扩展模块

    unzip fastdfs-nginx-module-master.zip
    复制代码

    (4)配置nginx的安装信息 2台tracker服务器的配置信息(不需要fastdfs模块):

    ./configure --prefix=/usr/local/nginx_fdfs
    复制代码

    4台storage服务器其的配置信息(需要使用fastdfs模块):

    ./configure --prefix=/usr/local/nginx_fdfs --add-module=/root/fastdfs-nginx-module-master/src
    复制代码

    (5)编译并安装nginx

    ./make
    ./make install
    复制代码

    (6)4台storage的服务器需要拷贝mod_fastdfs.conf文件 将/root/fastdfs-nginx-module-master/src目录下的mod_fastdfs.conf文件拷贝到 /etc/fdfs/目录下,这样才能正常启动Nginx;

  2. 配置tracker 的两台机器的nginx (1)进入安装目录

    cd /usr/local/nginx_fdfs
    复制代码

    (2)添加一个location 对请求进行拦截,配置一个正则规则 拦截fastdfs的文件路径, 并将请求转发到其余的4台storage服务器(修改 conf目录下nginx.conf 文件)

    #nginx拦截请求路径:
    location ~ /group[1-9]/M0[0-9] {   
    	proxy_pass http://fastdfs_group_server; 
    }
    复制代码

    (3)添加一个upstream 执行服务的IP为 另外的4台stroage 的地址

    #部署配置nginx负载均衡:
    upstream fastdfs_group_server {  
    	server 192.168.230.131:80;  
    	server 192.168.230.132:80;
    	server 192.168.230.133:80;  
    	server 192.168.230.134:80;  
    }
    复制代码
  3. 配置另外4台storage的nginx添加http访问的请求路径拦截 (1)进入安装目录

    cd /usr/local/nginx_fdfs
    复制代码

    (2)添加一个location 对请求进行拦截,配置一个正则规则 拦截fastdfs的文件路径,使用fastdfs的nginx模块转发请求(修改 conf目录下nginx.conf 文件)

    #nginx拦截请求路径:
    location ~ /group[1-9]/M0[0-9] {   
    	ngx_fastdfs_module;
    }
    复制代码
  4. 分别修改4台storage服务器的mod_fasfdfs.conf文件(/etc/fdfs/mod_fastdfs.conf)(同一组的配置文件操作相同)

    #修改基本路径,并在指定路径创建对应文件夹
    base_path=/opt/fastdfs/nginx_mod #保存日志目录(需预先创建)
    #指定两台tracker服务器的ip和端口
    tracker_server=192.168.230.129:22122  #tracker服务器的IP地址以及端口号
    tracker_server=192.168.230.130:22122
    #指定storage服务器的端口号
    storage_server_port=23000 #通常情况不需要修改
    #指定当前的storage服务器所属的组名 (当前案例131和132为group1,133和134为group2)
    group_name=group1  #当前服务器的group名
    #指定url路径中是否包含组名 (当前案例url包含组名)
    url_have_group_name=true     #文件url中是否有group名
    store_path_count=1           #存储路径个数,需要和store_path个数匹配(一般不用改)
    store_path0=/opt/fastdfs/storage/files    #存储路径
    #指定组个数,根据实际配置决定,(当前案例拥有2个组group1和group2)
    group_count = 2                   #设置组的个数
    
    # 在文件末尾增加2个组的具体信息:
    # group1增加这个:
    group_name=group1
    storage_server_port=23000
    store_path_count=1
    store_path0=/opt/fastdfs/storage/files
    
    # group2增加这个:
    group_name=group2
    storage_server_port=23000
    store_path_count=1
    store_path0=/opt/fastdfs/storage/files
    复制代码
  5. 启动Nginx (1)测试nginx的配置文件是否正确(测试全部6台服务器)

    /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf -t
    复制代码

    (2)启动nginx服务器(全部6台服务器)

    /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf
    复制代码
  6. 测试:使用浏览器分别访问 6台 服务器中的fastdfs文件

  7. 访问流程: 浏览器不管访问 6 台Nginx中的哪个(最上面的主Nginx暂时还没配),都会先去找到tracker,再去访问到storage。

    在这里插入图片描述

4. 部署入口Nginx

部署前端用户访问入口服务器,即访问192.168.230.128上的Nginx,该Nginx负载均衡到后端2个tracker server;

  1. 配置nginx.conf文件

    location ~ /group[1-9]/M0[0-9] {   
    	proxy_pass http://fastdfs_group_server; 
    }
    复制代码
  2. 添加一个upstream 执行服务的IP为 2台tracker 的地址

    #部署配置nginx负载均衡:
    upstream fastdfs_group_server {  
    	server 192.168.230.129:80;  
    	server 192.168.230.130:80; 
    }
    复制代码
  3. 测试:使用浏览器访问128(唯一入口的nginx服务器)服务器中的fastdfs文件

    注意:由于128的nginx中可能拥有静态资源拦截会导致访问不到文件,这时可以注释或删除这些静态资源拦截

  4. 备用Nginx使用Keepalived软件,Keepalived软件中当主nginx出现故障后会自动切换到备用nginx服务器的一款软件,通常由运维人员进行使用

分类:
后端
标签:
分类:
后端
标签: