在咱们工做中遇到一些项目有大量的文件时须要采用分布式存储系统来提供更好的服务,咱们能够采用fastdfs,分布式系统有不少,入NFS,TFS,MFS,FastDFS等,各有优点,具体采用哪一种,各位同窗能够自行百度查看每一个系统的特性,那个更适合本身的业务。nginx
我这里是须要存储大量的小视频文件,若是直接存储的话不利于管理,并且会影响读写速度,单机的话可能会存在数据丢失的风险等,因此采用FastDFS系统来存储。c++
分布式优点:防止单机故障,数据读取速度快,利于管理等。vim
安装步骤和优化以下:centos
软件包:服务器
libfastcommon-master.zip fastdfs-master.zip fastdfs-nginx-module-master.zip
提早安装相关操做系统包分布式
yum install unzip zip gcc-c++
建立一个文件夹/root/fastfds,用来保存相关软件ide
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
查看是否有23000,22122,两个端口在
成功的话,/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
主服务器上传测试存储服务器有没有同步过来