欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搭建FastDFS+Nginx+fastdfs-nginx-module安装配置

程序员文章站 2022-07-03 14:28:35
...

经过几天的学习,通过前辈们的分享心得,自己搭建了一个最小的简单FastDfs,下面把我学习的心得记录一下,温故而知新!!!

一.FastDFS简介

1.1 什么是FastDFS?

FastDFS是用c语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2 FastDFS的架构

如图:
搭建FastDFS+Nginx+fastdfs-nginx-module安装配置
FastDFS架构包括 Tracker server和Storage server。客户端请求Tracker server进行文件上传、下载,通过Tracker server调度最终由Storage server完成文件上传和下载。

    tracker server:跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。
    storage server:存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
    client:客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。
1.3 Tracker 集群

FastDFS集群中的Tracker server可以有多台,Tracker server之间是相互平等关系同时提供服务,Tracker server不存在单点故障。客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。

1.4Storage集群

Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storage server之间不会相互通信,同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。
采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

1.5 Storage状态收集

Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,包括磁盘剩余空间、文件同步状况、文件上传下载次数等统计信息。

1.6 文件上传流程

搭建FastDFS+Nginx+fastdfs-nginx-module安装配置

1.7 文件下载流程

搭建FastDFS+Nginx+fastdfs-nginx-module安装配置

上传文件之后会返回:
group1/M00/00/00/wKgZgluJDpiAWpqAAev7k46AZD8093.pdf
组名:group1
路径: M00/00/00/wKgZgluJDpiAWpqAAev7k46AZD8093.pdf
在项目中此信息需要我们自己保存
M00 代表的是配置在虚拟机上的一个虚拟路径
00/00/是虚拟路径下自己创建的文件目录
wKgZgluJDpiAWpqAAev7k46AZD8093.pdf : 文件相关信息(可能通过什么算法生成)

二 搭建

2.1 环境准备
  1. 我用的是VMware 12 / centos7,本地搭建一台虚拟机
  2. 准备搭建所需要的gz包, 可以自行在官网下载
    nginx-1.8.0.tar.gz
    FastDFS_v5.05.tar.gz
    fastdfs-nginx-module_v1.16.tar.gz
    libfastcommonV1.0.7.tar.gz
  3. 本人的都是在root用户下操作的
2.2 Nginx搭建
2.2.1. 环境依赖
   1. nginx是c编写的,对于解压的源码进行编译,所以首先设置编译环境: gcc
      执行: (-y: 不询问)
              yum -y install gcc
              yum -y install gcc-c++
   2. Perl库,包括 perl 兼容的正则表达式库
           yum install -y pcre pcre-devel
   3. zlib库提供了很多种压缩和解压缩的方式
       yum install -y zlib zlib-devel
   4. OpenSSL 是一个强大的安全套接字层密码库
        yum install -y openssl openssl-devel
2.2.2编译安装

su root
将nginx-1.8.0.tar.gz拷贝至linux服务器。
cp -rf /home/xzb/nginx-1.8.0.tar.gz /usr/local/
#解压:
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
#创建临时目录
mkdir -p /var/temp/nginx
# 参数配置

     ./configure \
    --prefix=/usr/local/nginx \
    --pid-path=/var/run/nginx/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --with-http_gzip_static_module \
    --http-client-body-temp-path=/var/temp/nginx/client \
    --http-proxy-temp-path=/var/temp/nginx/proxy \
    --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
    --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
    --http-scgi-temp-path=/var/temp/nginx/scgi 

#编译安装
make
make install
#此时可以看到 在 /usr/local/nginx/目录下有3个文件夹
sbin 运行nginx 的命令
conf 配置文件
logs 日志文件

# 启动nginx

     注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:
    ./nginx -c /usr/local/nginx/conf/nginx.conf
    如果不指定-c,nginx在启动时默认加载conf/nginx.conf文件,此文件的地址也可以在编译安装nginx时指定./configure的参数(--conf-path= 指向配置文件(nginx.conf))
     #启动命令
    ./nginx 
     # 停止命令
     ./nginx  -s stop
     或者全部停止 ./nginx -s quit
     #重启ngnix
     ./ngnix -s reload
     #查看ngnix  状态
    netstat -tupln | grep ngnix

#开机自启动 …
如果启动成功了访问页面:根据自己的IP地址(eg.我的192.168.25.130)
搭建FastDFS+Nginx+fastdfs-nginx-module安装配置

2.3 安装FastDFS
2.3.1 安装FastDFS的基础库
1. 安装libevent库
yum install -y libevent
2. 安装 libfastcommon基础库
   cp  -rf /home/xzb/libfastcommonV1.0.7.tar.gz  /usr/local
   #解压
  tar -xzvf  libfastcommonV1.0.7.tar.gz
  cd libfastcommon-1.0.7
  #执行
  ./make.sh
  ./make.sh install  
  3. 注意:
  上诉安装完之后,安装完的路径在/usr/lib64,但是fastDFS访问的lib路径在 /usr/local/lib 中 所以此时需要建立软连接
  ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
  ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
2.3.2 安装FastDFS中 tracker服务
  1. 解压
    cp -rf /home/xzb/FastDFS_v5.05.tar.gz /usr/local/
    tar -xzvf FastDFS_v5.05.tar.gz
    #执行
    cd FastDFS
    ./make
    ./make install
    如果发现在 /etc/fdfs/ 这个目录有配置文件说明安装成功了!!

  2. 配置tracker服务

          1. 创建tracker的数据文件/日志目录(我存放在了/opt/fastdfs_tracker)
          mkdir -p /opt/fastdfs_tracker
           2. 进入 /etc/fdfs/ 执行
           cd /etc/fdfs
           cp  tracker.conf.sample tracker.conf
          3. 编辑 tracker.conf
          disabled=false        #启用配置文件
            port=22122          #设置tracker的端口号
            base_path=/opt/fastdfs_tracker   #设置tracker的数据文件和日志目录(需预先创建)
        http.server_port=80     #设置http端口号
       4. 启动
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
       5. 设置开机启动
       echo '/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart' >> /etc/rc.d/rc.local
     6. 通过如下命令查看trackerd服务是否启动:
            netstat -tupln | grep trackerd   
     7. 如果有错可以在 /opt/fastdfs_tracker/logs 中查看
    
2.3.3 配置FastDFS中的storage服务
1. 创建存放storage 数据/日志文件目录
   mkdir -p /opt/fastdfs_storage
 2. 进入/etc/fdfs
  cd  /etc/fdfs/
  cp storage.conf.sample storage.conf
 3. 编辑 storage.conf
 disabled=false            #启用配置文件 
group_name=group1         #组名,根据实际情况修改
port=23000                #设置storage的端口号
base_path=/opt/fastdfs_storage   #设置storage的日志目录(需预先创建) 
store_path_count=1        #存储路径个数,需要和store_path个数匹配 
store_path0=/opt/fastdfs_storage  #存储路径
tracker_server=192.168.25.130:22122 #tracker服务器的IP地址和端口号 (我这是同一台)
http.server_port=80     #设置http端口号

 4. 启动
 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
 5. 开机启动
 echo '/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart' >> /etc/rc.d/rc.local
6. 是否启动
netstat -tupln | grep storaged
2.3.4 上传测试
    FastDFS安装成功可通过/usr/bin/fdfs_test测试上传、下载等操作。
    cp client.conf.sample client.conf
    修改/etc/fdfs/client.conf
    base_path=/opt/fastdfs_storage
    tracker_server=192.168.25.130:22122

    使用格式:
    /usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件
    比如将/home下的文件上传到FastDFS中:
    /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/我是好人.pdf

    http://192.168.25.130/group1/M00/00/00/M00/00/00/wKgZgluJDpiAWpqAAev7k46AZD8093.pdf就是文件的下载路径。
    对应storage服务器上的
    /opt/fdfs_storage/data/00/00/wKhlBVVY2M-AM_9DAAAT7-0xdqM485_big.png文件。
    由于现在还没有和nginx整合无法使用http下载。
2.3.5在storage中安装Ngnix
  1. 使用nginx可以提供http服务,更好的解决分布同步的问题等
  2. 由于之前已经安装过ngnix ,所以此时我们需要添加fastdfs-nginx-module 
     cp /home/xzb/fastdfs-nginx-module_v1.16.tar.gz  /usr/local
     tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
  3. 在nginx中添加该模块配置
    cd /usr/lcoal/nginx-1.8.0/
    执行:
    ./configure  --add-module=/usr/local/fastdfs-nginx-module/src
    make
    make  install 

  4. cd fastdfs-nginx-module/src/ 
    vi  config (这一步很重要,很重要,很重要(重要的事情说三遍)

         CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
     CORE_LIBS="$CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient"

把local都去掉
5. 然后执行
make
make install
如果没有错误则安装成功

  1. 将插件添加到nginx中
    cd /usr/local/ngnix/conf/
    vi nginx.conf
    server {
    listen 80; #端口
    server_name 192.168.25.130;

    location /group1/M00 {    # 多个组 ~/group[1-3]
        root   /opt/fastdfs_store/data;  #存储数据
        ngx_fastdfs_module;
    } 
    ....
    

    }

  2. 执行命令cd /usr/local/FastDFS/conf
    cp http.conf /etc/fdfs
    cp mime.types /etc/fdfs
    不复制这2个文件启动nginx会报错

  3. 执行命令 cd /usr/local/fastdfs-nginx-module/src
    cp mod_fastdfs.conf /etc/fdfs
    vi mod_fastdfs.conf
    修改如下几项:
    tracker_server=192.168.25.130:22122
    store_path0=/opt/fastdfs_storage
    base_path=/opt/fastdfs_storage
    url_have_group_name = true(配置多个tracker时,应该将此项设置为true)

搭建FastDFS+Nginx+fastdfs-nginx-module安装配置

  1. 建立软连接(配置文件中storage存放数据的路径)

ln -s /opt/fastdfs_storage/data /opt/fastdfs_storage/data/M00

  1. 关闭防火墙或者设置对外端口
    关闭防火墙:
    service firewalld stop //停止防火墙
    service firewalld disable//永久停止
    10 测试
    上传的文件或者图片,可以在浏览器直接访问啦!
    eg. http://192.168.25.130/group1/M00/00/00/wKgZgluJAE2Adan1Aev7k46AZD8377.pdf 搭建FastDFS+Nginx+fastdfs-nginx-module安装配置
相关标签: fastdfs