HA虚拟IP:192.168.1.208
HA软件:Keepalived
操做系统:CentOS 7
用户:root
数据目录:/data/fastdfscss
安装包:
fastdfs-master-V5.05.zip:FastDFS源码
libfastcommon-master.zip:(从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库)
fastdfs-nginx-module-master.zip:storage节点http服务nginx模块
nginx-1.10.0.tar.gz:Nginx安装包
ngx_cache_purge-2.3.tar.gz:Nginx图片缓存清除模块 html
获取安装包的方式:
1> 从这里下载打包好的全部安装包:http://download.csdn.net/detail/xyang81/9667493
2> 从做者github官网挨个下载fastdfs源码及其依赖库:https://github.com/happyfish100 和 Nginx缓存清除模块:https://github.com/FRiCKLE/ngx_cache_purge
开始前,先将全部安装包下载到各个节点的/usr/local/src目录中。nginx
1> 本文称节点IP最后一段就表明某个节点,如:192.168.1.206,文中提到206节点,就表明192.168.1.206。
2> 本文称tracker或跟踪服务器是同一个意思
3> 本文称storage或存储服务器是同一个意思c++
shell> yum install make cmake gcc gcc-c++
[root@localhost ~]# cd /usr/local/src [root@localhost src]# ls fastdfs-master-V5.05.zip fastdfs-nginx-module-master.zip libfastcommon-master.zip nginx-1.10.0.tar.gz ngx_cache_purge-2.3.tar.gz openssl-1.0.1t
解压 libfastcommon,命令:git
[root@localhost src]# unzip libfastcommon-master.zip [root@localhost src]# cd libfastcommon-master [root@localhost libfastcommon-master]# ./make.sh [root@localhost libfastcommon-master]# ./make.sh install
执行以上4步,安装完毕,即完成第一步。github
解压 libfastcommon,命令:sql
[root@localhost libfastcommon-master]# cd .. [root@localhost src]# ls fastdfs-master-V5.05.zip openssl-1.0.1t.tar.gz fastdfs-nginx-module-master.zip pcre-8.39 libfastcommon-master pcre-8.39.tar.gz libfastcommon-master.zip zlib-1.2.8 nginx-1.10.0.tar.gz zlib-1.2.8.tar.gz ngx_cache_purge-2.3.tar.gz zlib-1.2.8.tar.gz.1 openssl-1.0.1t [root@localhost src]# unzip fastdfs-master-V5.05.zip [root@localhost src]# cd fastdfs-master-V5.05 -bash: cd: fastdfs-master-V5.05: 没有那个文件或目录 [root@localhost src]# ls fastdfs-master openssl-1.0.1t fastdfs-master-V5.05.zip openssl-1.0.1t.tar.gz fastdfs-nginx-module-master.zip pcre-8.39 libfastcommon-master pcre-8.39.tar.gz libfastcommon-master.zip zlib-1.2.8 nginx-1.10.0.tar.gz zlib-1.2.8.tar.gz ngx_cache_purge-2.3.tar.gz zlib-1.2.8.tar.gz.1 [root@localhost src]# cd fastdfs-master [root@localhost fastdfs-master]# ./make.sh [root@localhost fastdfs-master]# ./make.sh install
执行以上几步,
显示:shell
[root@localhost fastdfs-master]# ./make.sh install cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../ common -I/usr/include/fastcommon cc -Wall -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -g -O -DDEBUG_FLAG -c -o tracker_proto.o tracker_proto.c -I../common -I/usr/ include/fastcommon ... tracker_client.h storage_client.h storage_client1.h client_func.h client_global.h fdfs_client.h /usr/include/fastdfs if [ ! -f /etc/fdfs/client.conf.sample ]; then cp -f ../conf/ client.conf /etc/fdfs/client.conf.sample; fi
即安装完毕!数据库
上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是做者给咱们的示例文件,咱们须要把其中的tracker.conf.sample文件改成tracker.conf配置文件并修改它。看命令:apache
[root@localhost fastdfs-master]# cd /etc/fdfs [root@localhost fdfs]# ls client.conf.sample storage.conf.sample tracker.conf.sample --- [root@localhost fdfs]# cp tracker.conf.sample tracker.conf [root@localhost fdfs]# vim tracker.conf
打开tracker.conf文件,只须要找到你只须要该这两个参数就能够了。
# the base path to store data and log files base_path=/data/fastdfs # HTTP port on this tracker server http.server_port=80
固然前提是你要有或先建立了/data/fastdfs目录。port=22122这个端口参数不建议修改,除非你已经占用它了。
修改完成保存并退出 vim ,这时候咱们可使用/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start来启动 Tracker服务,可是这个命令不够优雅,怎么作呢?使用ln -s 创建软连接:
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
这时候咱们就可使用service fdfs_trackerd start来优雅地启动 Tracker服务了,是否是比刚才带目录的命令好记太多了(懒是社会生产力)。你也能够启动过服务看一下端口是否在监听,命令:
启动服务:service fdfs_trackerd start
查看监听:netstat -unltp|grep fdfs
启动命令以下:
[root@localhost fdfs]# mkdir /data [root@localhost fdfs]# mkdir /data/fastdfs [root@localhost fdfs]# /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
看到22122端口正常被监听后,这时候就算 Tracker服务安装成功啦!
[root@localhost fdfs]# netstat -unltp | grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 5895/fdfs_trackerd
如今开始配置 Storage 服务,因为我这是单机器测试,你把 Storage 服务放在多台服务器也是能够的,它有 Group(组)的概念,同一组内服务器互备同步,这里再也不演示。直接开始配置,依然是进入/etc/fdfs的目录操做,首先进入它。会看到三个.sample后缀的文件,咱们须要把其中的storage.conf.sample文件改成storage.conf配置文件并修改它。还看命令:
cp storage.conf.sample storage.conf vim storage.conf
指令操做:
[root@localhost fdfs]# cd /etc/fdfs [root@localhost fdfs]# cp storage.conf.sample storage.conf [root@localhost fdfs]# vim storage.conf
打开storage.conf文件后,找到这两个参数进行修改:
# the base path to store data and log files base_path=/data/fastdfs/storage # store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist store_path0=/data/fastdfs/storage #store_path1=/home/yuqing/fastdfs2 # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address tracker_server=192.168.198.129:22122
固然你的/data/fastdfs目录下要有storage文件夹,没有就建立一个,否则会报错的,日志以及文件都会在这个下面,启动时候会自动生成许多文件夹。stroage的port=23000这个端口参数也不建议修改,默认就好,除非你已经占用它了。
修改完成保存并退出 vim ,这时候咱们依然想优雅地启动 Storage服务,带目录的命令不够优雅,这里仍是使用ln -s 创建软连接:
ln -s /usr/bin/fdfs_storaged /usr/local/bin
执行命令启动服务:
service fdfs_storaged start
出现了一个大大的error啦!!!要仔细看,错误提示是找不到文件夹,这就好办了嘛。建立一个文件夹再次启动看看。
[root@localhost fdfs]# /usr/bin/fdfs_storaged start [2017-02-08 14:48:00] ERROR - file: shared_func.c, line: 968, /etc/fdfs/start is not a regular file [2017-02-08 14:48:00] ERROR - file: process_ctrl.c, line: 230, load conf file "start" fail, ret code: 22
此次启动成功,没有错误了。查看一下监听:
netstat -unltp|grep fdfs
监听以下:
[root@localhost fdfs]# netstat -unltp|grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 5895/fdfs_trackerd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 6001/fdfs_storaged
很好,22122 和 23000端口都在监听了,这个时候你去/data/fastdfs/storage文件夹下看的话,会出现一大堆文件夹,并且进去还有一大堆,哈哈,这就是存放文件的啦!
咱们安装配置并启动了 Tracker 和 Storage 服务,也没有报错了。那他俩是否是在通讯呢?咱们能够监视一下:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到我横线处ACTIVE这样就 ok 啦!
[root@localhost fdfs]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf
[2017-02-08 14:51:16] DEBUG - base_path=/data/fastdfs/storage, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=600s, use_storage_id=0, storage server id count: 0 server_count=1, server_index=0 tracker server is 192.168.160.130:22122 group count: 1 Group 1: group name = group1 disk total space = 17878 MB disk free space = 10198 MB trunk free space = 0 MB storage server count = 1 active server count = 1 storage server port = 23000 storage HTTP port = 8888 store path count = 1 subdir count per path = 256 current write server index = 0 current trunk file id = 0 Storage 1: id = 192.168.160.130 ip_addr = 192.168.160.130 (localhost.localdomain) ACTIVE http domain = version = 5.08 join time = 2017-02-08 14:49:53 up time = 2017-02-08 14:49:53
其实这个时候你就能够进行上传测试了,但可能会下载不了,
解压 fastdfs-nginx-module ,记着这时候别用tar解压了,由于是 .zip 文件,正确命令:
unzip master.zip
这是和普通 Nginx 安装不同的地方,由于加载了模块。
若nginx未安装,根据相关教程进行安装,若已安装,查看已安装的nginx的版本,找到源码的存放位置,而后配置fastdfs-nginx-module模块
[root@localhost src]# cd /home/roo/下载/nginx-1.11.6 [root@localhost nginx-1.11.6]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module-master/src/ checking for OS + Linux 3.10.0-327.36.3.el7.x86_64 x86_64 checking for C compiler ... found [root@localhost nginx-1.11.6]# make && make install
这时候,咱们能够看一下 Nginx 下安装成功的版本及模块,命令:
/usr/local/nginx/sbin/nginx -V
cd /usr/local/src/fastdfs-nginx-module-master/src/ vim mod_fastdfs.conf cp mod_fastdfs.conf /etc/fdfs
修改mod-fastdfs.conf配置只须要修改我标注的这三个地方就好了,其余不须要也不建议改变。
# FastDFS tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address # valid only when load_fdfs_parameters_from_tracker is true tracker_server=192.168.198.129:22122 # if the url / uri including the group name # set to false when uri like /M00/00/00/xxx # set to true when uri like ${group_name}/M00/00/00/xxx, such as group1/M00/xxx # default value is false url_have_group_name = true # store_path#, based 0, if store_path0 not exists, it's value is base_path # the paths must be exist # must same as storage.conf store_path0=/data/fastdfs/storage #store_path1=/home/yuqing/fastdfs1 接着咱们须要把fastdfs-5.05下面的配置中尚未存在/etc/fdfs中的拷贝进去 cd /usr/local/src/fastdfs-5.05/conf cp anti-steal.jpg http.conf mime.types /etc/fdfs/
cd /usr/local/nginx/conf vi nginx.conf
在配置文件中加入:
location /group1/M00 { root /data/fastdfs/storage/; ngx_fastdfs_module; }
因为咱们配置了group1/M00的访问,咱们须要创建一个group1文件夹,并创建M00到data的软连接。
mkdir /data/fastdfs/storage/data/group1 ln -s /data/fastdfs/storage/data /data/fastdfs/storage/data/group1/M00
启动 Nginx ,会打印出fastdfs模块的pid,看看日志是否报错,正常不会报错的
/usr/local/nginx/sbin/nginx
打开浏览器,访问一下发现并不能访问,也并无报错,但显示以下画面。糟糕了,怎么办?对了,我好像没关闭防火墙。
开放80端口访问权限。在iptables中加入重启就行,或者你直接关闭防火墙,本地测试环境能够这么干,但到线上万万不能关闭防火墙的。
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
重启防火墙,使设置生效:
service iptables restart
再次刷新浏览器,能够看到以下画面,说明咱们 Nginx 结合 fastdfs-nginx-module 模块安装并配置成功啦!
我最后说一下怎么在已经安装过 Nginx 的服务器上安装配置 fastdfs-nginx-module 模块? 由于,通常咱们线上服务器都是已经安装过 Nginx 的,因此这个时候,咱们就直接进入 Nginx 的存放目录,进行配置后编译,就不须要执行最后安装make install这一步了,接着重启就好了。
完成上面的步骤后,咱们已经安装配置完成了所有工做,接下来就是测试了。由于执行文件所有在/usr/bin目录下,咱们切换到这里,并新建一个test.txt文件,随便写一点什么,我写了This is a test file. by:mafly这句话在里边。而后测试上传:
cd /usr/bin vim test.txt fdfs_test /etc/fdfs/client.conf upload test.txt
很不幸,并无成功,报错了。
ERROR - file: shared_func.c, line: 960, open file /etc/fdfs/client.conf fail, errno: 2, error info: No such file or directory ERROR - file: ../client/client_func.c, line: 402, load conf file "/etc/fdfs/client.conf" fail, ret code: 2
通常什么事情第一次都不是很顺利,这很正常,经过错误提示我看到,好像没有找到client.conf这个文件,如今想起来的确没有配置这个文件,那咱们如今去配置一下图中的两个参数:
cd /etc/fdfs cp client.conf.sample client.conf vim client.conf
怎么还依然报错阿???
upload file fail, error no: 2, error info: No such file or directory
哈哈,你是否是测试上传命令中要上传的test.txt文件路径有问题,嗯,那我改一下命令:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /usr/bin/test.txt
成功啦!!! 返回文件信息及上传后的文件 HTTP 地址,你打开浏览器访问一下试试
接下来其实还有更多关于文件的工做,好比防盗链、图片切图、视频处理等等。
>1.加token验证 >2.将FastDFS返回的地址,转化为该地址的映射,经过中间件来进行转换访问
1.Storage server会链接集群中全部的Tracker server,定时向他们报告本身的状态,包括磁盘剩余空间、文件同步情况、文件上传下载次数等统计信息。
2.storage集群由一个或多个组构成,集群存储总容量为集群中全部组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不一样组的Storage server之间不会相互通讯,同组内的Storage server之间会相互链接进行文件同步,从而保证同组内每一个storage上的文件彻底一致的。一个组的存储容量为该组内存储服务器容量最小的那个,因而可知组内存储服务器的软硬件配置最好是一致的。采用分组存储方式的好处是灵活、可控性较强。好比上传文件时,能够由客户端直接指定上传到的组也能够由tracker进行调度选择。一个分组的存储服务器访问压力较大时,能够在该组增长存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,能够增长组来扩充存储容量(横向扩容)。
原文件信息的存储:
>1.在上传文件时,写入FastDfs中的该文件NameValuePair[]中,但此方式只能根据文件查看文件的备注信息,FastDfs没有提供逆向查询的方式; >2.在关系型数据库建立一张表,用于存储该group下的全部文件信息,此方式能够解决第一种方式的逆向查询问题,同时能够存储FastDfs的文件信息;
返回错误码28,表示磁盘空间不足。注意FastDFS中有
预留空间的概念,在tracker.conf中设置,配置项为
:reserved_storage_space,缺省值为4GB,即预留
4GB的空间。请酌情设置reserved_storage_space这个
参数,好比能够设置为磁盘总空间的20%左右。
在配置文件/etc/fdfs/mod_fastdfs.conf中,缺省的
设置是这样的:http.need_find_content_type=false
这个参数在nginx中须要设置为true,apache中应该设置为false
可使用fdfs_monitor来删除。命令行以下:
/usr/local/bin/fdfs_monitor delete
例如:
/usr/local/bin/fdfs_monitor
/etc/fdfs/client.conf delete group1
192.168.0.100
注意:若是被删除的storage server的状态是ACTIVE
,也就是该storage server还在线上服务的状况下,
是没法删除掉的。
返回错误号2
错误号2表示没有ACTIVE状态的storage server。能够
执行fdfs_monitor查看服务器状态。