Centos搭建FASTDFS+NGINX

2022-06-29 16:11:47 浏览数 (1)

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。 FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

  • 简介

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。 存储节点存储文件,完成文件管理的所有功能:就是这样的存储、同步和提供存取接口,FastDFS同时对文件的metadata进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value)方式表示,如:width=1024,其中的key为width,value为1024。文件metadata是文件属性列表,可以包含多个键值对。 跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。 为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。 在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。 当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。 FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

  • 上传交互过程
  1. client询问tracker上传到的storage,不需要附加参数;
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件上传。
  • 下载交互过程
  1. client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
  2. tracker返回一台可用的storage;
  3. client直接和storage通讯完成文件下载。 需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

单节点安装FASTDFS NGINX

环境准备

IP

版本

服务

192.168.1.10

CentOS Linux release 7.6.1810 (Core)

NGINX、FASTDFS

我这个是最小化安装的所以需要安装一些命令 方便后面操作
代码语言:javascript复制
yum -y install net-tools vim wget git make cmake gcc gcc-c  

①libfastcommon下载安装

代码语言:javascript复制
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
./make.sh
./make.sh install

②fastdfs下载安装

代码语言:javascript复制
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/

③修改配置文件

创建目录:
代码语言:javascript复制
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
创建配置文件:
代码语言:javascript复制
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:
代码语言:javascript复制
将:
base_path=/home/yuqing/fastdfs
改为:
base_path=/var/lib/fast-dfs/tracker #用于存放日志。
修改storage进程的配置文件/etc/fdfs/storage.conf:
代码语言:javascript复制
将:
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:
代码语言:javascript复制
将:
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进程:

代码语言:javascript复制
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
检查进程:
代码语言:javascript复制
[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
测试:
代码语言:javascript复制
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
代码语言:javascript复制
#上传一个图片到服务器上
[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的依赖包:
代码语言:javascript复制
yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
下载fastdfs-nginx-module、nginx
代码语言:javascript复制
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:
代码语言:javascript复制
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 配置为:

代码语言:javascript复制
 location ~/group([0-9])/M00 {
   
     ngx_fastdfs_module;
     }

C、如查下载时如发现老报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。


我的nginx.conf修改如下

代码语言:javascript复制
#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 简单粗暴

代码语言:javascript复制
systemctl stop firewalld && systemctl disable firewalld && setenforce 0
启动nginx:

/usr/local/nginx-1.12.0/sbin/nginx

测试:

浏览器访问:http://192.168.1.10

访问图片或者文本: IP+端口/获取的地址

代码语言:javascript复制
获取的地址:
[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

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101935.html原文链接:https://javaforall.cn

0 人点赞