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
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