CentOS7 FastDFS安装教程

一、FastDFS介绍

1、简介
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

FastDFS 系统有三个角色:
      跟踪服务器(Tracker Server)
      存储服务器(Storage Server)
      客户端(Client)

Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

2、FastDFS 的存储策略

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用.

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

3、FastDFS 的上传过程
FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

Storage Server会定期的向Tracker Server发送自己的存储信息。当Tracker Server Cluster中的Tracker Server不止一个时,各个Tracker之间的关系是对等的,所以客户端上传时可以选择任意一个Tracker。

当Tracker收到客户端上传文件的请求时,会为该文件分配一个可以存储文件的group,当选定了group后就要决定给客户端分配group中的哪一个storage server。当分配好storage server后,客户端向storage发送写文件请求,storage将会为文件分配一个数据存储目录。然后为文件分配一个fileid,最后根据以上的信息生成文件名存储文件。

4、FastDFS 的文件同步
写文件时,客户端将文件写至group内一个storage server即认为写文件成功,storage server写完文件后,会由后台线程将文件同步至同group内其他的storage server。

每个storage写文件后,同时会写一份binlog,binlog里不包含文件数据,只包含文件名等元信息,这份binlog用于后台同步,storage会记录向group内其他storage同步的进度,以便重启后能接上次的进度继续同步;进度以时间戳的方式进行记录,所以最好能保证集群内所有server的时钟保持同步。

storage的同步进度会作为元数据的一部分汇报到tracker上,tracke在选择读storage的时候会以同步进度作为参考。

5、FastDFS 的文件下载
客户端uploadfile成功后,会拿到一个storage生成的文件名,接下来客户端根据这个文件名即可访问到该文件。
跟upload file一样,在downloadfile时客户端可以选择任意tracker server。tracker发送download请求给某个tracker,必须带上文件名信息,tracke从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求。

二、安装FastDFS环境

 操作环境:CentOS7 X64,以下操作都是单机环境(192.168.10.10)

1、安装FastFDS依赖包.

yum -y install unzip zip gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel

2、上传fastfds、libfastcommon、fastdfs-nginx-module 到 /usr/local/,软件自行下载.

root@localhost]# 
fastdfs-5.05.tar.gz
fastdfs-nginx-module_v1.16.tar.gz
libfastcommon-1.0.7.tar.gz
nginx-1.8.0.tar.gz

3、安装libfastcommon

进入libfastcommon目录,运行

# cd /usr/local/libfastcommon-1.0.7/
# ./make.sh && ./make.sh install

libfastcommon 安装好后会在 /usr/lib64目录下生成 libfastcommon.so 库文件,由于 FastDFS 程序引用 /usr/lib 目录所以需要将 /usr/lib64 下的库文件拷贝至 /usr/lib 下

# cp /usr/lib64/libfastcommon.so /usr/lib

4、安装fastfds进入fastfds的目录

# cd /usr/local/fastdfs-5.05/
# ./make.sh && ./make.sh install

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

# cp conf/* /etc/fdfs/
[root@localhost fastdfs-5.05]# ll /etc/fdfs/
total 104
-rw-r--r-- 1 root root 23981 Apr  8 00:56 anti-steal.jpg
-rw-r--r-- 1 root root  1461 Apr  8 00:56 client.conf
-rw-r--r-- 1 root root  1461 Apr  8 00:55 client.conf.sample
-rw-r--r-- 1 root root   858 Apr  8 00:56 http.conf
-rw-r--r-- 1 root root 31172 Apr  8 00:56 mime.types
-rw-r--r-- 1 root root  7829 Apr  8 00:56 storage.conf
-rw-r--r-- 1 root root  7829 Apr  8 00:55 storage.conf.sample
-rw-r--r-- 1 root root   105 Apr  8 00:56 storage_ids.conf
-rw-r--r-- 1 root root  7102 Apr  8 00:56 tracker.conf
-rw-r--r-- 1 root root  7102 Apr  8 00:55 tracker.conf.sample

5、配置Tracker创建Tracker服务器的文件路径

# mkdir /opt/fastdfs_tracker

编辑上一步准备好的/etc/fdfs 目录下的 tracker.conf配置如下:

base_path = /opt/fastdfs_tracker     #设置tracker的数据文件和日志目录 
http.server_port = 80                #设置http端口号,默认为8080

接着为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/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服务器:

# systemctl start fdfs_trackerd 或者
# service fdfs_trackerd start Reloading systemd: [ OK ] Starting fdfs_trackerd (via systemctl): [ OK ]

查看启动状况

# netstat -unltp|grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      7782/fdfs_trackerd  

启动成功后,在 /opt/fastdfs_tracker/ 目录下生成两个目录, 一个是数据,一个是日志

# cd /opt/fastdfs_tracker/
[root@localhost fastdfs_tracker]# ll
total 0
drwxr-xr-x 2 root root 60 Apr  8 01:08 data
drwxr-xr-x 2 root root 26 Apr  8 01:08 logs

6、配置Storage 创建Storage服务器的文件目录

# mkdir /opt/fastdfs_storage 
# mkdir /opt/fastdfs_storage_data

接下来修改/etc/fdfs目录下的storage.conf配置文件,打开文件后依次做以下修改:

base_path = /opt/fastdfs_storage            #设置storage数据文件和日志目录
store_path0 = /opt/fastdfs_storage_data     #实际文件存储路径
tracker_server=192.168.10.10:22122             #tracker服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip) 
http.server_port=88                            #设置 http 端口号 

配置完成后同样要为Storage服务器的启动脚本设置软引用:

ln -s /usr/bin/fdfs_storaged /usr/local/bin

启动Storage服务:

# service fdfs_storaged start
Starting fdfs_storaged (via systemctl):                    [  OK  ]

验证是否成功:
可以到/opt/fastdfs_storage/data目录下生成好的pid文件和dat文件,那么再看一下实际文件存储路径下是否有创建好的多级目录呢: 如下图就是成功了

[root@localhost data]# ls
00  07  0E  15  1C  23  2A  31  38  3F  46  4D  54  5B  62  69  70  77  7E  85  8C  93  9A  A1  A8  AF  B6  BD  C4  CB  D2  D9  E0  E7  EE  F5  FC
01  08  0F  16  1D  24  2B  32  39  40  47  4E  55  5C  63  6A  71  78  7F  86  8D  94  9B  A2  A9  B0  B7  BE  C5  CC  D3  DA  E1  E8  EF  F6  FD
02  09  10  17  1E  25  2C  33  3A  41  48  4F  56  5D  64  6B  72  79  80  87  8E  95  9C  A3  AA  B1  B8  BF  C6  CD  D4  DB  E2  E9  F0  F7  FE
03  0A  11  18  1F  26  2D  34  3B  42  49  50  57  5E  65  6C  73  7A  81  88  8F  96  9D  A4  AB  B2  B9  C0  C7  CE  D5  DC  E3  EA  F1  F8  FF
04  0B  12  19  20  27  2E  35  3C  43  4A  51  58  5F  66  6D  74  7B  82  89  90  97  9E  A5  AC  B3  BA  C1  C8  CF  D6  DD  E4  EB  F2  F9
05  0C  13  1A  21  28  2F  36  3D  44  4B  52  59  60  67  6E  75  7C  83  8A  91  98  9F  A6  AD  B4  BB  C2  C9  D0  D7  DE  E5  EC  F3  FA
06  0D  14  1B  22  29  30  37  3E  45  4C  53  5A  61  68  6F  76  7D  84  8B  92  99  A0  A7  AE  B5  BC  C3  CA  D1  D8  DF  E6  ED  F4  FB

[root@localhost data]# pwd
/opt/fastdfs_storage_data/data

查看端口是否正常

[root@localhost data]# netstat -unltp|grep fdfs
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      7782/fdfs_trackerd  
tcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      20313/fdfs_storaged 

7、测试上传
测试时需要设置客户端的配置文件,编辑/etc/fdfs目录下的client.conf 文件,打开文件后依次做以下修改:

base_path=/opt/fastdfs_tracker            #tracker服务器文件路径 
tracker_server=192.168.10.10:22122        #tracker服务器IP地址和端口号 
http.tracker_server_port=80                # tracker 服务器的 http 端口号,必须和tracker的设置对应起来 

拷贝一张图片 test.jpg 到Centos服务器上的 /tmp 目录下

进行上传测试命令:

# /usr/bin/fdfs_test /etc/fdfs/client.conf upload /tmp/test.jpg

上传一张图片上去,例如:

# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /tmp/test.jpg
group1/M00/00/00/wKgKCl6MvfCAVACCAAEq7Qm7AWQ497.jpg

PS:由于现在还没有和nginx整合无法使用http下载.

8、FastDFS与nginx进行集成

1、切换到 /usr/local/fastdfs-nginx-module/src 目录下,修改config文件
vim config
将文件中的所有 /usr/local/ 路径改为 /usr/

复制当前目录下的 mod_fastdfs.conf 文件到 /etc/fdfs/ 目录下

# cp mod_fastdfs.conf /etc/fdfs/

切换到 /etc/fdfs 目录,修改 mod_fastdfs.conf 文件

# vim mod_fastdfs.conf

base_path=/opt/fastdfs_tracker
tracker_server=192.168.10.10:22122          #根据实际情况改
url_have_group_name=true                 #url中包含group名称
store_path0=/opt/fastdfs_storage_data      #指定文件存储路径(上面配置的store路径)

2、编译安装nginx,并加入fastdfs-nginx-module模块
加入模块命令:(指定你的fastdfs-nginx-module安装包的路径)

# cd /usr/local/nginx-1.8.0/
# ./configure --add-module=/usr/local/fastdfs-nginx-module/src/

# make && make install

PS:安装成功后查看生成的目录
[root@localhost nginx-1.8.0]# ll /usr/local/nginx
total 0
drwxr-xr-x 2 root root 333 Apr  8 02:58 conf
drwxr-xr-x 2 root root  40 Apr  8 02:58 html
drwxr-xr-x 2 root root   6 Apr  8 02:58 logs
drwxr-xr-x 2 root root  36 Apr  8 03:05 sbin
[root@localhost nginx-1.8.0]# 

切换到 /usr/local/nginx/conf/ 目录

# cd /usr/local/nginx/conf/

修改 nginx.conf 文件,只需要修改如下配置即可.

server {
        listen       80;
        server_name  192.168.10.10;

        #charset koi8-r;
        #access_log  logs/host.access.log  main;

        location ~/group([0-9])/M00 {
            root   /opt/fastdfs_storage_data/data;
            ngx_fastdfs_module;
        }
}

检查并启动Nginx

# /usr/local/nginx/sbin/nginx -t
ngx_http_fastdfs_set pid=31692
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
ngx_http_fastdfs_set pid=31694

查看 nginx 进程

# ps aux |grep nginx
root      31695  0.0  0.0  29252   792 ?        Ss   03:13   0:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody    31696  0.0  0.1  29812  1996 ?        S    03:13   0:00 nginx: worker process

这时已经可以通过浏览器访问刚刚测试上传的图片 test.jpg!

# curl -I http://192.168.10.10/group1/M00/00/00/wKgKCl6M0V-AFHdaAAEq7Qm7AWQ772.jpg
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Tue, 07 Apr 2020 19:54:26 GMT
Content-Type: image/jpeg
Content-Length: 76525
Last-Modified: Tue, 07 Apr 2020 19:15:43 GMT
Connection: keep-alive
Accept-Ranges: bytes

 

参考文档:https://www.cnblogs.com/heqiuyong/p/10298052.html

 

posted @ 2020-04-07 14:42  梦徒  阅读(834)  评论(0编辑  收藏  举报