CentOS7下 搭建 FastDFS 分布式文件服务器

  • FastDFS介绍
      • 1.FastDFS是什么
      • 2.FastDFS架构
      • 3.Tracker集群
      • 4.Storage集群
      • 5.Storage状态收集
      • 6.文件上传、下载流程
  • FastDFS服务器搭建
      • 1.安装libfastcommon
      • 2.安装FastDFS
      • 3.配置Tracker
      • 4.配置Storage
      • 5.测试
      • 6.安装fastdfs-nginx-module
        • a.storage nginx
        • b.tracker nginx
        • c.http测试

FastDFS介绍


1.FastDFS是什么

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

2.FastDFS架构

FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。

Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

CentOS7下 搭建 FastDFS 分布式文件服务器_第1张图片

3.Tracker集群

FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

4.Storage集群

Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。

采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

5.Storage状态收集

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

6.文件上传、下载流程

CentOS7下 搭建 FastDFS 分布式文件服务器_第2张图片
CentOS7下 搭建 FastDFS 分布式文件服务器_第3张图片
CentOS7下 搭建 FastDFS 分布式文件服务器_第4张图片


FastDFS服务器搭建


1.安装libfastcommon

  • 因为libfastcommon使用C语言写的,所以我们先要安装gcc编译器:yum -y install gcc-c++
  • FastDFS依赖libevent库,需要安装:yum -y install libevent
  • libfastcommon是FastDFS官方提供的,libfastcommon包含了FastDFS运行所需要的一些基础库。
    将libfastcommonV1.0.7.tar.gz拷贝至/usr/local/libfastcommon(需要新建libfastcommon这个目录)下
cd /usr/local/libfastcommon
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install

注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的ibfastcommon.so文件拷贝至/usr/lib下,执行 cp /usr/lib64/libfastcommon.so /usr/lib/命令即可。

2.安装FastDFS

  • 将FastDFS_v5.05.tar.gz拷贝至/usr/local/fastdfs(需新建fastdfs这个目录)下
tar -zxvf fastdfs-5.05.tar.gz
cd fastdfs-5.05
./make.sh
./make.sh install
  • 接下来进入到/etc/fdfs目录下,可以看到有三个以conf.sample 结尾的文件,去掉.sample 后缀,我们再分别拷贝出3个后面用的正式的配置文件。执行如下命令即可。下图是拷贝以后的目录。
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf

CentOS7下 搭建 FastDFS 分布式文件服务器_第5张图片

3.配置Tracker

  • 在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:mkdir /opt/fastdfs_tracker

  • 接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:


disabled=false #启用配置文件(默认启用)
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
base_path=/opt/fastdfs_tracker #设置tracker的数据文件和日志目录
http.server_port=6666 #设置http端口号,默认为8080
  • 配置完成后就可以启动Tracker服务器了,但首先依然要为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下,创建软连接,输入如下命令:
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
  • 最后通过命令启动Tracker服务器:service fdfs_trackerd start
    启动命令
  • 如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录。
    这里写图片描述
    tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况,输入netstat -unltp|grep fdfs,下图可以看到tracker服务运行的22122端口正常被监听。 :
    这里写图片描述

  • 确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:service fdfs_trackerd start,即可设置开机启动。

Tracker至此就配置好了,接下来就可以配置FastDFS的另一核心——Storage。

4.配置Storage

  • 步骤基本与配置Tracker一致,首先是创建Storage服务器的文件目录,需要注意的是同Tracker相比我多建了一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
  • 接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:
disabled=false #启用配置文件(默认启用)
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs_storage_data #实际文件存储路径
tracker_server=192.168.200.131:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
http.server_port=8888 #设置 http 端口号
  • 配置完成后同样要为Storage服务器的启动脚本设置软引用:ln -s /usr/bin/fdfs_storaged /usr/local/bin
  • 接下来就可以启动Storage服务了:service fdfs_storaged start
    这里写图片描述
  • 如果启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录 。
    CentOS7下 搭建 FastDFS 分布式文件服务器_第6张图片
    如上图,没有任何问题,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

  • 最后我们再看一下storage服务的端口监听情况:netstat -unltp | grep fdfs。可以看到此时已经正常监听tracker的22122端口和storage的23000端口,至此storage服务器就已经配置完成。
    这里写图片描述

  • 确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
    CentOS7下 搭建 FastDFS 分布式文件服务器_第7张图片
    如上图:看到192.168.200.131 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器。

  • 同理别忘了添加开机启动,打开/etc/rc.d/rc.local并将如下配置追加到文件中:service fdfs_storage start

至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。

5.测试

  • 测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:
base_path=/opt/fastdfs_tracker #tracker服务器文件路径
tracker_server=192.168.200.131:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来
  • 配置完成后就可以模拟文件上传了,先给/opt目录下随便放个文件(adidas.jpg)。然后通过执行客户端上传命令尝试上传:/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/adidas.jpg
    这里写图片描述
    运行后可以发现给我们返回了一个路径。
    这就表示我们的文件已经上传成功了,当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、fileid、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成,我们到对应目录下也能找到对应的文件:
    这里写图片描述
    但是此时并不能通过http访问,因为FastDFS目前已不支持http协议,所以此处在nginx上使用FastDFS的模块fastdfs-nginx-module,这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,接下来就具体记录一下fastdfs-nginx-module的安装配置过程。

6.安装fastdfs-nginx-module

a.storage nginx

  • 在/usr/local下新建目录fastdfs-nginx,将fastdfs-nginx-module_v1.16.tar.gz 这个软件包上传至/usr/local/fastdfs-nginx。执行如下命令。
tar -xvzf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module
cd src
#这时会看到一个config文件
  • 安装nginx的教程可参考我的另一篇博客,centos7下安装nginx。安装nginx过程中输入
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx/fastdfs-nginx-module/src/

,需要在./configure后面配置如上一些参数。配置完成后会看到如下图:
CentOS7下 搭建 FastDFS 分布式文件服务器_第8张图片
然后输入make、make install完成安装,如果在编译过程中出现root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory 这个错误,需要编辑/usr/local/fastdfs-nginx/fastdfs-nginx-module/src下的config文件,将/usr/local/路径改为/usr/,如下,然后重新安装即可。
CentOS7下 搭建 FastDFS 分布式文件服务器_第9张图片

  • 安装完nginx后,可以看到与nginx同级目录下多出来一些目录,如下:
    CentOS7下 搭建 FastDFS 分布式文件服务器_第10张图片
    接下来要修改一下nginx的配置文件,进入conf目录并修改nginx.conf,添加server:
    server {
    listen       9999;

        location ~/group1/M00 {
            root /opt/fastdfs_storage_data/data;
            ngx_fastdfs_module;
     }
    }
  • 然后进入FastDFS的安装目录/usr/local/fastdfs/fastdfs-5.05/目录下的conf目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:
cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/

CentOS7下 搭建 FastDFS 分布式文件服务器_第11张图片

  • 接下来还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:
cp -r /usr/local/fastdfs-nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
  • 没什么问题,接下来就需要编辑刚拷贝的这个mod_fastdfs.conf文件了,打开mod_fastdfs.conf并按顺序依次编译以下内容:
base_path=/opt/fastdfs_storage #保存日志目录
tracker_server=192.168.200.131:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:

ln  -s  /opt/fastdfs_storage_data/data  /opt/fastdfs_storage_data/data/M00

显示如下信息说明nginx已启动成功:
这里写图片描述

  • 接下来访问ip+port可以看到nginx的欢迎界面,如果无法访问,看看是否端口未暴露,如我的9999端口。
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload

浏览器输入192.168.200.131:9999,显示如下:
CentOS7下 搭建 FastDFS 分布式文件服务器_第12张图片

b.tracker nginx

  • 同理,再装一个nginx,目录命名为nginx2,安装路径依旧放在/usr/local/nginx2下,由于和之前一样,此处就不再做详细解释:
mkdir nginx2
cd nginx-1.8.1/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx/fastdfs-nginx-module/src/
make
make install
  • 接下来依然是修改nginx2的配置文件,进入conf目录并打开nginx.conf文件加入以下配置,tracker的nginx修改listen端口,默认是80端口,我将其修改为7777,并将upstream指向storage的nginx地址,在http节点下新增:
upstream fdfs_group1 {
     server 127.0.0.1:9999;
}
在server节点下新增:
server{
    listen 7777;
    location /group1/M00 {
         proxy_pass http://fdfs_group1;
    }
}

接下来启动nginx2:

/usr/local/nginx2/sbin/nginx
最后一步就是需要修改/etc/fdfs目录下的client.conf文件,打开该文件并加入以下配置:

base_path=/opt/fastdfs_storage  #日志存放路径
tracker_server=192.168.200.131:22122  #tracker 服务器 IP 地址和端口号
http.tracker_server_port=6666  # tracker 服务器的 http 端口号,必须和tracker的设置对应起来

至此关于fastdfs就已经全部配置完毕了,再一次进行测试看看是否能正常上传文件并通过http访问文件。

c.http测试

  • 我们通过http访问之前上传的那张图片adidas.jpg,输入http://192.168.200.131:7777/group1/M00/00/00/wKjIg1qQTkCAZOjJAACoLAWZLKw249.jpg,可以得到如下图:
    CentOS7下 搭建 FastDFS 分布式文件服务器_第13张图片
    大功告成。

注:此处我只在一台虚拟机下面部署了一台tracker服务器和一台storage服务器,实际生产环境中肯定是多台服务器同时工作。

参考文档:CentOS 7下FastDFS分布式文件服务器搭建实战

你可能感兴趣的:(FastDFS,Nginx,Linux)