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

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

一.FastDFS简介

1.1 什么是FastDFS?

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

1.2 FastDFS的架构

如图:
这里写图片描述
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 文件上传流程

这里写图片描述

1.7 文件下载流程

这里写图片描述

上传文件之后会返回:
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)
这里写图片描述

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)

这里写图片描述

  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 这里写图片描述
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页