在我们工作中遇到一些项目有大量的文件时需要采用分布式存储系统来提供更好的服务,我们可以采用fastdfs,分布式系统有很多,入NFS,TFS,MFS,FastDFS等,各有优势,具体采用哪种,各位同学可以自行百度查看每个系统的特性,那个更适合自己的业务。
我这里是需要存储大量的小视频文件,如果直接存储的话不利于管理,而且会影响读写速度,单机的话可能会存在数据丢失的风险等,所以采用FastDFS系统来存储。
分布式优势:防止单机故障,数据读取速度快,利于管理等。
安装步骤和优化如下:
软件包:
libfastcommon-master.zip
fastdfs-master.zip
fastdfs-nginx-module-master.zip
提前安装相关操作系统包
yum install unzip zip gcc-c++
创建一个文件夹/root/fastfds,用来保存相关软件
libfastcommon包安装
FastDFS 将以前版本的公共的一些函数单独封装成了libfastcommon包,所以在安装FastDFS之前我们还必须安装libfastcommon。
解压缩
unzip libfastcommon-master.zip
执行编译步骤:./make.sh
执行安装步骤:./make.sh install
libfastcommon.so 默认安装到了/usr/lib64/libfastcommon.so,但是FastDFS主程序设置的lib目录是/usr/local/lib,
所以此处需要重新设置软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
FastDFS 安装
unzip fastdfs-master.zip
cd fastdfs-master
./make.sh
./mae.sh install
cd /etc/fdfs/
对三个配置文件进行拷贝,后面有用
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp tracker.conf.sample tracker.conf
Tracker 安装
创建Tracker服务器的文件路径,即用于存储Tracker的数据文件和日志文件等:
mkdir /data1/fastdfs_tracker
编辑上/etc/fdfs/tracker.conf 配置文件,打开文件后依次做以下修改:
vim /etc/fdfs/tracker.conf
#启用配置文件(默认false)
disabled=false
#设置tracker的端口号,通常采用22122这个默认端口
port=22122
#设置tracker的数据文件和日志目录
base_path=/data1/fastdfs_tracker
#设置http端口号,初始值为8080
http.server_port= 58808
为启动脚本创建软引用,因为fdfs_trackerd等命令在/usr/local/bin中并没有,而是在/usr/bin路径下:
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服务器:
service fdfs_trackerd start
如果启动命令执行成功,那么同时在刚才创建的tracker文件目录/opt/fastdfs_tracker中就可以看到启动后新生成的data和logs目录,tracker服务的端口也应当被正常监听,最后再通过netstat命令查看一下端口监听情况:
netstat -unltp|grep fdfs
服务运行的22122端口正常
Storage安装
创建Storage服务器的文件目录,注意同Tracker相比要多建一个目录,因为Storage还需要一个文件存储路径,用于存放接收的文件:
mkdir /data1/fastdfs_storage
mkdir /data1/fastdfs_storage_data
接下来修改/etc/fdfs/storage.conf配置文件,打开文件后依次做以下修改:
#设置storage端口号,默认是23000,同一个组的storage端口号必须一致
port=23000
#设置storage数据文件和日志目录
base_path=/data1/fastdfs_storage
#实际文件存储路径
store_path0=/data1/fastdfs_storage_data
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
tracker_server= 58.216.10.7:22122
#设置 http 端口号
http.server_port=8888
配置完成后同样要为Storage服务器的启动脚本设置软引用:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
接下来就可以启动Storage服务了:
service fdfs_storaged start
验证成功启动的方法:
netstat -unltp|grep fdfs
成功的话,/data1/fastdfs_storage/data目录下生成好的文件夹,data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件夹。
新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。那么最后我们再看一下storage服务的端口监听情况:
查看:storage服务器是否已经登记到 tracker服务器,运行以下命令:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到58.216.10.7 ACTIVE 字样即可说明storage服务器已经成功登记到了tracker服务器
至此我们就已经完成了fastdfs的全部配置,此时也就可以用客户端工具进行文件上传下载的测试了。
fastdfs-nginx-module
FastDFS目前已不支持http协议
余大提供了nginx上使用FastDFS的模块fastdfs-nginx-module,
这样做最大的好处就是提供了HTTP服务并且解决了group中storage服务器的同步延迟问题,
安nginx模块依赖lib库
yum -y install pcre pcre-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
前提要先安装好nginx等
接下来就具体记录一下fastdfs-nginx-module的安装配置过程进入源码nginx安装文件夹
解压成功后就可以编译安装nginx了,进入nginx目录并输入以下命令进行配置:
--prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module --add-module=/root/fastdfs-nginx-module-master/src --http-client-body-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi
make
make install
配置nginx.conf文件,加入server{ }中
listen 58808;
location ~/group1/M00 {
root /data1/fastdfs_storage_data/data;
ngx_fastdfs_module;
}
cp /root/fastfds/fastdfs-master/conf/http.conf /etc/fdfs/
cp /root/fastfds/fastdfs-master/conf/mime.types /etc/fdfs/
cp /root/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/
编辑mod_fastdfs.conf文件,vim /etc/fdfs/mod_fastdfs.conf:
#保存日志目录
base_path=/data1/fastdfs_storage
#tracker服务器的IP地址以及端口号
tracker_server=58.216.10.7:22122
#storage服务器的端口号
storage_server_port=23000
#文件 url 中是否有 group 名
url_have_group_name = true
存储路径
store_path0=/opt/fastdfs_storage_data
#设置组的个数,事实上这次只使用了group1
group_count = 1
设置了group_count = 1,接下来就需要在文件尾部追加这1个group setting:
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data1/fastdfs_storage_data
接下来还需要建立 M00 至存储目录的符号连接:
ln -s /data1/fastdfs_storage_data/data /data1/fastdfs_storage_data/data/00
最后启动nginx:
/etc/init.d/nginx start
配置集群:
存储服务器上配置:
#设置storage端口号,默认是23000,同一个组的storage端口号必须一致
port=23000
#设置storage数据文件和日志目录
base_path=/data1/fastdfs_storage
#实际文件存储路径
store_path0=/data1/fastdfs_storage_data
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#tracker 服务器的 IP地址和端口号,如果是单机搭建,IP不要写127.0.0.1,否则启动不成功
tracker_server=58.216.10.7:22122
#设置 http 端口号
http.server_port=8888
启动存储服务器:
/etc/init.d/fdfs_storaged start
主服务器上传测试存储服务器有没有同步过来