FastDFS原理及部署

网友投稿 262 2022-11-09

FastDFS原理及部署

FastDFS是一个c语言编写的一个开源的轻量级分布式文件系统,它对文件进程管理,功能包括:文件存储,文件同步,文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题,特别适合以文件为载体的在线服务,如相册网站,视频网站等等,FastDFS为互联网量身定制,充分考虑了冗余备份,负载均衡,现行扩容等,并注重高可用,高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载服务。

一、FastDFS原理及架构详解

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

Tracker server:负责调度及负载均衡,通过Tracker server,在文件上传时可以根据一些策略找到Storage server来提供上传服务,可以将tracker称为追踪服务器或调度服务器;Storage server:负责文件最终存储,客户端上传的文件最终存储在storage服务器上,Storage server没有实现自己的文件系统,而是利用操作系统的文件系统来管理文件,可以将storage称为存储服务器。

Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的Storage server和group,每个storage在启动后会连接Tracker,告知自己所属group等信息,并保持周期性心跳。Storage Server:存储服务器,主要提供容量和备份服务;以group为单位,每个group内部可以有多台storage server,数据互为备份。Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

3、Fast DFS原理关于模块:跟踪服务器和存储节点都可以由一台或多台服务器构成,跟踪服务器和存储节点均可以随时增加或者下线不会影响线上服务,其中跟踪服务器中所有服务器是对 等,可以根据服务器压力情况随时增加或减少

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

组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。虚拟磁盘路径:storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00,如果配置了store_path1则是M01,以此类推。数据两级目录:storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件。文件名:与文件上传时不同。是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

二、部署Fast DFS

由于有一些重复性的安装操作,所以找大佬写了个脚本,可以在进行那些重复性操作时,执行这个脚本。在上述链接中就有此脚本2、配置tracker1

[root@tracker1 ~]# mkdir fastdfs [root@tracker1 ~]# cd fastdfs/ [root@tracker1 fastdfs]# ls fastdfs.tar.gz install.sh libfastcommon.tar.gz [root@tracker1 fastdfs]# sh install.sh # 执行脚本 tracker server install succees ....... [root@tracker1 fastdfs]# /etc/init.d/fdfs_trackerd start # 起服务 Reloading systemd: [ OK ] Starting fdfs_trackerd (via systemctl): [ OK ] [root@tracker1 fastdfs]# netstat -anput | grep 22122 # 确认端口在监听 tcp 0 0 192.168.171.134:22122 0.0.0.0:* LISTEN 3847/fdfs_trackerd

3、配置tracker2

[root@tracker2 ~]# mkdir fastdfs [root@tracker2 ~]# cd fastdfs/ [root@tracker2 fastdfs]# ls fastdfs.tar.gz install.sh libfastcommon.tar.gz [root@tracker2 fastdfs]# sh install.sh tracker server install succees ....... [root@tracker2 fastdfs]# /etc/init.d/fdfs_trackerd start Reloading systemd: [ OK ] Starting fdfs_trackerd (via systemctl): [ OK ] [root@tracker2 fastdfs]# netstat -anput | grep 22122 tcp 0 0 192.168.171.135:22122 0.0.0.0:* LISTEN 4276/fdfs_trackerd

4、配置storage1

[root@storage1 ~]# mkdir fastdfs [root@storage1 ~]# cd fastdfs/ [root@storage1 fastdfs]# tar zxf libfastcommon.tar.gz [root@storage1 fastdfs]# tar zxf fastdfs.tar.gz [root@storage1 libfastcommon-1.0.43]# ./make.sh && ./make.sh install [root@storage1 libfastcommon-1.0.43]# cd ../fastdfs-6.06/ [root@storage1 fastdfs-6.06]# ./make.sh && ./make.sh install [root@storage1 fastdfs-6.06]# cd conf/ [root@storage1 conf]# cp mime.types /etc/fdfs/ [root@storage1 conf]# cd ../../ [root@storage1 fastdfs]# tar zxf fastdfs-nginx-module.tar.gz [root@storage1 fastdfs]# cp fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ [root@storage1 fastdfs]# cd /etc/fdfs/ [root@storage1 fdfs]# mkdir -p /data/storage-fdfs/base # 建议分开放 [root@storage1 fdfs]# mkdir -p /data/storage-fdfs/store [root@storage1 fdfs]# cp storage.conf.sample storage.conf [root@storage1 fdfs]# vim storage.conf group_name = group1 bind_addr =192.168.171.140 base_path = /data/storage-fdfs/base #数据和日志目录地址 store_path0 = /data/storage-fdfs/store # 存储地 tracker_server = 192.168.171.134:22122 #以下是指定tracker-server的监听地址 tracker_server = 192.168.171.135:22122 = 8888 #http访问文件的端口 [root@storage1 fdfs]# vim mod_fastdfs.conf base_path=/data/storage-fdfs/base tracker_server=192.168.171.134:22122 tracker_server=192.168.171.135:22122 storage_server_port=23000 group_name=group1 url_have_group_name = true #当group有多个的时候需要更改为true,以组名去访问 store_path0=/data/storage-fdfs/store group_count = 2 [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/data/storage-fdfs/store [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/data/storage-fdfs/store #编译安装nginx并添加第三方模块 [root@storage1 fdfs]# cd ~/fastdfs/ [root@storage1 fastdfs]# yum -y install pcre-devel openssl-devel [root@storage1 fastdfs]# tar zxf nginx-1.16.1.tar.gz #注意下面的第三方nginx模块路径,要与自己的对应 [root@storage1 fastdfs]# cd nginx-1.16.1/ [root@storage1 nginx-1.16.1]# ./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.22/src && make && make install [root@storage1 nginx-1.16.1]# vim /usr/local/nginx/conf/nginx.conf #在原来的server字段上面(34行)添加以下内容 server { listen 8888; server_name localhost; location ~/group[0-9]/M00/ { ngx_fastdfs_module; } } [root@storage1 nginx-1.16.1]# /etc/init.d/fdfs_storaged start Starting fdfs_storaged (via systemctl): [ 确定 ] [root@storage1 nginx-1.16.1]# /usr/local/nginx/sbin/nginx ngx_pid=16712 #确定相关端口在监听 [root@storage01 conf]# netstat -anput | grep 23000 [root@storage01 conf]# netstat -anpt | grep 80 [root@storage01 conf]# netstat -anpt | grep 8888

4、配置主机storage02

[root@storage2 fastdfs]# tar zxf libfastcommon.tar.gz [root@storage2 fastdfs]# tar zxf fastdfs.tar.gz [root@storage2 fastdfs]# cd libfastcommon-1.0.43/ [root@storage2 libfastcommon-1.0.43]# ./make.sh && ./make.sh install [root@storage2 libfastcommon-1.0.43]# cd ../fastdfs-6.06/ [root@storage2 fastdfs-6.06]# ./make.sh && ./make.sh install [root@storage2 fastdfs-6.06]# cd conf/ [root@storage2 conf]# cp mime.types /etc/fdfs/ [root@storage2 conf]# cd ../../ [root@storage2 fastdfs]# tar zxf fastdfs-nginx-module.tar.gz [root@storage2 fastdfs]# cd /etc/fdfs/ #将storage01修改后的配置文件复制到本地 [root@storage2 fdfs]# scp root@192.168.171.140:/etc/fdfs/storage.conf /etc/fdfs/ [root@storage2 fdfs]# scp root@192.168.171.140:/etc/fdfs/mod_fastdfs.conf /etc/fdfs/ [root@storage2 fdfs]# vim storage.conf # 修改复制后的配置文件 group_name = group2 bind_addr =192.168.171.143 [root@storage2 fdfs]# vim mod_fastdfs.conf group_name=group2 [root@storage2 fdfs]# mkdir -p /data/storage-fdfs/base [root@storage2 fdfs]# mkdir -p /data/storage-fdfs/store #安装nginx [root@storage2 fdfs]# cd ~/fastdfs/ [root@storage2 fastdfs]# tar zxf nginx-1.16.1.tar.gz [root@storage2 fastdfs]# yum -y install pcre-devel openssl-devel [root@storage2 nginx-1.16.1]# ./configure --add-module=/root/fastdfs/fastdfs-nginx-module-1.22/src/ && make && make install [root@storage2 nginx-1.16.1]# cd /usr/local/nginx/conf/ #将storage01主机的配置文件复制过来即可 [root@storage2 conf]# scp root@192.168.171.140:/usr/local/nginx/conf/nginx.conf ./ [root@storage2 ~]# /etc/init.d/fdfs_storaged start Starting fdfs_storaged (via systemctl): [ 确定 ] [root@storage2 ~]# /usr/local/nginx/sbin/nginx ngx_pid=5694 [root@storage02 conf]# netstat -anput | grep 23000 [root@storage02 conf]# netstat -anpt | grep 80 [root@storage02 conf]# netstat -anpt | grep 8888

5、配置主机nginx提供反向代理功能

[root@nginx ~]# tar zxf nginx-1.16.1.tar.gz [root@nginx ~]# yum -y install pcre-devel openssl-devel [root@nginx ~]# cd nginx-1.16.1/ [root@nginx nginx-1.16.1]# ./configure && make && make install [root@nginx nginx-1.16.1]# vim /usr/local/nginx/conf/nginx.conf #找到http字段 { include mime.types; default_type application/octet-stream; #添加如下内容 upstream fdfs_group1 { server 192.168.171.140:8888 weight=1 max_fails=2 fail_timeout=30s; } upstream fdfs_group2 { server 192.168.171.143:8888 weight=1 max_fails=2 fail_timeout=30s; } #找到server字段 server { listen 80; server_name localhost #charset koi8-r #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #添加如下内容 location ~/group1 { proxy_pass http://fdfs_group1; } location ~/group2 { proxy_pass http://fdfs_group2; } [root@nginx nginx-1.16.1]# /usr/local/nginx/sbin/nginx [root@nginx nginx-1.16.1]# netstat -anput |grep 80

6、客户端验证服务是否可以正常使用

[root@client ~]# mkdir fastdfs [root@client ~]# cd fastdfs/ [root@client fastdfs]# tar zxf libfastcommon.tar.gz [root@client fastdfs]# tar zxf fastdfs.tar.gz [root@client fastdfs]# cd libfastcommon-1.0.43/ [root@client libfastcommon-1.0.43]# ./make.sh && ./make.sh install [root@client libfastcommon-1.0.43]# cd ../fastdfs-6.06/ [root@client fastdfs-6.06]# ./make.sh && ./make.sh install [root@client fastdfs-6.06]# cd /etc/fdfs/ [root@client fdfs]# cp client.conf.sample client.conf [root@client fdfs]# vim /etc/fdfs/client.conf base_path = /data/storage-fdfs/base tracker_server = 192.168.171.134:22122 tracker_server = 192.168.171.135:22122 [root@client ~]# mkdir -p /data/storage-fdfs/store [root@client ~]# ls test.jpg test.jpg [root@client ~]# fdfs_upload_file /etc/fdfs/client.conf test.jpg # 上传 group2/M00/00/00/wKirj15-NhGAIeapAAFEF6rSzeI524.jpg #上面返回的信息需要保存,访问这个图片时需要 [root@client ~]# fdfs_download_file /etc/fdfs/client.conf group2/M00/00/00/wKirj15-NhGAIeapAAFEF6rSzeI524.jpg b.jpg [root@client ~]# ls b.jpg b.jpg # 可以看到已经下载并且更改名称了

fdfs_upload_file Usage: fdfs_upload_file [storage_ip:port] [store_path_index] 用于上传文件 用法为 fdfs_upload_file + 配置文件 + 文件 fdfs_download_file Usage: fdfs_download_file [local_filename] [ ] 用于下载文件 用法为 fdfs_download_file + 配置文件 + 文件 fdfs_file_info Usage: fdfs_file_info 用于查看文件信息 用法为 fdfs_file_info + 配置文件 + 文件 fdfs_delete_file Usage: fdfs_delete_file 用于删除文件 用法为 fdfs_delete_file + 配置文件 + 文件 fdfs_monitor Usage: fdfs_monitor [-h ] [list|delete|set_trunk_server [storage_id]] 用于查看集群信息 用法为 fdfs_monitor + 配置文件

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:雅晶源推出120W PD充电器:2C1A接口配置 三口同时快充
下一篇:详解java关于对象的比较
相关文章

 发表评论

暂时没有评论,来抢沙发吧~