美文网首页
FastDFS分布式文件系统

FastDFS分布式文件系统

作者: 任总 | 来源:发表于2018-11-18 23:16 被阅读97次

    一、FastDFS存储

    • FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

    • FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务


      FastDFS结构

    1、Tracker:调度器

    • 负责维持集群的信息,例如各group及其内部的storage node,这些信息也是storage node报告所生成;每个storage node会周期性向tracker发心跳信息;

    2、storage server存储服务

    以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余;


    访问流程

    3、文件访问操作

    upload上传、download下载、append追加、delete删除;

    4、存储文件名格式

    group/M00/00/00/FILE_ID
    组/索引名/一级目录/二级目录/文件id

    二、FastDFS存储过程

    1、上传文件Upload File

    (1)、由client发起上传连接请求;
    (2)、由tracker查找可用的storage server;
    (3)、找到可用的storage server后,将其(ip:port)返回给client;
    (4)、上传文件(文件的属性信息和文件内容);
    (5)、生成文件的fid,将client提交的内容写入选定位置;
    (6)、返回fid;
    (7)、同步 存储文件信息至同组中的其它节点;

    2、tracker如何挑选组:

    (1)、rr轮询
    (2)、指定组
    (3)、基于可用空间进行均衡,可用空间大者胜出;

    3、如何在组中挑选storage server:

    (1)、rr轮询;
    (2)、以ip为次序,找第一个;
    (3)、以优先级为序,找第一个;

    4、如何选择磁盘(存储路径):

    (1)、rr轮询;
    (2)、剩余可用空间大者优先;

    5、生成FID文件地址:

    由源头storage server ip、创建时的时间戳、大小、文件的校验码和一个随机数进行hash计算后生成;最后基于base64进行文本编码,转换为可打印字符;

    6、文件同步:

    • 每个storage server在文件存储完成后,会将其信息存于binlog, binlog不包含数据,仅包含文件名等元数据信息;binlog可用于同步;

    7、下载文件Download File:

    • 客户端上传文件完成后,会收到storage server返回的FID,而后再次用到时,client会可根据此文件发出请求;

    (1)、client向tracker发请求;
    (2)、tracker根据文件名定位到group,并返回此group内的某一个storage server的信息(ip:port)给client;
    (3)、client向得到的ip:port发请求;
    (4)、storage server查找文件,并返回其内容给client;

    三、FastDFS分布式文件系统安装使用

    克隆方式复制地址
    实验环境
    [root@node-60 ~]# yum install git  epel-release -y
    [root@node-60 ~]# yum groupinstall "Development Tools" "Server Platform Development" -y
    
    #克隆方式下载源码
    [root@node-60 ~]# git clone https://github.com/happyfish100/libfastcommon.git
    
    [root@node-60 ~]# git clone https://github.com/happyfish100/fastdfs.git
    
    #查看版本
    [root@node-60 ~]# less libfastcommon/libfastcommon.spec | grep Version:
    Version: 1.0.40
    
    #修改目录为对应版本
    [root@node-60 ~]# mv libfastcommon libfastcommon-1.0.40
    
    #压缩
    [root@node-60 ~]# tar zcf libfastcommon-1.0.40.tar.gz libfastcommon-1.0.40/*
    
    #创建制作rpm包的目录
    [root@node-60 ~]# mkdir -pv /root/rpmbuild/{SOURCES,SPECS}
    mkdir: created directory ‘/root/rpmbuild’
    mkdir: created directory ‘/root/rpmbuild/SOURCES’
    mkdir: created directory ‘/root/rpmbuild/SPECS’
    
    #把压缩包放到目录下
    [root@node-60 ~]# mv libfastcommon-1.0.40.tar.gz rpmbuild/SOURCES/
    [root@node-60 ~]# cp libfastcommon-1.0.40/libfastcommon.spec rpmbuild/SPECS/
    [root@node-60 ~]# cd rpmbuild/SPECS/
    
    #生成rpm包
    [root@node-60 SPECS]# rpmbuild -bb libfastcommon.spec 
    [root@node-60 ~]# ls /root/rpmbuild/RPMS/x86_64/
    libfastcommon-1.0.40-1.el7.centos.x86_64.rpm
    libfastcommon-debuginfo-1.0.40-1.el7.centos.x86_64.rpm
    libfastcommon-devel-1.0.40-1.el7.centos.x86_64.rpm
    
    #首先安装生成的依赖库rpm
    [root@node-60 ~]# yum install rpmbuild/RPMS/x86_64/libfastcommon-1.0.40-1.el7.centos.x86_64.rpm -y
    [root@node-60 ~]# yum install rpmbuild/RPMS/x86_64/libfastcommon-devel-1.0.40-1.el7.centos.x86_64.rpm -y
    
    
    #制作fastdfs的rpm包
    #查询版本
    [root@node-60 ~]# less fastdfs/fastdfs.spec | grep FDFSVersion
    %define FDFSVersion 5.0.12
    
    #修改目录为对应版本
    [root@node-60 ~]# mv fastdfs fastdfs-5.0.12
    
    #压缩
    [root@node-60 ~]# tar zcf fastdfs-5.0.12.tar.gz fastdfs-5.0.12/*
    
    #拷贝到制作目录下
    [root@node-60 ~]# mv fastdfs-5.0.12.tar.gz rpmbuild/SOURCES/
    [root@node-60 ~]# cp fastdfs-5.0.12/fastdfs.spec rpmbuild/SPECS/
    [root@node-60 ~]# cd rpmbuild/SPECS/
    
    #制作rpm
    [root@node-60 SPECS]# rpmbuild -bb fastdfs.spec
    [root@node-60 ~]# ls /root/rpmbuild/RPMS/x86_64/
    fastdfs-5.0.12-1.el7.centos.x86_64.rpm
    fastdfs-debuginfo-5.0.12-1.el7.centos.x86_64.rpm
    fastdfs-server-5.0.12-1.el7.centos.x86_64.rpm
    fastdfs-tool-5.0.12-1.el7.centos.x86_64.rpm
    libfastcommon-1.0.40-1.el7.centos.x86_64.rpm
    libfastcommon-debuginfo-1.0.40-1.el7.centos.x86_64.rpm
    libfastcommon-devel-1.0.40-1.el7.centos.x86_64.rpm
    libfdfsclient-5.0.12-1.el7.centos.x86_64.rpm
    libfdfsclient-devel-5.0.12-1.el7.centos.x86_64.rpm
    
    #删除暂时不用的debuginfo
    [root@node-60 ~]# cd rpmbuild/RPMS/x86_64/
    [root@node-60 x86_64]# rm -f *debuginfo*
    
    #将rpm拷贝到其他节点
    [root@node-60 ~]# for i in 61 62 63; do scp -r rpmbuild/RPMS/x86_64/ 192.168.1.${i}:/root/fastdfs; done
    
    #安装所有rpm包
    [root@node-60 ~]# yum install rpmbuild/RPMS/x86_64/*.rpm -y
    
    #配置tacker
    [root@node-60 ]# cp -r /root/fastdfs-5.0.12/conf/*  /etc/fdfs/
    [root@node-60 ]# vim /etc/fdfs/tracker.conf
    base_path=/data/fastdfs #此目录需创建
    store_lookup=2  #存储模式,0为轮询,1为指定组,2为最大磁盘空间(默认)
    store_group=group2  #指定存储组,当store_lookup模式为1时候,此选项有效
    store_server=0  #使用存储组有效时,0为轮询,1为ip地址最小的,2权重最大的
    store_path=0 #使用存储组有效时,磁盘选项,0为轮询,1使用空间最大的
    download_server=0 #下载设置,0为轮询,1下载使用上传同一节点
    reserved_storage_space = 10% #预留存储空间
    log_level=info #日志记录等级
    run_by_group=  #运行组
    run_by_user=   #运行用户,建议使用普通用户
    allow_hosts=*  #访问控制那些主机可以访问
    http.server_port=80
    
    #启动tacker
    [root@node-60 fdfs]# mkdir -pv mkdir -pv /data/{storage,fastdfs} #创建基础目录和存储
    [root@node-60 fdfs]# service fdfs_trackerd restart
    Restarting fdfs_trackerd (via systemctl):                  [  OK  ]
    [root@node-60 fdfs]# ss -tnl
    LISTEN     0      128                                                                                  *:22122                                                                                            *:*
    
    #配置storage
    group_name=group1 #分配组
    base_path=/data/fastdfs #基础路径
    store_path0=/data/storage  #第一存储路径,相当于mogilefs的Dev1设备,存储路径必须从0开始计数,其他路径例如store_path1、store_path2
    store_path_count=1 #可用路径
    subdir_count_per_path=256  #每个目录下有256个子目录
    tracker_server=192.168.1.60:22122  #tracker的ip地址
    
    #启动storage
    [root@node-60 fdfs]# service fdfs_storaged start
    [root@node-60 fdfs]# ss -tnl
    State      Recv-Q Send-Q                                                                   Local Address:Port                                                                                  Peer Address:Port              
    LISTEN     0      128                                                                                  *:22                                                                                               *:*                  
    LISTEN     0      128                                                                                  *:23000                                                                                            *:*                  
    LISTEN     0      100                                                                          127.0.0.1:25                                                                                               *:*                  
    LISTEN     0      128                                                                                  *:22122                                                                                            *:*   
    节点2、3、4配置
    
    #拷贝配置文件到存储节点
    [root@node-60 fdfs]# scp http.conf anti-steal.jpg  storage.conf mime.types 192.168.1.61:/etc/fdfs/
    [root@node-60 fdfs]# scp http.conf anti-steal.jpg  storage.conf mime.types 192.168.1.62:/etc/fdfs/
    [root@node-60 fdfs]# scp http.conf anti-steal.jpg  storage.conf mime.types 192.168.1.63:/etc/fdfs/
    
    #clinet客户端配置
    [root@node-60 ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
           
    [root@node-60 ~]# vim /etc/fdfs/client.conf
    base_path=/data/fastdfs  #指定基础目录
    tracker_server=192.168.1.60:22122 #指定tracker的ip地址
    
    #客户端工具
    fdfs_appender_test    fdfs_download_file    fdfs_test1
    fdfs_appender_test1   fdfs_file_info#文件信息        fdfs_trackerd
    fdfs_append_file      fdfs_monitor          fdfs_upload_appender #上传追加文件
    fdfs_crc32            fdfs_storaged         fdfs_upload_file #上传文件
    fdfs_delete_file  #删除文件     fdfs_test
    
    #上传文件测试
    [root@node-60 ~]# fdfs_upload_file /etc/fdfs/client.conf /usr/share/wallpapers/backgrounds/day.jpg
    group2/M00/00/00/wKgBPlvu4YqAXmBoAA6q2xIny8Y338.jpg #文件储存位置
    
    #查询储存文件信息
    [root@node-60 ~]# fdfs_file_info /etc/fdfs/client.conf group2/M00/00/00/wKgBPlvu4YqAXmBoAA6q2xIny8Y338.jpg
    source storage id: 0
    source ip address: 192.168.1.62
    file create timestamp: 2018-11-16 23:26:02
    file size: 961243
    file crc32: 304597958 (0x1227CBC6)
    
    #查询节点3和节点4,镜像组同步情况
    [root@node-62 ~]# ls /data/storage/data/00/00
    wKgBPlvu4YqAXmBoAA6q2xIny8Y338.jpg
    [root@node-63~]# ls /data/storage/data/00/00
    wKgBPlvu4YqAXmBoAA6q2xIny8Y338.jpg
    
    #安装nginx反向代理
    #安装依赖包
    yum -y install openssl openssl-devel pcre-devel
    #下载nginx
    [root@node-60 ~]#  useradd -r nginx
    [root@node-60 ~]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
    #下载nginx第三方模块
    [root@node-60 ~]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
    
    #编译安装nginx
    [root@node-60 nginx-1.6.3]#  ./configure \
    > --prefix=/usr \
    > --sbin-path=/usr/sbin/nginx \
    > --conf-path=/etc/nginx/nginx.conf \
    > --error-log-path=/var/log/nginx/error.log \
    > --http-log-path=/var/log/nginx/access.log \
    > --pid-path=/var/run/nginx/nginx.pid  \
    > --lock-path=/var/lock/nginx.lock \
    > --user=nginx \
    > --group=nginx \
    > --with-http_ssl_module \
    > --with-http_flv_module \
    > --with-http_stub_status_module \
    > --with-http_gzip_static_module \
    > --http-client-body-temp-path=/var/tmp/nginx/client/ \
    > --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
    > --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
    > --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
    > --http-scgi-temp-path=/var/tmp/nginx/scgi \
    > --with-pcre \
    > --with-debug \
    > --add-module=../fastdfs-nginx-module/src
    [root@node-60 nginx-1.6.3]# make&&make install
    #编辑nginx启动脚本
    [root@node-60 ~]# vim /etc/rc.d/init.d/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/sbin/nginx"
    prog=$(basename $nginx)
    
    NGINX_CONF_FILE="/etc/nginx/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' -`
    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
    [root@node-60 ~]# chmod +x /etc/rc.d/init.d/nginx 
    [root@node-60 ~]# mkdir -pv /var/tmp/nginx/clinent/
    [root@node-60 ~]# touch /data/fastdfs/logs/mod_fastdfs.log
    [root@node-60 ~]# chown -R nginx.nginx /data/fastdfs/logs/mod_fastdfs.log 
    
    #拷贝配置文件到etc目录
    [root@node-60 ~]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
    #编辑配置文件
    [root@node-60 ~]# vim /etc/fdfs/mod_fastdfs.conf 
    base_path=/data/fastdfs
    tracker_server=192.168.1.60:22122
    storage_server_port=23000
    group_name=group1
    store_path_count=1
    store_path0=/data/storage
    log_filename=/data/fastdfs/logs/mod_fastdfs.log
    #编辑nginx配置文件
    [root@node-60 ~]# vim /etc/nginx/nginx.conf
    .............
      server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
             location /M00 {
                  alias /data/fastdfs/data;
                  ngx_fastdfs_module;
            }
    
    #启动 nginx
    [root@node-60 ~]# service nginx start
    
    

    其他节点2、3、4分别安装

    #同步时间
    #安装epel源
    [root@node-61 ~]# yum install epel-release -y
    
    #安装fastdfs的rpm包
    [root@node-61 ~]# yum install fastdfs/*.rpm -y
    
    #创建基础目录和存储
    [root@node-61 ~]# mkdir -pv mkdir -pv /data/{storage,fastdfs}
    mkdir: created directory ‘mkdir’
    mkdir: created directory ‘/data’
    mkdir: created directory ‘/data/storage’
    mkdir: created directory ‘/data/fastdfs’
    
    #查询节点1拷贝的配置文件,确认启动storaged服务
    [root@node-61 fdfs]# service fdfs_storaged start
    
    #安装nginx反向代理
    #安装依赖包
    yum -y install openssl openssl-devel pcre-devel
    #下载nginx
    [root@node-61 ~]#  useradd -r nginx
    [root@node-61 ~]# wget http://nginx.org/download/nginx-1.6.3.tar.gz
    #下载nginx第三方模块
    [root@node-61 ~]# git clone https://github.com/happyfish100/fastdfs-nginx-module.git
    
    #编译安装nginx
    [root@node-61 nginx-1.6.3]#  ./configure \
    > --prefix=/usr \
    > --sbin-path=/usr/sbin/nginx \
    > --conf-path=/etc/nginx/nginx.conf \
    > --error-log-path=/var/log/nginx/error.log \
    > --http-log-path=/var/log/nginx/access.log \
    > --pid-path=/var/run/nginx/nginx.pid  \
    > --lock-path=/var/lock/nginx.lock \
    > --user=nginx \
    > --group=nginx \
    > --with-http_ssl_module \
    > --with-http_flv_module \
    > --with-http_stub_status_module \
    > --with-http_gzip_static_module \
    > --http-client-body-temp-path=/var/tmp/nginx/client/ \
    > --http-proxy-temp-path=/var/tmp/nginx/proxy/ \
    > --http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
    > --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
    > --http-scgi-temp-path=/var/tmp/nginx/scgi \
    > --with-pcre \
    > --with-debug \
    > --add-module=../fastdfs-nginx-module/src
    [root@node-61 nginx-1.6.3]# make&&make install
    #编辑nginx启动脚本
    [root@node-61 ~]# vim /etc/rc.d/init.d/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/sbin/nginx"
    prog=$(basename $nginx)
    
    NGINX_CONF_FILE="/etc/nginx/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' -`
    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
    [root@node-61 ~]# chmod +x /etc/rc.d/init.d/nginx 
    [root@node-61 ~]# mkdir -pv /var/tmp/nginx/clinent/
    [root@node-61 ~]# touch /data/fastdfs/logs/mod_fastdfs.log
    [root@node-61 ~]# chown -R nginx.nginx /data/fastdfs/logs/mod_fastdfs.log 
    
    #拷贝配置文件到etc目录
    [root@node-61 ~]# cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
    #编辑配置文件
    [root@node-61 ~]# vim /etc/fdfs/mod_fastdfs.conf 
    base_path=/data/fastdfs
    tracker_server=192.168.1.60:22122
    storage_server_port=23000
    group_name=group1
    store_path_count=1
    store_path0=/data/storage
    log_filename=/data/fastdfs/logs/mod_fastdfs.log
    #编辑nginx配置文件
    [root@node-61 ~]# vim /etc/nginx/nginx.conf
    .............
      server {
            listen       80;
            server_name  localhost;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
             location /M00 {
                  alias /data/fastdfs/data;
                  ngx_fastdfs_module;
            }
    
    #启动 nginx
    [root@node-61 ~]# service nginx start
    

    其中的节点3和节点4编辑为第二组

    [root@node-62 ~]# vim /etc/fdfs/storage.conf
    group_name=group2
    #查询节点1拷贝的配置文件,确认启动storaged服务
    [root@node-62 fdfs]# service fdfs_storaged start
    
    [root@node-63 ~]# vim /etc/fdfs/storage.conf
    group_name=group2
    #查询节点1拷贝的配置文件,确认启动storaged服务
    [root@node-63 fdfs]# service fdfs_storaged start
    

    四、编译报错和解决

    1、rpm编译报错1

    RPM build errors:
        Symlink points to BuildRoot: /usr/lib/libfastcommon.so -> /root/rpmbuild/BUILDROOT/libfastcommon-1.0.40-1.el7.centos.x86_64/usr/lib64/libfastcommon.so
    [root@node-60 ~]# ln -sf /usr/lib/libfastcommon.so /root/rpmbuild/BUILDROOT/libfastcommon-1.0.40-1.el7.centos.x86_64/usr/lib64/libfastcommon.so
    
    原因:spec文件使用绝对路径,修改软链接使用%{buildroot}相对路径。
    #解决:在.spec中的%install构建部分添加:
    ln -sf '目标文件' %{buildroot}/'软连接文件'
    这个‘软连接’通常出现在%files部分中引用
    
    #修改.spec
    [root@node-60]# vim rpmbuild/SPECS/libfastcommon.spec 
    
    %install
    rm -rf %{buildroot}
    DESTDIR=$RPM_BUILD_ROOT ./make.sh install
    ln -sf usr/lib64/libfastcommon.so* %{buildroot}/usr/lib/libfastcommon.so*  #添加软连接
    
    添加语句

    2、rpm编译报错2

    RPM build errors:
        Installed (but unpackaged) file(s) found:
       /etc/fdfs/http.conf.sample
       /etc/fdfs/mime.types.sample
    
    原因:spec文件中,“%files”部分中未指定将要安装的文件列表。
    #解决:
    编译过程中删除这些文件
    
    #修改
    [root@node-60]# vim rpmbuild/SPECS/fastdfs.spec
    %clean
    rm -rf %{buildroot}  #把这里的#号删除,启用此语句
    
    取消此处注释

    参考文献:https://stackoverflow.com/questions/29224772/symlinks-are-not-included-in-buildroot-when-using-rpmbuild
    https://gitee.com/jinmuming/spring-boot-fastdfs

    相关文章

      网友评论

          本文标题:FastDFS分布式文件系统

          本文链接:https://www.haomeiwen.com/subject/nxygxqtx.html