fastdfs分布式存储系统:
本文是在物理机上安装fastdfs 和 nginx。最好用docker跑。
当项目中需要存储大量静态文件,比如电商网站的商品图片时,就可以使用fastdfs分布式文件存储系统,它使用特定指纹存储文件不仅能存储海量文件,还能避免文件的重复上传 ,由淘宝架构师余庆这个大牛开发后来开源了。但是不得不说我配置这个东西是一路坎坷,做个总结,方便以后自己再卡在这里时能解决。配置fastdfs+nginx我用了整整一个星期。搜索引擎都给我搜懵逼了,还是没能解决(重点就在于nginx编译安装的时候要加上三个类库)
大体总结一下(我用的是ubuntu版本18.04),同样是linux发行版
我一切的安装都是在根目录的usr/local下进行的
1、先安装fastdfs依赖包 wget https://github.com/happyfish100/libfastcommon/archive/V1.0.36.tar.gz
2、再安装fastdfs wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
3、它们都是c语言编写的程序解包编译安装就不提了,到配置tracker.conf和storage.conf以及client.conf,注意storage.conf和client.conf配置里面的tracker_server这个跟踪服务器选项要配置绑定成一样的服务器ip(我的是虚拟机ip)就行了,tracker跟踪服务器跟踪的就是你本机ip
4、用fdfs_trackerd …/tracker.conf start
fdfs_storaged …/storage.conf start
启动跟踪服务器和存储服务器,测试上传文件成功就代表fastdfs分布式文件存储系统配置完成。
但是fastdfs服务器提供的上传及访问文件的速度是比较慢的,当我们有了大量的访问量后,就需要使用nginx服务器(我们项目里用的runserver和nginx都是个web服务器)来提升(尤其是静态文件)文件访问的效率
当你配置好nginx后,你再去访问一个文件时就不是找fastdfs了,而是去找nginx了
5、安装nginx,wget https://nginx.org/download/nginx-1.12.1.tar.gz
5.1 安装nginx所需环境
pcre 类库:https://ftp.pcre.org/pub/pcre/pcre-8.00.tar.gz
zlib类库:http://www.zlib.net/zlib-1.2.11.tar.gz
openssl 类库:https://www.openssl.org/source/openssl-1.1.0e.tar.gz
5.2 把下载下来的这三个类库分别tar zxvf解压,然后分别进入解压后的目录,分别执行./configure 和 make以及make install三条命令他们都是C写的(ssl是./config),这样就完成了编译安装这三个类库。
6、在/usr/local下新建一个nginx目录,把前面解包好的nginx-1.12.1包移动到nginx目录下,进入nginx-1.12.1,执行./configure,这时就报这个错:
我后来才反应过来,我前面装的类库还没用,所以我改为了
sudo ./configure --prefix=/usr/local/nginx --with-openssl=/usr/local/openssl-1.1.0e --with-pcre=/usr/local/pcre-8.00 --with-zlib=/usr/local/zlib-1.2.11
我们用这个命令,把我们安装的三个类库加上,注意–prefix=/usr/local/nginx就是你nginx安装的路径=后面跟的是前面你解压这三个类库的绝对路径,当你看到
Configuration summary
using PCRE library: /usr/local/pcre-8.00
using OpenSSL library: /usr/local/openssl-1.1.0e
using zlib library: /usr/local/zlib-1.2.11
就代表配置成功了
7、./configure…成功了,但是马上的make(编译),又报错了
8、又报错,最后还是靠搜索引擎找到决解办法,就在当前/usr/local/nginx/nginx1.12.0目录下,(看报错信息)有个objs/Makefile文件,sudo vi 打开它,把第三行的有个选项 -Werror选项 把它删掉,然后保存退出,你再sudo make 就成功了,紧接着sudo make install安装就好了,你就会发现上级目录nginx多了一系列安装好的目录特别是sbin,它里面有个名为nginx的可执行程序,这个就是我们的nginx的启动程序。
9、这只是安装了nginx默认的配置,我们通过nginx服务器和faastdfs服务器配合使用可以让fastdfs支持http访问我们的文件。FastDFS通过tracker服务器,将文件放在storage存储服务器中,但是同组存储服务器之间需要进入文件复制,有同步延迟的问题。若Tracker服务器将文件上传到了192.168.61.129,上传成功后文件fileID已经返回给客户端。此时FastDFS存储集群机制才会将这个文件同步到同组存储192.168.61.130,在文件还没有复制完成的情况下,客户端如果用这个返回的fileID在192.168.61.130上取文件,就会出现文件无法访问的错误。而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。一句话就是fastdfs-nginx-module可以让nginx和fastdfs配合使用起来变高效。