FastDFS简介
FastDFS是一个开源的高性能分布式文件系统,它的主要功能包括文件存储,文件上传和文件下载,解决高容量和负载均衡问题。FastDFS应该满足基于照片共享站点和视频共享站点等文件服务的网站的要求。
支持存储服务器在线扩容,支持相同的文件只保存一份,节约磁盘。
FastDFS只能通过Client API访问,不支持POSIX访问方式。
FastDFS适合中大型网站使用,用来存储资源文件(如:图片、文档、视频等)
FastDFS有两个角色
tracker server(跟踪器):跟踪器负责文件访问的调度和负载平衡
storage server(存储器):存储器负责文件管理,包括文件存储,文件同步,文件提供存取接口它还管理作为表示文件的键值对的属性的元数据
跟踪器和存储包含一个或多个服务器。跟踪器或存储群集中的服务器可随时添加到群集或从群集中删除,而不影响在线服务。跟踪器集群中的服务器是对等的
由文件卷/组织组织的存储服务器获得高容量。存储系统包含一个或多个文件在这些卷中独立的卷。整个存储系统的容量等于所有容量的总和。文件卷包含一个或多个在这些服务器中文件相同的存储服务器。文件卷中的服务器相互备份,所有这些服务器都是负载均衡。将存储服务器添加到卷时,将自动将此卷中已有的文件复制到此新服务器,并且在完成此复制时,系统会将此服务器联机切换到提供存储服务
1)Tracker cluster中各个tracker server相互独立,不进行相互通信。
2)Storage cluster中各个storage组(Volume1,Volume2...)相互独立,不进行相互通信,也就是说各个组之间保存的数据是不相同的。但是各个组中的storage server之间是属于互相备份的关系,也就是说storage server之间保存相同的数据。
3)每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息。
文件上传
1)Client通过Tracker server将文件上传到Storage server。
2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件上传。
4)上传完成,Storage server返回Client一个文件ID,文件上传结束。
文件下载
1)Client通过Tracker server下载指定Storage组中某个Storage server上的某个文件(文件名包括Storage组名称)。
2)Tracker server向Client返回一台可用的Storage server的IP地址和端口号。
3)Client直接通过Tracker server返回的IP地址和端口与其中一台Storage server建立连接并进行文件下载。
安装配置FastDFS
yum groupinstall "Development Tools" "Server platform Development" mkdir /home/heboan/tools
下载并安装FastDFS依赖包libfastcommon
cd /home/heboan/tools git clone https://github.com/happyfish100/libfastcommon.git cd libfastcommon/ ./make.sh ./make.sh install
下载安装FastDFS
下载安装FastDFS cd /home/heboan/tools git clone https://github.com/happyfish100/fastdfs.git cd fastdfs/ ./make.sh ./make.sh install
注意:这里我把tracker和storage服务器安装在同一台机,如果安装在不同的机器上都要执行以上操作
配置tracker server(跟踪服务器)
1)、复制tracker server和client端样例文件并重命名 cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 2)、编辑tracker server配置文件tracker.conf,需要修改的内容如下: disabled=false port=22122 base_path=/data/fdfs/tracker 3)、编辑client端的配置文件client.conf,需要修改的内容如下: base_path=/data/fdfs/client tracker_server=192.168.88.1:22122 4)、创建tracker server数据目录 mkdir -p /data/fdfs/tracker 5)、启动tracker server /etc/init.d/fdfs_trackerd start netstat -lntp|grep 22122
配置storage server(存储服务器)
1)、复制storage server样例配置文件并重命名 cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 2)、编辑storage server配置文件storage.conf,需要修改的内容如下: disabled=false port=23000 base_path=/data/fdfs/storage tracker_server=192.168.88.1:22122 store_path0=/data/fdfs/storage http.server_port=8888 #默认为8888,nginx中配置的监听端口那之一致 3)、创建storage server数据目录 mkdir -p /data/fdfs/storage 4)、启动storage server,启动成功会自动在/data/fdfs/tracker目录新建data和logs目录 #启动storage server的前提是tracker server必须事先已启动 /etc/init.d/fdfs_storaged start netstat -lntp|grep 23000
文件上传/查看/下载测试
文件上传/查看/下载测试 # fdfs_upload_file /etc/fdfs/client.conf /home/heboan/win8.png group1/M00/00/00/wKhYAVoumUyALZFGAATNsxTPz7I070.png #返回文件ID说明文件已经上传成功 # fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhYAVoumUyALZFGAATNsxTPz7I070.png source storage id: 0 source ip address: 192.168.88.1 file create timestamp: 2017-12-11 22:42:20 file size: 314803 file crc32: 349163442 (0x14CFCFB2) # fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhYAVoumUyALZFGAATNsxTPz7I070.png /tmp/win8.jpg
查看存储节点状态
fdfs_monitor /etc/fdfs/client.conf
####配置nginx为storage server提供http访问接口####
下载fastdfs-nginx-module
cd /home/heboan/tools git clone https://github.com/happyfish100/fastdfs-nginx-module.git
拷贝fastdfs-nginx-module模块中配置文件到/etc/fdfs目录中并编辑
# cp /home/heboan/tools/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ # vim /etc/fdfs/mod_fastdfs.conf 修改内容如下 connect_timeout=10 base_path=/tmp tracker_server=192.168.88.1:22122 storage_server_port=23000 url_have_group_name = true store_path0=/data/fdfs/storage group_name=group
下载nginx源码,并编译支持FastDFS
yum install openssl-devel pcre-devl cd /home/heboan/tools useradd -r nginx wget http://nginx.org/download/nginx-1.12.2.tar.gz tar xf nginx-1.12.2.tar.gz cd nginx-1.12.2 ./configure --prefix=/opt/nginx-1.12.2 --user=nginx --group=nginx --add-module=../fastdfs-nginx-module/src/ make && make install ln -s /opt/nginx-1.12.2 /opt/nginx
复制FastDFS中的部分配置文件到/etc/fdfs目录中
cp /home/tools/fastdfs/conf/http.conf /etc/fdfs/ cp /home/tools/fastdfs/conf/mime.types /etc/fdfs/
做软链接
ln -s /data/fdfs/storage/data /data/fdfs/storage/data/M00
配置nginx
vim /opt/nginx/conf/nginx.conf ... server { listen 8888; #888端口号与/etc/fdfs/storage.conf中的http.server_port=8888相对应 server_name localhost; location ~/group[0-9]/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
启动nginx,通过浏览器访问之前已经上传的文件
/opt/nginx/sbin/nginx -t /opt/nginx/sbin/nginx 访问http://192.168.88.1:8888/group1/M00/00/00/wKhYAVoumUyALZFGAATNsxTPz7I070.png
集群模式