FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。
FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
- 简介
FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。
存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta
data就是文件的相关属性,以键值对(key
value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。
跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。
为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。
在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。
当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。
- 上传交互过程
- client询问tracker上传到的storage,不需要附加参数;
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件上传。
- 下载交互过程
- client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
- tracker返回一台可用的storage;
- client直接和storage通讯完成文件下载。 需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。
单节点安装FASTDFS+NGINX
环境准备
IP | 版本 | 服务 |
---|---|---|
192.168.1.10 | CentOS Linux release 7.6.1810 (Core) | NGINX、FASTDFS |
我这个是最小化安装的所以需要安装一些命令 方便后面操作
yum -y install net-tools vim wget git make cmake gcc gcc-c++
①libfastcommon下载安装
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
./make.sh
./make.sh install
②fastdfs下载安装
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
./make.sh
./make.sh install
cd conf
cp http.conf anti-steal.jpg mime.types /etc/fdfs/
③修改配置文件
创建目录:
mkdir -p /var/lib/fast-dfs/tracker
mkdir -p /var/lib/fast-dfs/storage
mkdir -p /var/lib/fast-dfs/client
mkdir -p /var/lib/fast-dfs/nginx-module
创建配置文件:
cd /etc/fdfs/
cp tracker.conf.sample /etc/fdfs/tracker.conf
cp storage.conf.sample /etc/fdfs/storage.conf
cp client.conf.sample /etc/fdfs/client.conf
修改tracker进程的配置文件/etc/fdfs/tracker.conf:
将:
base_path=/home/yuqing/fastdfs
改为:
base_path=/var/lib/fast-dfs/tracker #用于存放日志。
修改storage进程的配置文件/etc/fdfs/storage.conf:
将:
base_path=/home/yuqing/fastdfs
改为:
base_path=/var/lib/fast-dfs/storage #用于存放日志
将:
store_path0=/home/yuqing/fastdfs
改为:
store_path0=/var/lib/fast-dfs/storage #存放数据,若不设置默认为前面那个。
将:
tracker_server=192.168.209.121:22122
改为:
tracker_server=192.168.1.10:22122 #指定tracker服务器地址。
#端口根据自己需要更改 后面需要配置nginx代理 端口要与这里一致
将:
http.server_port = 8888
改为
http.server_port = 80
修改client进程的配置文件/etc/fdfs/client.conf:
将:
base_path=/home/yuqing/fastdfs
改为:
base_path=/var/lib/fast-dfs/client #用于存放日志
将:
tracker_server=192.168.0.197:22122
改为:
tracker_server=192.168.1.10:22122 #指定tracker服务器地址。
④启动tracker进程:
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_trackerd /etc/fdfs/tracker.conf stop
或者
systemctl enable fdfs_trackerd
systemctl stop fdfs_trackerd
systemctl start fdfs_trackerd
systemctl status fdfs_trackerd
启动storage进程:
fdfs_storaged /etc/fdfs/storage.conf start
fdfs_storaged /etc/fdfs/storage.conf stop
或者
systemctl enable fdfs_storaged
systemctl stop fdfs_storaged
systemctl start fdfs_storaged
systemctl status fdfs_storaged
检查进程:
[root@localhost fdfs]# ps -ef | grep fdfs
root 14530 1 0 16:11 ? 00:00:00 fdfs_trackerd /etc/fdfs/tracker.conf start
root 14539 1 37 16:11 ? 00:00:02 fdfs_storaged /etc/fdfs/storage.conf start
测试:
fdfs_monitor /etc/fdfs/storage.conf
fdfs_upload_file /etc/fdfs/client.conf local_filename
fdfs_download_file /etc/fdfs/client.conf remote_filename
fdfs_file_info /etc/fdfs/client.conf remote_filename
#上传一个图片到服务器上
[root@localhost ~]# ls test.jpg
test.jpg
[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /root/test.jpg
group1/M00/00/00/wKgBCl-02DCATp8bAABQAuDJvWo009.jpg
#如果有如上返回信息则正确 这个是一会需要访问的地址
⑤安装NGINX
安装fastdfs-nginx-module的依赖包:
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载fastdfs-nginx-module、nginx
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
wget http://nginx.org/download/nginx-1.12.0.tar.gz
tar -xzvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --prefix=/usr/local/nginx-1.12.0 --add-module=PATH/fastdfs-nginx-module/src #(path为fastdfs-nginx-module的存放目录)
make
make install
cp PATH/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
#(path为fastdfs-nginx-module的存放目录)
修改配置文件/usr/local/nginx-1.12.0/conf/nginx.conf:
server {
listen 8888;
server_name localhost;
location ~ /group[0-9]/M00 {
ngx_fastdfs_module;
}
}
A、80 端口值是要与/etc/fdfs/storage.conf 中的 http.server_port=80 相对应, 因为 http.server_port 默认为 8888,如果想改成 80,则要对应修改过来。
B、Storage 对应有多个 group 的情况下,访问路径带 group 名,如/group1/M00/00/00/xxx, 对应的 Nginx 配置为:
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。
我的nginx.conf修改如下
#PATH:fastdfs-nginx-module的目录
[root@localhost ~]# cp PATH/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
cp:是否覆盖"/etc/fdfs/mod_fastdfs.conf"? y
vi /etc/fdfs/mod_fastdfs.conf
修改配置文件/etc/fdfs/mod_fastdfs.conf:
将:
base_path=/tmp
改为:
base_path=/var/lib/fast-dfs/nginx-module
将:
tracker_server=tracker:22122
改为:
tracker_server=192.168.1.10:22122
将:
url_have_group_name = false
改为:
url_have_group_name = true
将:
store_path0=/home/yuqing/fastdfs
改为:
store_path0=/var/lib/fast-dfs/storage
防火墙中打开 Nginx 的 用到的端口
firewall-cmd –permanent –add-port=8888/tcp
firewall-cmd –permanent –add-port=8888/udp
firewall-cmd –permanent –add-port=22122/tcp
firewall-cmd –permanent –add-port=22122/udp
firewall-cmd –permanent –add-port=23000/tcp
firewall-cmd –permanent –add-port=23000/udp
firewall-cmd –reload
简单粗暴
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
启动nginx:
/usr/local/nginx-1.12.0/sbin/nginx
测试:
浏览器访问:http://192.168.1.10
访问图片或者文本:
IP+端口/获取的地址
获取的地址:
[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /root/test.jpg
group1/M00/00/00/wKgBCl-04DiAcOMlAABQAuDJvWo308.jpg
[root@localhost ~]# fdfs_upload_file /etc/fdfs/client.conf /root/test.txt
group1/M00/00/00/wKgBCl-04dmAfY5HAAAAT-7ueFE693.txt
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101935.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...