FastDFS与HDFS的区别
hadoop的文件系统HDFS主要解决并行计算中分布式存储数据的问题。其单个数据文件通常很大,采用了分块(切分)存储的方式;
FastDFS主要用于大中网站,为小文件上传和下载提供在线服务。所以在负载均衡、动态扩容等方面都支持得比较好,FastDFS不会对文件进行分快(切分)存储。
HDFS集群部署 : HDFS集群部署
安装FastDfs
github下载FastDfs相关的文件
https://github.com/happyfish100/fastdfs 下载fastdfs文件 我这里下载的是5.11版本
下载libfastcommon 依赖
https://github.com/happyfish100/libfastcommon/tree/V1.0.36
解压fastdfs-5.11.tar.gz 和libfastcommon-1.0.36.zip
检查Linux上是否安装了 gcc、libevent、libevent-devel,若没有安装则安装:
yum install gcc libevent libevent-devel -y
切换到解压后的libfastcommon目录,执行make脚本进行编译
./make.sh
安装fastDfs
./make.sh
./make.sh install
查看编译后的文件
FastDFS所有编译出来的文件存放在/usr/bin
目录下,所有配置文件存放在/etc/fdfs
目录下
另外注意需要把解压后的fastdfs-5.11/conf
目录下的两个文件拷贝到/etc/fdfs/
cp http.conf /etc/fdfs/
cp mime.types /etc/fdfs/
FastDFS配置
[root@node01 admin]# cd /etc/fdfs/
[root@node01 fdfs]# vim tracker.conf
修改下面几个地方
# the base path to store data and log files
base_path=/export/fastdfs/tracker# the tracker server port
port=22122需要自己去创建文件夹/export/fastdfs/tracker
修改storage.conf文件
# the storage server port
port=23000
# the base path to store data and log files
base_path=/export/fastdfs/storage# the paths must be exist
store_path0=/export/fastdfs/storage# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=node01:22122# the port of the web server on this storage server
http.server_port=8888
vim client.conf
# the base path to store log files
base_path=/export/fastdfs/client#HTTP settings
http.tracker_server_port=80
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=node01:22122
启动fastdfs服务:
fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged /etc/fdfs/storage.conf其他命令:
查看storage是否已经注册到了tracker下
fdfs_monitor /etc/fdfs/storage.conf
在data目录下会创建256个子目录 有256的平方个目录存储文件
重启storage:fdfs_storaged /etc/fdfs/storage.conf restart
重启tracker:fdfs_trackerd /etc/fdfs/tracker.conf restart
关闭tracker执行命令:fdfs_trackerd /etc/fdfs/tracker.conf stop
关闭storage执行命令:fdfs_storaged /etc/fdfs/storage.conf stop
fdfs命令格式
上传文件命令:fdfs_test <config_file> <operation> <local_filename>:
config_file:配置文件的位置
operation:upload,download,getmeta,setmeta,delete and query_servers,上传文件用的是upload
local_filename:要上传的文件名字下载文件命令:fdfs_test <config_file> download <group_name> <remote_filename>
group_name: 要下载的文件所在的组名
remote_filename:要下载的文件名(要指定在fastDFS中存储的名字)
删除文件命令:fdfs_test <config_file> delete <group_name> <remote_filename>:
上传a.txt文件
fdfs_test /etc/fdfs/client.conf upload a.txt
删除文件
fdfs_delete_file /etc/fdfs/client.conf 组名/远程文件
fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt group1/M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt
或者
fdfs_test /etc/fdfs/client.conf delete 组名 远程文件名
例如:fdfs_test /etc/fdfs/client.conf delete group1 M00/00/00/wKgdgF4XDSuAY38UAAAAJATU84Y083.txt
FastDFS的HTTP访问
FastDFS提供了一个Nginx扩展模块,利用该模块,我们可以通过Nginx访问已经上传到FastDFS上的文件,下载fastdfs-nginx-module https://github.com/happyfish100/fastdfs-nginx-module
nginx下载地址:http://nginx.org/download/ 下载版本为1.14.2
将Fastdfs的Nginx扩展模块源代码上传到Linux上,并解压
unzip fastdfs-nginx-module-1.20.zip
切换至解压后的Nginx主目录,执行配置操作
./configure --prefix=/home/admin/nginx_fdfd --add-module=/home/admin/fastdfs-nginx-module-master/src
--prefix:指定nginx安装路径
--add-module:指定fastDFS的nginx模块的源代码路径进行编译
make
进行安装
make install
如果出现下面的问题:
[root@node01 nginx-1.20.2]# make install
make -f objs/Makefile install
make[1]: Entering directory `/home/admin/nginx-1.20.2'
cc -c -pipe -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='"/etc/fdfs/mod_fastdfs.conf"' -I src/core -I src/event -I src/event/modules -I src/os/unix -I objs -I src/http -I src/http/modules -I /usr/local/include \
-o objs/addon/src/ngx_http_fastdfs_module.o \
/home/admin/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c
In file included from /home/admin/fastdfs-nginx-module-master/src/common.c:26:0,
from /home/admin/fastdfs-nginx-module-master/src/ngx_http_fastdfs_module.c:6:
/usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory
#include "common_define.h"
经过了系统的排查,最终得知,在安装FastDFS的时候,其中的函数声明、宏定义、函数原型被指到了 “ /usr/include/fastdfs /usr/include/fastcommon ” 目录下,如下图:
而Nginx的扩展模块配置文件默认指定的目录为 “ /usr/include ”,找不到文件,才导致的上面的错误 “ 致命错误: common_define.h 的文件或目录不存在 ” ,解决这个问题,只需要将Nginx扩展模块的路径目录修改为上面正常的 “ /usr/include/fastdfs ” 即可,输入命令 [root@node01 fastdfs]# vim /home/admin/fastdfs-nginx-module-1.20/src/config ,总共修改两项即可:
修改为:
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
修改为:
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
如果nginx启动出现403的问题;
查看日志
2022/05/26 22:49:28 [error] 14317#0: *1 "/home/admin/nginx1.20/html/index.html" is forbidden (13: Permission denied), client: 192.168.36.1, server: localhost, request: "GET / HTTP/1.1", host: "node02:90"
2022/05/26 22:49:28 [error] 14317#0: *1 open() "/home/admin/nginx1.20/html/favicon.ico" failed (13: Permission denied), client: 192.168.36.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "node02:90", referrer: "http://node02:90/"
^C
可以得值用户没权限修改启动用户和当前用户一样:修改nginx配置文件conf/nginx.conf
,将user配置修改与启动用户一致。
编译完成后,就看进入nginx目录去配置nginx文件:
直接访问文件内容或者下载文件
location /group1/M00 {
root /export/fastdfs/storage/;
ngx_fastdfs_module;
}
如上一个文件:
[root@node01 admin]# fdfs_test /etc/fdfs/client.conf upload 学生.xlsx
访问文件:
http://192.168.36.138/group1/M00/00/00/wKgkimKQUwmATNEQAAABvQAR3-8255_big.txt
其他方式配置文件:
location ~/group([1-9])/M0[0-9] {
ngx_fastdfs_module;
}如果多个nginx设置请求