关于CentOS7搭建FastDFS之坑

什么是FastDFS?

fastDFS 是以C语言开发的一项 《开源》 轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载),特别适合以文件为载体的在线服务,如图片网站,视频网站等!
分布式文件系统:
基于客户端/服务器的文件存储系统
对等特性允许一些系统扮演客户端和服务器的双重角色,可供多个用户访问的服务器,比如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样

FastDFS由跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)构成。

由于本人没画《流程图》所以我在 ONE 作者那里偷了张图
在这里插入图片描述
简单介绍就到这里了下面开始安装:

1. 安装CentOS服务器

1.1CentOS配置IP
安装好后注意要配置静态IP 这样不容易断连

1. 使用 ip addr 查看配置eno 文件
2. 使用 vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 编辑网卡文件

此图为 IP addr

在这里插入图片描述

bootproto=dhcp 默认是动态获取IP
onboot=yes 默认是开机关闭网卡

这里我们全部修改掉,然后加上自己的IP 和网关还有DNS ,子掩码

IPADDRO=192.168.234.xxx
NETMASK=255.255.255.0
GATEWAYO=192.168.234.x
DNS1=8.8.8.8
DNS2=114.114.114.114

然后重启网卡,但是重启前要记得先关闭NetworkManager管理套件 它会和网卡冲突
1.先执行:systemctl stop NetworkManager
2.在执行:systemctl disable NetworkManager 不让开机启动
3.最后执行: systemctl restart network

1.2 关闭防火墙

查看防火墙状态: firewall-cmd --state
关闭防火墙:systemctl stop firewalld.service
不让开机启动:systemctl disable firewalld.service 
当然:也可以开放防火墙端口 我这里默认开放80端口
开端口命令:firewall-cmd --zone=public --add-port=80/tcp --permanent

--zone #作用域
 
--add-port=80/tcp  #添加端口,格式为:端口/通讯协议
 
--permanent   #永久生效,没有此参数重启后失效

2 开始安装

首先:我们先创建一个目录 我在/usr/local/ 下创建FDS (ps:这里建议在/usr/local/ 目录下 因为听说 其他目录容易出问题,而且有个FDS的服务默认也是在/usr/local/目录下)

cd /usr/local/

mkdir FDS
我学习乐优商城 是创建的是/usr/local/leyou/

FastDFS运行需要一些依赖:
GCC用来对C语言代码进行编译运行,使用yum命令安装:

sudo yum -y install gcc
1.2.2 安装unzip工具

unzip工具可以帮我们对压缩包进行解压

sudo yum install -y unzip zip
1.2.3 安装libevent
sudo yum -y install libevent

接下来 我们将上传一些压缩文件 我一般会在服务器上安装《宝塔面板工具》
宝塔官网
这个Linux 服务面板工具挺好用的 还可以使用ssh终端 和上下传文件
当然FinalShell 工具也可以 也挺好用的

依赖压缩文件下载地址:FastDFS文件一些和Nginx的依赖文件

下载好后解压 将解压后的5个压缩文件直接上传到服务器上

1.2.5 安装libfastcommon-master

这个没有yum包,只能通过编译安装:

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

    unzip libfastcommon-master.zip
    
  • 进入解压完成的目录:

    cd libfastcommon-master
    
  • 编译并且安装:

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

到这里为止,所有依赖都已经安装完毕,接下来我们安装FastDFS:

3 安装FastDFS

这里我们也采用编译安装,步骤与刚才的编译安装方式一样:

  • 解压
 tar -zxvf FastDFS_v5.08.tar.gz
  • 进入目录

    cd FastDFS
    
  • 编译并安装

    sudo ./make.sh 
    sudo ./make.sh install
    
  • 校验安装结果

ll /etc/init.d/ | grep fdfs

在这里插入图片描述
其中:

  • fdfs_trackerd 是tracker启动脚本
  • fdfs_storaged 是storage启动脚本

我们可以在 /etc/fdfs目录,通过命令查看到以下配置文件模板:
在这里插入图片描述

  • tarcker.conf.sample 是tracker的配置文件模板
  • storage.conf.sample 是storage的配置文件模板
  • client.conf.sample 是客户端的配置文件模板
  • XXX.conf 文件是我已经安装好的 文件
1.3.2 启动tracker

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

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

  • 编辑tracker配置

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

sudo cp /etc/fdfs/tracker.conf.sample  /etc/fdfs/tracker.conf
sudo vim /etc/fdfs/tracker.conf

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

base_path=/DFS/fdfs/tracker # tracker的数据和日志存放目录
  • 关闭防火墙
sudo chkconfig iptables off
  • 创建目录

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

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

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

sudo service fdfs_trackerd start # 启动fdfs_trackerd服务,停止用stop
  • 查看tracker是否启动成功
sudo ps -ef | grep fdfs_trackerd

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

sudo chkconfig fdfs_trackerd on
1.3.3 启动storage

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

  • 编辑storage配置

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

sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf
sudo vim /etc/fdfs/storage.conf

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

base_path=/FDS/fdfs/storage # storage的数据和日志存放目录

store_path0=/FDS/fdfs/storage # storage的上传文件存放路径

tracker_server=192.168.56.XXX:22122 # tracker的地址 (ps:这里的地址需要和虚拟机的服务器地址相对应)
  • 创建目录

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

sudo mkdir -p /FDS/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 查看进程:

在这里插入图片描述

1.4 安装Nginx及FastDFS模块

先回到上级目录 注意要回到FDS目录下 能看到nginx压缩文件

 cd ..
1.4.1 FastDFS的Nginx模块
  • 解压

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

  • 配置config文件

    # 进入配置目录
    cd /usr/local/FDS/fdfs/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 /usr/local/FDS/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
    # 编辑该文件
    sudo vim /etc/fdfs/mod_fastdfs.conf
    
  • 修改一下配置


  connect_timeout=15                  		# 客户端访问文件连接超时时长(单位:秒)

  将tracker_server=tracker:22122 修改为
  tracker_server=192.168.56.XXX:22122  	# tracker服务IP和端口 (需要和tracker服务器 的配置的IP相同)

  url_have_group_name=true            		# 访问链接前缀加上组名

  store_path0=/FDS/fdfs/storage        		# 文件存储路径(可以存储多个:例如store_path1 ,store_path2 。。。)

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

    cd /usr/local/FDS/FastDFS/conf/
    cp http.conf mime.types /etc/fdfs/
    

1.4.2 安装Nginx

-安装nginx的依赖库

 sudo yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
  • ps:切换到 压缩包目录
  cd /usr/local/FDS/
 
  • 解压

    tar -zxvf nginx-1.10.0.tar.gz
    

-打开nginx目录

  cd nginx-1.10.0​
  • 配置

    sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/FDS/fastdfs-nginx-module/src
    

  • 编译安装

    sudo make && sudo make install
    

  • 配置nginx整合fastdfs-module模块

    我们需要修改nginx配置文件,在/opt/nginx/config/nginx.conf文件中:

    sudo vim  /opt/nginx/conf/nginx.conf
    

    将文件中,原来的server 80{ ...} 部分代码替换为如下代码:

        server {
            listen       80;
            server_name  image.XXX(自己的域名).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 # 启动
    nginx -s stop # 停止
    nginx -s reload # 重新加载配置
    
  • 设置nginx开机启动

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

    vim /etc/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/bin/nginx"
    prog=$(basename $nginx)
    
    NGINX_CONF_FILE="/opt/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:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
       if [ -n "$user" ]; then
          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
        fi
    }
    
    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
    

当然你也可以自己百度一些开机自动启动的脚本(例如:nginx的开机启动脚本)不过我建议你们用我的,这样比较兼容,不容易出错!
以上就是安装搭建FastDFS 的全部过程!

接下来编写测试用例


import com.github.tobato.fastdfs.domain.StorePath;
import com.github.tobato.fastdfs.domain.ThumbImageConfig;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {

    // 存储服务器客户端里带跟踪服务器 fdstDFS会先去找跟踪服务器后再找存储服务器
    @Autowired
    private FastFileStorageClient storageClient;

    @Autowired
    private ThumbImageConfig thumbImageConfig;


    @Test
    public void  testUpload() throws FileNotFoundException {
        //要上传的文件
        File file = new File("C:\\Users\\Mi\\Desktop\\2.jpg");
        /*   上传并保存图片 参数:1-上传的文件流 null
             2- 文件的大小 3-文件的后缀  4-可以不管
         */

        StorePath storePath = this.storageClient.uploadFile(new FileInputStream(file),file.length(),"jpg",null);

        //带分组的路劲
        System.out.println(storePath.getFullPath());
        //不带分组的路径
        System.out.println(storePath.getPath());

    }


    @Test
    public void  testUploadAndCreateThumb() throws FileNotFoundException {
        //要上传的文件
        File file = new File("C:\\Users\\Mi\\Desktop\\2.jpg");
        /*   上传并保存图片 参数:1-上传的文件流 null
             2- 文件的大小 3-文件的后缀  4-可以不管
         */

        StorePath storePath = this.storageClient.uploadFile(new FileInputStream(file),file.length(),"jpg",null);

        //带分组的路劲
        System.out.println(storePath.getFullPath());
        //不带分组的路径
        System.out.println(storePath.getPath());
        // 获取缩略图路径
        String path = thumbImageConfig.getThumbImagePath(storePath.getPath());
        System.out.println(path);
    }
}

以下我来说下我搭建遇到的坑、

1。nginx,tracker,storaged,等服务端口被占用
解决:重启

pkill -9 nginx
./nginx -s reload 或者 nginx
sudo /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
sudo /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

一般我建议安装好后都从新启动一下服务,以防测试代码报错

2。常见错误:

错误一: 无法获取服务端连接资源:can’t create connection to/192.168.245.122:22122
错误二: com.github.tobato.fastdfs.exception.FdfsServerException: 错误码:2,错误信息:找不到节点或文件

解决:
1.关闭防火墙 (注意:centOS6和centOS7不一样)

centOS6:
关闭防火墙: chkconfig iptables off
centOS7:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动

2.检查nginx是否连通
在虚拟机linux检查: 在浏览器输入localhost 或者 你本机IP地址
例如:192.168.53 xxx:80 查看Welcome to nginx!

3.出现上述第二个错误原因可能是:storage.conf配置文件IP地址不对

打开 > vim /etc/fdfs/storage.conf

修改的内容如下:
tracker_server=192.168.56.101:22122 # tracker服务器IP和端口

注意: 192.168.245.128: 也就是我的linux服务器的IP地址 22122 :tracker服务器默认端口号 (前面在安装的时候我已经说过了)

这里的IP一定要改成你自己Linux服务器的IP,否则可能出现错误二

4.重启tracker,storaged,和nginx.在进行测试,问题就解决啦!

希望我的错误经验能够对你有帮助! 有兴趣的朋友可以加我的免费死人交流群:947405150 一起学习交流

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 CentOS 7 上搭建 FastDFS 文件服务器的步骤如下: 1. 安装必要的依赖库: ``` yum install -y gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl openssl-devel wget ``` 2. 下载 FastDFS 源码: ``` wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz ``` 3. 解压源码并编译安装: ``` tar zxvf V6.06.tar.gz cd fastdfs-6.06/ ./make.sh ./make.sh install ``` 4. 配置 Tracker 服务器: 在 Tracker 服务器上创建一个 tracker.conf 配置文件,并添加以下内容: ``` # 配置 Tracker 服务器的 IP 和端口号 port=22122 bind_addr=192.168.0.1 # 配置存储服务器的组名和存储服务器的 IP 和端口号 group_name=group1 group_count=1 group0_ip=192.168.0.2 group0_port=23000 # 配置日志文件的路径和级别 log_level=info log_filename=/var/log/fdfs/trackerd.log ``` 5. 启动 Tracker 服务器: ``` /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart ``` 6. 配置 Storage 服务器: 在 Storage 服务器上创建一个 storage.conf 配置文件,并添加以下内容: ``` # 配置 Tracker 服务器的 IP 和端口号 tracker_server=192.168.0.1:22122 # 配置存储服务器的 IP 和端口号 port=23000 bind_addr=192.168.0.2 # 配置存储服务器的组名和容量 group_name=group1 store_path_count=1 store_path0=/data/fastdfs/storage # 配置心跳时间和同步文件的时间 heart_beat_interval=30 sync_wait_msec=600 # 配置日志文件的路径和级别 log_level=info log_filename=/var/log/fdfs/storaged.log ``` 7. 启动 Storage 服务器: ``` /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart ``` 8. 测试上传和下载文件: 在客户端机器上安装 FastDFS 客户端工具: ``` yum install -y libfastcommon wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz tar zxvf V6.06.tar.gz cd fastdfs-6.06/ ./make.sh ./make.sh install ``` 上传文件: ``` /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /path/to/local/file ``` 下载文件: ``` /usr/bin/fdfs_download_file /etc/fdfs/client.conf group1 M00/00/00/xxx /path/to/local/file ``` 以上就是在 CentOS 7 上搭建 FastDFS 文件服务器的步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

废弃的root

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值