当前位置:   article > 正文

FastDFS简单介绍以及环境部署

fastdfs

FastDFS是为互联网应用量身定做的分布式文件系统,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用,高性能等指标。

FastDFS一步步搭建存储服务器

FastDFS系统架构图

在这里插入图片描述

FastDFS简介

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:客户端。上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

"跟踪器和存储节点"都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

FastDFS的存储策略

  1. 为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
  2. 在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
  3. 当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
  4. FastDFS中的文件标识分为两个部分: 卷名和文件名,二者缺一不可!
  5. Tracker:标准服务端口22122、HTTP端口8080 Storage:标准服务端口23000、HTTP端口8888

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,最后根据以上的信息生成文件名存储文件。文件名的格式如下:
  在这里插入图片描述

FastDFS的文件同步

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

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

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

FastDFS的文件下载

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

安装部署

基本环境及机器清单如下:

Client 192.168.1.1
Tracker1 192.168.1.111
tracker2 192.168.1.222
Storage1 192.168.1.10
storage2 192.168.1.20
storage3 192.168.1.30
Storage4 192.168.1.40

firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent
firewall-cmd --reload

实验步骤

1.全部安装FastDFS

[root@client ~]# scp fastdfs.tar.gz root@192.168.1.111:/root
···
[root@client ~]# yum -y install gcc* automake autoconf zlib zlib-devel openssl openssl-devel pcre pcre-devel
[root@client ~]# tar -zxf fastdfs.tar.gz -C /usr/local/src/
[root@client ~]# cd /usr/local/src/libfastcommon/
[root@client libfastcommon]# ./make.sh && ./make.sh install && cd ..
[root@client src]# cd fastdfs 
[root@client fastdfs]# ./make.sh && ./make.sh install && cd ..
[root@client src]# cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
[root@client src]# cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
[root@client src]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
[root@client src]# cp fastdfs/conf/http.conf /etc/fdfs/
[root@client src]# cp fastdfs/conf/mime.types /etc/fdfs/
[root@client src]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
[root@client src]# mkdir -p /home/yuqing/fastdfs
[root@client src]# cd
直接全部复制
yum -y install gcc* automake autoconf zlib zlib-devel openssl openssl-devel pcre pcre-devel
tar -zxf fastdfs.tar.gz -C /usr/local/src/
cd /usr/local/src/libfastcommon/
./make.sh && ./make.sh install && cd ..
cd fastdfs 
./make.sh && ./make.sh install && cd ..
cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf
cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
cp fastdfs/conf/http.conf /etc/fdfs/
cp fastdfs/conf/mime.types /etc/fdfs/
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
mkdir -p /home/yuqing/fastdfs
cd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

2.搭建Nginx服务器

Client+存储服务器

tar -zxf nginx-1.12.0.tar.gz -C /usr/src/
cd /usr/src/nginx-1.12.0/
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src && make && make install
ln -s /usr/local/nginx/sbin/nginx    /usr/sbin/
nginx -v
cd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3.基本配置

Client配置
[root@client ~]# vim /etc/fdfs/client.conf
 10 base_path=/home/yuqing/fastdfs
 11 
 12 # tracker_server can ocur more than once, and tracker_server format is
 13 #  "host:port", host can be hostname or ip address
 14 tracker_server=192.168.2.20:22122		   tracker服务器地址
 15 tracker_server=192.168.2.30:22122

[root@client ~]# vim /etc/fdfs/mod_fastdfs.conf 
 10 base_path=/home/yuqing/fastdfs
 40 tracker_server=192.168.2.20:22122
 41 tracker_server=192.168.2.30:22122

[root@client ~]# vim /usr/local/nginx/conf/nginx.conf
  upstream fdfs_group1 {
        server 192.168.1.111:8888 max_fails=3 fail_timeout=20s;
        server 192.168.1.222:8888 max_fails=3 fail_timeout=20s;
    }
    upstream fdfs_group2 {
        server 192.168.1.111:8888 max_fails=3 fail_timeout=20s;
        server 192.168.1.222:8888 max_fails=3 fail_timeout=20s;
    }
    server {
        listen       80;
        server_name  localhost;
        location ~/group1/ {
            proxy_pass http://fdfs_group1;
        }
        location ~/group2/ {
            proxy_pass http://fdfs_group2;
        }
[root@client ~]# nginx -t 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
Tracker配置
Tr1
[root@tracker1 ~]# vim /etc/fdfs/tracker.conf
 4 disabled=false
 8 bind_addr=192.168.1.111
11 port=22122
22 base_path=/home/yuqing/fastdfs
  • 1
  • 2
  • 3
  • 4
  • 5
Tr2
[root@tracker2 ~]# vim /etc/fdfs/tracker.conf
 8 bind_addr=192.168.1.222
11 port=22122
22 base_path=/home/yuqing/fastdfs
  • 1
  • 2
  • 3
  • 4
Storage配置
S1
[root@storage1 ~]# vim /etc/fdfs/storage.conf
  4 disabled=false									配置文件是否不生效,false为生效
 11 group_name=group1
 15 bind_addr=192.168.1.10
 41 base_path=/home/yuqing/fastdfs					Storage数据和日志目录地址(根目录必须存在,子目录会自动生成)
110 store_path0=/home/yuqing/fastdfs
119 tracker_server=192.168.1.111:22122  			tracker服务器的地址
120 tracker_server=192.168.1.222:22122
285 http.server_port=8888
scp /etc/fdfs/storage.conf root@192.168.1.20:/etc/fdfs/
scp /etc/fdfs/storage.conf root@192.168.1.30:/etc/fdfs/
scp /etc/fdfs/storage.conf root@192.168.1.40:/etc/fdfs/

[root@storage1 ~]# vim /etc/fdfs/mod_fastdfs.conf 
10 base_path=/home/yuqing/fastdfs    
40 tracker_server=192.168.1.111:22122
41 tracker_server=192.168.1.222:22122
48 group_name=group1
53 url_have_group_name = true
57 store_path_count=1
63 store_path0=/home/yuqing/fastdfs
113 group_count = 2
118 [group1]
119 group_name=group1
120 storage_server_port=23000
121 store_path_count=1
122 store_path0=/home/yuqing/fastdfs
128 [group2]
129 group_name=group2
130 storage_server_port=23000
131 store_path_count=1
132 store_path0=/home/yuqing/fastdfs
scp /etc/fdfs/mod_fastdfs.conf root@192.168.1.20:/etc/fdfs/ 
scp /etc/fdfs/mod_fastdfs.conf root@192.168.1.30:/etc/fdfs/  
scp /etc/fdfs/mod_fastdfs.conf root@192.168.1.40:/etc/fdfs/

[root@storage1 ~]# vim /usr/local/nginx/conf/nginx.conf
 35     server {
 36         listen       8888;
 37         server_name  localhost;
 38         location ~/group[0-9]/M00/ {
 39             ngx_fastdfs_module;
 40         }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

fastdfs-nginx-module 模块说明
《FastDFS 通过 Tracker 服务器,将文件放在 Storage 服务器存储,但是同组存储服务器之间需要进行文件复制,有同步延迟的问题》
假设 Tracker 服务器将文件上传到了 192.168.1.1,上传成功后文件ID已经返回给客户端。
此时 FastDFS 存储集群机制会将这个文件同步到同组存储 192.168.1.30,在文件还没有复制完成的情况下,客户端如果用这个文件 ID 在 192.168.1.1 上取文件,就会出现文件无法访问的错误。
而 fastdfs-nginx-module 可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
注意
  listen 80 端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=8888相对应。同时在防火墙中打开该端口。
  location 的配置,如果有多个group则配置location ~/group([0-9])/M00 ,没有则不用配group。

scp /usr/local/nginx/conf/nginx.conf root@192.168.1.20:/usr/local/nginx/conf/nginx.conf
scp /usr/local/nginx/conf/nginx.conf root@192.168.1.30:/usr/local/nginx/conf/nginx.conf 
scp /usr/local/nginx/conf/nginx.conf root@192.168.1.40:/usr/local/nginx/conf/nginx.conf
  • 1
  • 2
  • 3
S2
[root@storage2 ~]# vim /etc/fdfs/storage.conf
 15 bind_addr=192.168.1.20
  • 1
  • 2
S3
[root@storage3 ~]# vim /etc/fdfs/storage.conf
11 group_name=group2
15 bind_addr=192.168.1.30

[root@storage3 ~]# vim /etc/fdfs/mod_fastdfs.conf
 47 group_name=group2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
S4
[root@storage4 ~]# vim /etc/fdfs/storage.conf
11 group_name=group2
15 bind_addr=192.168.1.40

[root@storage4 ~]# vim /etc/fdfs/mod_fastdfs.conf
 47 group_name=group2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4.启动服务

>C
[root@client ~]# nginx

>T
/etc/init.d/fdfs_trackerd start		{必须是绝对路径}

>S
nginx
/etc/init.d/fdfs_storaged start
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

5.验证

[root@storage1 ~]# netstat -anpt | grep fdfs
tcp        0      0 192.168.1.10:23000      0.0.0.0:*               LISTEN      64480/fdfs_storaged 
tcp        0      0 192.168.1.10:23000      192.168.1.20:36632      ESTABLISHED 64480/fdfs_storaged 
tcp        0      0 192.168.1.10:48769      192.168.1.222:22122     ESTABLISHED 64480/fdfs_storaged 
tcp        0      0 192.168.1.10:35038      192.168.1.111:22122     ESTABLISHED 64480/fdfs_storaged 
tcp        0      0 192.168.1.10:43588      192.168.1.20:23000      ESTABLISHED 64480/fdfs_storaged 
[root@storage1 ~]# fdfs_monitor /etc/fdfs/storage.conf 		{检查<追踪服务器>与<存储服务器>是否在通信}
···	Storage 1:
		id = 192.168.1.10
		ip_addr = 192.168.1.10 (storage1)  ACTIVE
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
Client随意拖拽一个图片 /root/

上传图片

[root@client ~]# fdfs_upload_file /etc/fdfs/client.conf /root/1.jpg 
group2/M00/00/00/wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg		"这里表示图片存储在哪里"
Storage1-->group1
[root@storage3 ~]# cd /home/yuqing/fastdfs/data/00/00/
[root@storage3 00]# ls
wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

下载到在当前目录

[root@client ~]# fdfs_download_file /etc/fdfs/client.conf group2/M00/00/00/wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg
#指定目录
[root@client ~]# fdfs_download_file /etc/fdfs/client.conf group2/M00/00/00/wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg /root/2.png
[root@client ~]# ls
1.jpg  anaconda-ks.cfg  initial-setup-ks.cfg  wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg  模板  图片  下载  桌面
2.png  fastdfs.tar.gz   nginx-1.12.0.tar.gz   公共                                视频  文档  音乐
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

查看

[root@localhost ~]# firefox http://192.168.1.1/group2/M00/00/00/wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg
  • 1

删除

[root@client ~]# fdfs_delete_file /etc/fdfs/client.conf group2/M00/00/00/wKgBHmECasyAKuCYAAu80XCb-vQ591.jpg
  • 1

天生傲骨怎能服输,蜕变才能让自己强大,涅槃才能让自己重生,逆风才能让自己翻盘。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/753541
推荐阅读
相关标签
  

闽ICP备14008679号