FastDFS

FastDFS

Scroll Down

FastDFS

在这里插入图片描述

简介

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题

关于上传

流程
在这里插入图片描述
1、client询问tracker上传到storage,不需要附加参数
2、Tracker返回一台可用的storage
3、Client直接和storage通讯完成文件上传

关于下载

流程
在这里插入图片描述

1、client询问tracker下载文件的storage,参数为文件标识(卷名和文件名)
2、Tracker返回一台可用的storage
3、Client直接和storage通讯完成文档下载

==Client发送download请求给某个tracker,必须带上文件名信息,tracker从文件名中解析出文件的group、大小、创建时间等信息,然后为该请求选择一个storage用来服务读请求,由于group内的文件同步时在后台是异步的,所以有可能出现在读的时候,文件还没有同步到某些storage server上,为了尽量避免访问到这样的storage,tracker按照如下规则选择group内可读的storage
(1)、该文件上传到源头storage--源头storage只要存活着,肯定包含这个文件,源头的地址编码在文件里
(2)、文件创建时间戳--storage被同步到的时间戳且(当前时间-文件创建时间戳)>文件同步最大时间(5分钟),说明文件创建后,认为经过最大同步时间后,肯定已经同步到其他storage了
(3)、(当前时间-文件创建时间戳)>同步延迟阈值(如一天)。说明经过同步延迟阈值时间,认为文件肯定同步过了==

实验准备

七台虚拟机:
关闭防火墙、互相能ping通

实验步骤
mkdir  /home/dfs
yum -y install git gcc gcc-c++ make autoconf automake libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim
cd /usr/local/src
git clone https://github.com/happyfish100/libfastcommon.git
scp -r libfastcommon/ 192.168.43.3:/usr/local/src/
scp -r libfastcommon/ 192.168.43.28:/usr/local/src/
scp -r libfastcommon/ 192.168.43.57:/usr/local/src/
scp -r libfastcommon/ 192.168.43.57:/usr/local/src/
scp -r libfastcommon/ 192.168.43.58:/usr/local/src/
scp -r libfastcommon/ 192.168.43.205:/usr/local/src/
cd libfastcommon/ && ./make.sh && ./make.sh install && cd ..   #其他六台也操作一样
git clone https://github.com/happyfish100/fastdfs.git
scp -r fastdfs/ 192.168.43.28:/usr/local/src/     #复制到六台上面
cd fastdfs/ && ./make.sh && ./make.sh install && cd ..    #其他六台也都操作
cp /etc/fdfs/tracker.conf{.sample,}
cp /etc/fdfs/storage.conf{.sample,}
cp /etc/fdfs/client.conf{.sample,}
cp /usr/local/src/fastdfs/conf/http.conf /etc/fdfs/
cp /usr/local/src/fastdfs/conf/mime.types /etc/fdfs/
scp -r /etc/fdfs/ 192.168.43.3:/etc/
scp -r /etc/fdfs/ 192.168.43.28:/etc/
scp -r /etc/fdfs/ 192.168.43.57:/etc/
scp -r /etc/fdfs/ 192.168.43.58:/etc/
scp -r /etc/fdfs/ 192.168.43.205:/etc/

后面第四台:

cd /usr/local/src
git clone https://github.com/happyfish100/fastdfs-nginx-module.git  #在后面四台分别执行
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/   #四台都执行
tar -zxf nginx-1.15.4.tar.gz 
scp nginx-1.15.4/ 192.168.43.58:/root/   #在第四台上做 然后复制过去,以此类推
cd nginx-1.15.4/       #四台相同操作
./configure --add-module=/usr/local/src/fastdfs-nginx-module/src/ && make && make install

==注意:使用--add-module的时候先别加等号,把路径TAB出来后再加上==

ln -s /usr/local/nginx/sbin/* /usr/local/sbin/
检查安装的nginx安装的模块,nginx -V  
第二台、第三台(跟踪(代理)服务器Tracker Server ):
vim /etc/fdfs/tracker.conf

大概在8行修改:

bind_addr=192.168.43.205   #本机ip

大概在22行修改:

base_path=/home/dfs  #存储数据和日志的目录 
/etc/init.d/fdfs_trackerd start | restart   #开启或者关闭跟踪服务器(现在还没配置好先不重启)

第四台:

vim /etc/fdfs/storage.conf

大概在11行:

group_name=group1     #这个是当前存储节点的所在的分组

大概在15行:

bind_addr=192.168.43.3   #本机ip

大概在41行:

store_path0=/home/dfs      #第一个存储目录

大概在119行:

tracker_server=192.168.50.101:22122    #tracker-server服务器1   第二台
tracker_server=192.168.50.102:22122    #tracker-server服务器2   第三台

大概在286行:

http.server_port=8888   #存储节点上nginx的端口号

后面的第三台就改一个IP,后面在修改一下组group2,以上操作都一样

scp /etc/fdfs/storage.conf 192.168.50.105:/etc/fdfs/   #都scp复制过去,以此类推
/etc/init.d/fdfs_storaged start | stop          #存储节点的开启和关闭

第四台:

vim /etc/fdfs/mod_fastdfs.conf  #假如没有这个文件  你就查看nginx -V查看那个模块在哪里 

大概在40行:

tracker_server=192.168.43.58:22122       #跟踪服务器的ip(第三和第四台)
tracker_server=192.168.43.205:22122

大概在48行:

group_name=group1

大概在54行:

url_have_group_name = true     #返回的信息是否含有group信息

大概在58:

store_path_count=1  #默认存储位置有几个

大概在63行:

store_path0=/home/dfs

大概在114行:

group_count = 2    #总共有几个存储组

119-123行 ==取消注释==

[group1]
group_name=group1     
storage_server_port=23000
store_path_count=1    #存储目录有几个
store_path0=/home/dfs

129-133行 ==取消注释==

name=group2
storage_server_port=23000
store_path_count=1
store_path0=/home/dfs
scp /etc/fdfs/mod_fastdfs.conf 192.168.43.58:/etc/fdfs   #复制到后三台
vim /usr/local/nginx/conf/nginx.conf

在第一个server部分的上面写一个server

 server {
        listen 8888;
        server_name localhost;

        location ~/group[0-9]/M00/ {
            ngx_fastdfs_module;
       }
    }

复制到后三台

scp /usr/local/nginx/conf/nginx.conf 192.168.43.57:/usr/local/nginx/conf/
第一台代理服务器:

安装nginx

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

配置代理的节点在server上面写 #gzip on; 下面写:

upstaream fdfs_group1 {
   server 192.168.43.3:8888 weight=1 max_fails=2 fail_timeout=30s
   server 192.168.43.28:8888 weight=1 max_fails=2 fail_timeout=30s
}
upstaream fdfs_group2 {
   server 192.168.43.57:8888 weight=1 max_fails=2 fail_timeout=30s
}

location匹配上面的代理节点:

   location ~ /group1/ {
            proxy_pass http://fdfs_group1;
        }
        location ~ /group2/ {
            proxy_pass http://fdfs_group2;
        }

为了节省虚拟机资源,我们直接把第一台代理服务器当成客户端来测试

vim /etc/fdfs/client.conf

修改10行:

base_path=/home/dfs

修改14行:

tracker_server=192.168.50.101:22122
tracker_server=192.168.50.102:22122

后面四台:

/etc/init.d/fdfs_storaged start 
nginx

第二台 第三台

/etc/init.d/fdfs_trackerd start 

准备一个1.jpg的图片
拖入第一台虚拟机

[root@cgl ~]# fdfs_upload_file /etc/fdfs/client.conf /root/1.jpg 
group1/M00/00/00/wKgyaFy-3UOAUbXlAA3D-zqZlOE711.jpg
返回一个存储ID

查看

firefox 192.168.50.100/"你的存储ID"
firefox 192.168.50.100/group1/M00/00/00/wKgyaFy-3UOAUbXlAA3D-zqZlOE711.jpg #这是你上面返回的ID

下载

fdfs_download_file /etc/fdfs/client.conf "存储ID" /root/test.jpg
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgyaFy-3UOAUbXlAA3D-zqZlOE711.jpg  /root/test.jpg

删除

fdfs_delete_file /etc/fdfs/client.conf "存储ID" 
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgyaFy-3UOAUbXlAA3D-zqZlOE711.jpg

清理一下浏览器的缓存

firefox 192.168.50.100/group1/M00/00/00/wKgyaFy-3UOAUbXlAA3D-zqZlOE711.jpg
#返回404