文章内容来源于百度(原文链接会放到章末),在下只是把零零散散的内容放在了一起(~ ̄▽ ̄)~
介绍
FastDFS 是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用。该软件作者是阿里巴巴大牛、chinaUnix版主余庆个人独立开发的。
技术论坛: http://bbs.chinaunix.net/forum-240-1.html
FAQ:http://bbs.chinaunix.net/thread-1920470-1-1.html
资源地址: https://sourceforge.net/projects/fastdfs/
源码资源: https://github.com/happyfish100
FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。
跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。
所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组) 的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
1、web项目架构
2、架构
tracker Server:
-
主节点,跟踪服务器,主要做调度工作,在访问上起负载均衡的作用。 -
记录storage server的状态,是连接Client和Storage server的枢纽。 -
FastDFS集群中的Tracker server可以有多台,Trackerserver之间是相互平等关系同时提供服务 -
Trackerserver不存在单点故障。客户端请求Trackerserver采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
Storage Server:
-
存储服务器,文件和meta data都保存到存储服务器上 -
storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。 -
一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系 -
不同组的Storageserver之间不会相互通信,同组内的Storageserver之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。 -
一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。 -
Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息
group: 组,也称为卷。同组内服务器上的文件是完全相同的
文件标识: 包括两部分:组名和文件名(包含路径)
meta data: 文件相关属性,键值对(Key Value Pair)方式,如:width=1024,heigth=768
3、上传流程
- client询问tracker上传到的storage,不需要附加参数
- tracker返回一台可用的storage
- client直接和storage通讯完成文件上传
内部机制流程如下: 1、选择tracker server 当集群中不止一个tracker server时,由于tracker之间是完全对等的关系,客户端在upload文件时可以任意选择一个trakcer。选择存储的group 当tracker接收到upload file的请求时,会为该文件分配一个可以存储该文件的group,支持如下选择group的规则;
- 1、Round robin,所有的group间轮询
- 2、Specified group,指定某一个确定的group.
- 3、Load balance,剩余存储空间多多group优先
2、选择storage server 当选定group后,tracker会在group内选择一个storage server给客户端,支持如下选择storage的规则:
- 1、Round robin,在group内的所有storagei间轮询
- 2、First server ordered by ip,按ip排序
- 3、First server ordered by priority,按优先级排序(优先级在storage上配置)
3、选择storage path 当分配好storage server后,客户端将向storage发送写文件请求,storage将会为文件分配一个数据存储目录,支持如下规则:
- 1、Round robin,多个存储目录间轮询
- 2、剩余存储空间最多的优先
4、生成Fileid 选定存储目最之后,storage会为文件生一个Fileid,由storage sever ip、文件创建时间、文件大小、文件crc32和一个随机数拼接而成。然后将这个二进制串进行base64编码,转换为可打印的字符串。
选择两级目录 当选定存储目最之后,storage会为文件分配一个fied,每个存诸目最下有两级256*256的子目录,,storage会按文件fileid进行两次hash (队),路由到其中一个子目录,然后将文件t以filfed为文件名存储到该子目录下。
5、生成文件名 当文件存特到某个子目录后,即认为该文件存储成功,接下来会为该文件生成个文件名,文件名由group、存储目录、两级子目录。fileid、文件后缀名(由客户端指定,主要用于区分文件作类型)拼接而成
4、下载流程
- client询问tracker下载文件的storage,参数为文件标识(组名和文件名)
- tracker返回一台可用的storage
- client直接和storage通讯完成文件下载
安装教程
我将会把软件安装在opt/fastdfs的目录下
1、安装libfastcommon
(1)、获取libfastcommon安装包:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
(2)、解压安装包:tar -zxvf V1.0.38.tar.gz
(3)、进入目录:cd libfastcommon-1.0.38
(4)、执行编译:./make.sh (5)、安装:./make.sh install 可能遇到的问题:
-bash: make: command not found -bash: gcc: command not found
解决方案:
debian通过apt-get install gcc make安装 centos通过yum -y install gcc make安装
2、安装FastDFS
(1)、获取fdfs安装包:
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
(2)、解压安装包:tar -zxvf V5.11.tar.gz
(3)、进入目录:cd fastdfs-5.11
(4)、执行编译:./make.sh (5)、安装:./make.sh install (6)、查看可执行命令:ls -la /usr/bin/fdfs*
3、配置Tracker服务
(1)、进入/etc/fdfs目录,有三个.sample后缀的文件(自动生成的fdfs模板配置文件),通过cp命令拷贝tracker.conf.sample,删除.sample后缀作为正式文件:
(2)、编辑tracker.conf:vi tracker.conf,修改相关参数
base_path=/home/yuqing/fastdfs #tracker存储data和log的跟路径,必须提前创建好
port=22122 #tracker默认22122
http.server_port=80 #http端口,需要和nginx相同,只需和nginx端口对应就可以,我的是80
以上的内容其实只修改了http端口,其他都使用的是默认的。 注:记得自己去建好文件夹
(3)、启动tracker(支持start|stop|restart):
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
(4)、查看端口情况:
netstat -apn|grep fdfs
可能遇到的报错:
/usr/bin/fdfs_trackerd: error while loading shared libraries: libfastcommon.so: cannot open shared object file: No such file or directory
解决方案:建立libfastcommon.so软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
4、配置Storage服务
(1)、进入/etc/fdfs目录,有cp命令拷贝storage.conf.sample,删除.sample后缀作为正式文件 (2)、编辑storage.conf:vi storage.conf,修改相关参数:
base_path=/home/yuqing/fastdfs #storage存储data和log的跟路径,必须提前创建好 port=23000 #storge默认23000,同一个组的storage端口号必须一致 group_name=group1 #默认组名,根据实际情况修改 store_path_count=1 #存储路径个数,需要和store_path个数匹配 store_path0=/home/yuqing/fastdfs #如果为空,则使用base_path tracker_server=自己的ip:22122 #配置该storage监听的tracker的ip和port
以上的配置,基本使用默认的,需要修改的是tracker_server,填写自己的虚拟机或服务器的ip。 注意: 假如是服务器,记得加安全组,开放端口23000、22122 (3)、启动storage(支持start|stop|restart):
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
(4)、查看端口情况:netstat -apn|grep fdfs (5)、通过monitor来查看storage是否成功绑定:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
5、安装Nginx和fastdfs-nginx-module模块
(1)、下载Nginx安装包
wget http://nginx.org/download/nginx-1.15.2.tar.gz
(2)、下载fastdfs-nginx-module安装包
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
(3)、解压nginx:tar -zxvf nginx-1.15.2.tar.gz
(4)、解压fastdfs-nginx-module:tar -xvf V1.20.tar.gz (5)、进入nginx目录:cd nginx-1.10.1
(6)、安装依赖的库
apt-get update 或 yum -y update
apt-get install libpcre3 libpcre3-dev openssl libssl-dev libperl-dev 或 yum -y install libpcre3 libpcre3-dev openssl libssl-dev libperl-dev
可能出现的错误: 问题解决,更换yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
倘若还是不行,第二个解决办法:
# 进入yum目录
cd /etc/yum.repos.d
# 删除目录下所有文件(注意完整复制,不要漏了那个点)
rm -rf ./*
# 安装正确的源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
# 生成缓存
yum makecache
(7)、配置,并加载fastdfs-nginx-module模块:
./configure --prefix=/usr/local/nginx --add-module=/usr/local/src/fastdfs-nginx-module-1.20/src/
可能会出现的问题: 解决办法直接将fastdfs-nginx-module-1.20文件夹,放到/usr/local/src/下 (8)、编译安装:
make
make install
可能出现的问题1: 解决办法1 Nginx还需要安装其它依赖环境 pcre、zlib、openssl, 这些是解压包、ssl相关的依赖
yum -y install gcc-c++
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
解决的办法2: 1)、安装下面配置
yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel
2)、重新configure
./configure
3)、编译
make && make install
假如yum -y install make zlib-devel gcc-c++ libtool openssl openssl-devel运行这个命令发生下列报错时: 解决办法: 需要修改软件源mirrors 地址,具体操作如下:
# 进入yum.repos.d 目录下
cd /etc/yum.repos.d/
# 修改源链接
sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# 要将之前的mirror.centos.org 改成 vault.centos.org
sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
可能会出现的问题2: 解决办法: 在fastdfs-nginx-module-1.20/src/下的config文件更改如下配置 (9)、查看安装路径:
whereis nginx
(10)、启动、停止:
cd /usr/local/nginx/sbin/ ./nginx ./nginx -s stop #此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程 ./nginx -s quit #此方式停止步骤是待nginx进程处理任务完毕进行停止 ./nginx -s reload
(11)、验证启动状态:
wget "http://127.0.0.1"
(12)、查看此时的nginx版本:发现fastdfs模块已经安装好了
/usr/local/nginx/sbin/nginx -V
6、配置Nginx和fastdfs-nginx-module模块
(1)、配置mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下
cd fastdfs-nginx-module-1.20/src/
cp mod_fastdfs.conf /etc/fdfs
(2)、进入/etc/fdfs修改mod-fastdfs.conf:
base_path=/opt/fastdfs
tracker_server=自己的ip:22122 #tracker的地址
url_have_group_name=true #url是否包含group名称
storage_server_port=23000 #需要和storage配置的相同
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/home/yuqing/fastdfs #文件存储的位置
(3)、配置nginx,80端口server增加location如图:
cd /usr/local/nginx/conf/
vi nginx.conf
location /group1/M00/ {
ngx_fastdfs_module;
}
(4)、最后需要拷贝fastdfs解压目录中的http.conf和mime.types:
cd /opt/fastdfs/fastdfs-5.11/conf
cp mime.types http.conf /etc/fdfs/
至此FastDFS的安装与配置就完成啦,下面进行测试。
7、FastDFS常用命令测试
(1)、上传文件
1)、进入/etc/fdfs目录,有cp命令拷贝client.conf.sample,删除.sample后缀作为正式文件; 2)、修改client.conf相关配置:
base_path=/home/yuqing/fastdfs //tracker服务器文件路径
tracker_server=自己的ip:22122 //tracker服务器IP地址和端口号
http.tracker_server_port=80 # tracker服务器的http端口号,必须和tracker的设置对应起来
3)、新建一个测试文档test.txt,内容为: abcdefg
4)、 命令:
/usr/bin/fdfs_upload_file <config_file> <local_filename>
示例:
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf test.txt
5)、查看结果,进入storage的data目录:
组名:group1 磁盘:M00 目录:00/00 文件名称:group1/M00/00/00/rBF2SGJIgIKAdcsnAAAACS5AbJQ149.txt
注:记得重启nginx
systemctl restart nginx
6)、通过wget和浏览器方式访问成功: wget http://自己的ip/group1/M00/00/00/rBF2SGJIgIKAdcsnAAAACS5AbJQ149.txt
(2)、下载文件
命令:
/usr/bin/fdfs_download_file <config_file> <file_id> [local_filename]
示例:
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/rBF2SGJIgIKAdcsnAAAACS5AbJQ149.txt
(3)、删除文件
命令:
/usr/bin/fdfs_delete_file <config_file> <file_id>
示例:
/usr/bin/fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/rBF2SGJIgIKAdcsnAAAACS5AbJQ149.txt
查看结果,进入/home/yuqing/fastdfs的data目录文件不存在,通过wget再次获取404: 至此安装的流程就走完了,可以拿到后台去愉快的玩耍了(σ゚?゚)σ…:*☆哎哟不错哦,本人在虚拟机和服务器都搭了一次,踩了好多坑,希望这篇文章对你有帮助─=≡Σ(((つ??ω??)つ
文章内容来源
主要来源 介绍的内容来源:https://www.cnblogs.com/gqzdev/p/13436784.html 安装教程的来源:https://www.cnblogs.com/handsomeye/p/9451568.html
|