FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。
Tracker server作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器或调度服务器。
Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。
Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。
Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。
cd /usr/local/libfastcommon
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install
注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的ibfastcommon.so文件拷贝至/usr/lib下,执行 cp /usr/lib64/libfastcommon.so /usr/lib/命令即可。
tar -zxvf fastdfs-5.05.tar.gz
cd fastdfs-5.05
./make.sh
./make.sh install
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
在配置Tracker之前,首先需要创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等,我这里选择在/opt目录下创建一个fastdfs_tracker目录用于存放Tracker服务器的相关文件:mkdir /opt/fastdfs_tracker
接下来就要重新编辑上一步准备好的/etc/fdfs目录下的tracker.conf配置文件,打开文件后依次做以下修改:
disabled=false #启用配置文件(默认启用)
port=22122 #设置tracker的端口号,通常采用22122这个默认端口
base_path=/opt/fastdfs_tracker #设置tracker的数据文件和日志目录
http.server_port=6666 #设置http端口号,默认为8080
ln -s /usr/bin/fdfs_trackerd /usr/local/bin
ln -s /usr/bin/stop.sh /usr/local/bin
ln -s /usr/bin/restart.sh /usr/local/bin
如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录。
tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况,输入netstat -unltp|grep fdfs,下图可以看到tracker服务运行的22122端口正常被监听。 :
确认tracker正常启动后可以将tracker设置为开机启动,打开/etc/rc.d/rc.local并在其中加入以下配置:service fdfs_trackerd start,即可设置开机启动。
Tracker至此就配置好了,接下来就可以配置FastDFS的另一核心——Storage。
mkdir /opt/fastdfs_storage
mkdir /opt/fastdfs_storage_data
disabled=false #启用配置文件(默认启用)
group_name=group1 #组名,根据实际情况修改
port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致
base_path=/opt/fastdfs_storage #设置storage数据文件和日志目录
store_path_count=1 #存储路径个数,需要和store_path个数匹配
store_path0=/opt/fastdfs_storage_data #实际文件存储路径
tracker_server=192.168.200.131:22122 #tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功(此处的ip是我的CentOS虚拟机ip)
http.server_port=8888 #设置 http 端口号
如果启动成功,/opt/fastdfs_storage中就可以看到启动后新生成的data和logs目录 。
如上图,没有任何问题,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。
最后我们再看一下storage服务的端口监听情况:netstat -unltp | grep fdfs。可以看到此时已经正常监听tracker的22122端口和storage的23000端口,至此storage服务器就已经配置完成。
确定了storage服务器启动成功后,还有一项工作就是看看storage服务器是否已经登记到 tracker服务器(也可以理解为tracker与storage是否整合成功),运行以下命令:/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
如上图:看到192.168.200.131 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器。
至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
base_path=/opt/fastdfs_tracker #tracker服务器文件路径
tracker_server=192.168.200.131:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来
tar -xvzf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module
cd src
#这时会看到一个config文件
./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx/fastdfs-nginx-module/src/
,需要在./configure后面配置如上一些参数。配置完成后会看到如下图:
然后输入make、make install完成安装,如果在编译过程中出现root/fastdfs-nginx-module/src//common.c:21:25: fatal error: fdfs_define.h: No such file or directory 这个错误,需要编辑/usr/local/fastdfs-nginx/fastdfs-nginx-module/src下的config文件,将/usr/local/路径改为/usr/,如下,然后重新安装即可。
server {
listen 9999;
location ~/group1/M00 {
root /opt/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
}
cp -r /usr/local/fastdfs-5.05/conf/http.conf /etc/fdfs/
cp -r /usr/local/fastdfs-5.05/conf/mime.types /etc/fdfs/
cp -r /usr/local/fastdfs-nginx/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
base_path=/opt/fastdfs_storage #保存日志目录
tracker_server=192.168.200.131:22122 #tracker服务器的IP地址以及端口号
storage_server_port=23000 #storage服务器的端口号
url_have_group_name = true #文件 url 中是否有 group 名
store_path0=/opt/fastdfs_storage_data # 存储路径
group_count = 3 #设置组的个数,事实上这次只使用了group1
设置了group_count = 3,接下来就需要在文件尾部追加这3个group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/opt/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:
ln -s /opt/fastdfs_storage_data/data /opt/fastdfs_storage_data/data/M00
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
浏览器输入192.168.200.131:9999,显示如下:
mkdir nginx2
cd nginx-1.8.1/
./configure --prefix=/usr/local/nginx2 --add-module=/usr/local/fastdfs-nginx/fastdfs-nginx-module/src/
make
make install
upstream fdfs_group1 {
server 127.0.0.1:9999;
}
在server节点下新增:
server{
listen 7777;
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
}
接下来启动nginx2:
/usr/local/nginx2/sbin/nginx
最后一步就是需要修改/etc/fdfs目录下的client.conf文件,打开该文件并加入以下配置:
base_path=/opt/fastdfs_storage #日志存放路径
tracker_server=192.168.200.131:22122 #tracker 服务器 IP 地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http 端口号,必须和tracker的设置对应起来
至此关于fastdfs就已经全部配置完毕了,再一次进行测试看看是否能正常上传文件并通过http访问文件。
注:此处我只在一台虚拟机下面部署了一台tracker服务器和一台storage服务器,实际生产环境中肯定是多台服务器同时工作。
参考文档:CentOS 7下FastDFS分布式文件服务器搭建实战