• leyou_06——FastDFS在Nginx下的安装与测试


    1.FastDFS

    FastDFS是由淘宝的余庆先生所开发的一个轻量级、高性能的开源分布式文件系统。用纯C语言开发,功能丰富:

    • 文件存储

    • 文件同步

    • 文件访问(上传、下载)

    • 存取负载均衡

    • 在线扩容

    2.架构图

     3.FastDFS的角色

    FastDFS两个主要的角色:Tracker Server 和 Storage Server 。

    • Tracker Server:跟踪服务器,主要负责调度storage节点与client通信,在访问上起负载均衡的作用,和记录storage节点的运行状态,是连接client和storage节点的枢纽。

    • Storage Server:存储服务器,保存文件和文件的meta data(元数据),每个storage server会启动一个单独的线程主动向Tracker cluster中每个tracker server报告其状态信息,包括磁盘使用情况,文件同步情况及文件上传下载次数统计等信息

    • Group:文件组,多台Storage Server的集群。上传一个文件到同组内的一台机器上后,FastDFS会将该文件即时同步到同组内的其它所有机器上,起到备份的作用。不同组的服务器,保存的数据不同,而且相互独立,不进行通信。

    • Tracker Cluster:跟踪服务器的集群,有一组Tracker Server(跟踪服务器)组成。

    • Storage Cluster :存储集群,有多个Group组成

    3.上传和下载流程

    上传:客户端上传图片后返回一个ip

     存放着该图片在Storage中的位置

    group1:图片所在的组

     

    下载:携带返回的该id,找到在Storage中的位置。

    4.安装和使用

    1.需要的安装包

     

    2.安装依赖

    安装GCC依赖

    sudo yum -y install gcc

    安装unzip工具

    sudo yum install -y unzip zip

    安装libevent

    sudo yum -y install libevent

    安装Nginx所需依赖

    sudo yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

     

    3.安装libfastcommon-master

    解压刚刚上传的libfastcommon-master.zip

    unzip libfastcommon-master.zip

    进入解压完成的目录:

    cd libfastcommon-master

    编译并且安装:

    sudo ./make.sh 
    sudo ./makesh install

    5.安装FastDFS

    编译安装

    解压

    tar -xvf FastDFS_v5.08.tar.gz

    进入目录

    cd FastDFS

    编译并安装

    sudo ./make.sh 
    sudo ./make.sh install

    校验安装结果

    安装完成,我们应该能在/etc/init.d/目录,通过命令ll /etc/init.d/ | grep fdfs看到FastDFS提供的启动脚本:

    • tarcker.conf.sample 是tracker的配置文件模板

    • storage.conf.sample 是storage的配置文件模板

    • client.conf.sample 是客户端的配置文件模板

     

    我们可以在 /etc/fdfs目录,通过命令查看到以下配置文件模板:

     

    6.启动tracker

    FastDFS的tracker和storage在刚刚的安装过程中,都已经被安装了,因此我们安装这两种角色的方式是一样的。不同的是,两种需要不同的配置文件。

    我们要启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可。

    • 编辑tracker配置

    首先我们将模板文件进行赋值和重命名:

    sudo cp tracker.conf.sample tracker.conf
    sudo vim tracker.conf

    打开tracker.conf,修改base_path配置:

    base_path=/leyou/fdfs/tracker # tracker的数据和日志存放目录
    • 创建目录

    刚刚配置的目录可能不存在,我们创建出来

    sudo mkdir -p /leyou/fdfs/tracker
    • 启动tracker

    • 我们可以使用 sh /etc/init.d/fdfs_trackerd 启动,不过安装过程中,fdfs已经被设置为系统服务,我们可以采用熟悉的服务启动方式:
    sudo service fdfs_trackerd start # 启动fdfs_trackerd服务,停止用stop

     另外,我们可以通过以下命令,设置tracker开机启动:

    sudo chkconfig fdfs_trackerd on

     

    7.启动storage

    我们要启动tracker,就修改刚刚看到的tarcker.conf,并且启动fdfs_trackerd脚本即可。

    • 编辑storage配置

    首先我们将模板文件进行赋值和重命名:

    sudo cp storage.conf.sample storage.conf
    sudo vim storage.conf

    打开storage.conf,修改base_path配置:

    base_path=/leyou/fdfs/storage # storage的数据和日志存放目录
    store_path0=/leyou/fdfs/storage # storage的上传文件存放路径
    tracker_server=192.168.56.101:22122 # tracker的地址 //配置成自己的虚拟机ip
    • 创建目录

    刚刚配置的目录可能不存在,我们创建出来

    sudo mkdir -p /leyou/fdfs/storage
    • 启动storage

      我们可以使用 sh /etc/init.d/fdfs_storaged 启动,同样我们可以用服务启动方式:

    sudo service fdfs_storaged start  # 启动fdfs_storaged服务,停止用stop

     另外,我们可以通过以下命令,设置tracker开机启动:

    sudo chkconfig fdfs_storaged on

     

    最后,通过ps -ef | grep fdfs 查看进程:安装成功

     

    通过client测试上传图片

    [root@root fdfs]# /usr/bin/fdfs_upload_file client.conf /tmp/1.jpg

     

    但此时我们通过浏览器还是无法访问到上传的图片因此我们需要:

    7.安装Nginx及FastDFS模块

    解压

    tar -xvf fastdfs-nginx-module_v1.16.tar.gz

    配置config文件

    # 进入配置目录
    cd /home/leyou/fastDfs/fastdfs-nginx-module/src/
    # 修改配置
    vim config
    # 执行下面命令(将配置中的/usr/local改为/usr):
    :%s+/usr/local/+/usr/+g

     

    配置mod_fastdfs.conf

    # 将src目录下的mod_fastdfs.conf复制到 /etc/fdfs目录:
    sudo cp mod_fastdfs.conf /etc/fdfs/
    # 编辑该文件
    sudo vim /etc/fdfs/mod_fastdfs.cof

     

    修改一下配置:

    connect_timeout=10                          # 客户端访问文件连接超时时长(单位:秒)
    tracker_server=192.168.98.128:22122         # tracker服务IP和端口  修改为自己的虚拟机地址
    url_have_group_name=true                    # 访问链接前缀加上组名
    store_path0=/leyou/fdfs/storage             # 文件存储路径

     

    复制 FastDFS的部分配置文件到/etc/fdfs目录

    cd /home/leyou/fdfs/FastDFS/conf/
    cp http.conf mime.types /etc/fdfs/

     

    8.安装Nginx(如果已经安装了nginx只执行以下红色部分!!!绿色为报错处理!!!

    解压

    tar -xvf nginx-1.10.0.tar.gz

    配置

    sudo ./configure --prefix=/usr/local/nginx --sbin-path=/usr/local/nginx/sbin --add-module=/home/leyou/fastDfs/fastdfs-nginx-module/src
    --prefix=/usr/local/nginx  //文件安装位置
    --sbin-path=/usr/local/nginx/sbin //启动文件位置 ./nginx
    --add-module=/home/leyou/fastDfs/fastdfs-nginx-module/src //Nginx的FastDFS模块

    编译
    make
    安装
    install
    
    

    配置nginx整合fastdfs-module模块

    我们需要修改nginx配置文件,在/usr/local/nginx/conf文件中:

    sudo vim  /usr/local/nginx/conf

    配置nginx的反向代理

    server {
            listen       80;
            server_name  image.taotao.com;
    
            # 监听域名中带有group的,交给FastDFS模块处理
            location ~/group([0-9])/ {
                ngx_fastdfs_module;
            }
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
            
        }
    重启nginx在浏览器中测试上面通过Client上传的图片 成功

     重启nginx准备测试时出现错误:Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid

    缺少nginx.pid文件

     解决方法:

    [root@localhost nginx]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

      /usr/local/nginx/sbin/nginx  //nginx启动文件位置

      使用nginx -c的参数指定nginx.conf文件的位置



    以下为设置nginx的开机自启可以不配置

    • 启动

      nginx # 启动
      nginx -s stop # 停止
      nginx -s reload # 重新加载配置
    • 设置nginx开机启动

      创建一个开机启动的脚本:

      vim /etc/init.d/nginx

      添加以下内容:

    • 如果你是自定义编译安装的nginx,需要根据您的安装路径修改上面红色的地方

       

      #!/bin/sh
      #
      # nginx - this script starts and stops the nginx daemon
      #
      # chkconfig:   - 85 15
      # description:  NGINX is an HTTP(S) server, HTTP(S) reverse
      #               proxy and IMAP/POP3 proxy server
      # processname: nginx
      # config:      /etc/nginx/nginx.conf
      # config:      /etc/sysconfig/nginx
      # pidfile:     /var/run/nginx.pid
      # Source function library.
      . /etc/rc.d/init.d/functions
      # Source networking configuration.
      . /etc/sysconfig/network
      # Check that networking is up.
      [ "$NETWORKING" = "no" ] && exit 0
      nginx="/usr/local/nginx/sbin"
      prog=$(basename $nginx)
      NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
      [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
      lockfile=/var/lock/subsys/nginx
      make_dirs() {
      # make required directories
      user=`$nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=([^ ]*).*/1/g' -`
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
         if [ `echo $opt | grep '.*-temp-path'` ]; then
             value=`echo $opt | cut -d "=" -f 2`
             if [ ! -d "$value" ]; then
                 # echo "creating" $value
                 mkdir -p $value && chown -R $user $value
             fi
         fi
      done
      }
      start() {
      [ -x $nginx ] || exit 5
      [ -f $NGINX_CONF_FILE ] || exit 6
      make_dirs
      echo -n $"Starting $prog: "
      daemon $nginx -c $NGINX_CONF_FILE
      retval=$?
      echo
      [ $retval -eq 0 ] && touch $lockfile
      return $retval
      }
      stop() {
      echo -n $"Stopping $prog: "
      killproc $prog -QUIT
      retval=$?
      echo
      [ $retval -eq 0 ] && rm -f $lockfile
      return $retval
      }
      restart() {
      configtest || return $?
      stop
      sleep 1
      start
      }
      reload() {
      configtest || return $?
      echo -n $"Reloading $prog: "
      killproc $nginx -HUP
      RETVAL=$?
      echo
      }
      force_reload() {
      restart
      }
      configtest() {
      $nginx -t -c $NGINX_CONF_FILE
      }
      rh_status() {
      status $prog
      }
      rh_status_q() {
      rh_status >/dev/null 2>&1
      }
      case "$1" in
      start)
          rh_status_q && exit 0
          $1
          ;;
      stop)
          rh_status_q || exit 0
          $1
          ;;
      restart|configtest)
          $1
          ;;
      reload)
          rh_status_q || exit 7
          $1
          ;;
      force-reload)
          force_reload
          ;;
      status)
          rh_status
          ;;
      condrestart|try-restart)
          rh_status_q || exit 0
              ;;
       *)
          echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
          exit 2
      esac
       
    • 修改文件权限,并加入服务列表

      # 修改权限
      chmod 777 /etc/init.d/nginx 
      # 添加到服务列表
      chkconfig --add /etc/init.d/nginx 
    • 设置开机启动

          chkconfig nginx on
      
      

    配置文件所在地址

     

     图片上传到服务器后存储的地址

     

     

     

     

     

  • 相关阅读:
    $.ajax 中的contentType
    如何能让MAC和PC都能读写移动硬盘
    bootstrap中的明星属性
    SQL Server2012如何导出sql脚本并且还原数据库
    Http 请求头中 X-Requested-With 的含义
    jquery实现模拟select下拉框效果
    ASP.NET应用技巧:非托管COM组件的使用
    COM和.NET的互操作
    NET调用Com组件事例
    com组件
  • 原文地址:https://www.cnblogs.com/asndxj/p/11581353.html
Copyright © 2020-2023  润新知