目录

​ 一、FastDFS简介

​ 二、FastDFS单服务器搭建

​ 三、FastDFS扩容,多服务器

​ 四、利用java上传文件


一、FastDFS简介

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

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

FastDFS架构图:
在这里插入图片描述

​ FastDFS主要分为Tracker(追踪器)和Storage(存储器)。Tracker主要作用是负载均衡,Storage就是用来存储文件。当用户上传文件时先发送请求到追踪器(Tracker)。追踪器接收到请求后查询下各个存储器节点的状态,将较空闲的存储器节点的地址返回给用户,然后用户拿到这个地址后就将文件上传到该存储节点。下载的时候用户请下载地址发送到追踪器,追踪器根据地址找到存放该文件的存储节点,将节点返回给客户端,客户端再跟该节点交互完成下载。


二、FastDFS文件存储系统搭建

虚拟机1的ip:192.168.152.137,用来当作追踪器和存储节点组1。

虚拟机2的ip:192.168.152.140,用来做存储节点组2。

ip作用
192.168.152.137:22122追踪器(Tracker)
192.168.152.137:23000储存器(Storage)group1
192.168.152.140:23000储存器(Storage)group2
一、先将安装包上传到linux 的/usr/local/software/目录下 ,目录可自定义。安装包下载链接:https://pan.baidu.com/s/1Wa_Ywp-Sciwz06PG2wsBvA 提取码:qfnp

在这里插入图片描述

二、安装fastdfs之前先配置所需的环境。
1.安装c环境
yum -y install gcc-c++
2.安装依赖库
yum -y install libevent
3.安装PCRE
yum -y install pcre pcre-devel
4.安装zlib
yum -y install zlib zlib-devel
5.安装openssl
yum -y install  openssl openssl-devel
6.配置fastdfs的前置环境
  • 解压libfastcommonV1.0.7.tar.gz并安装

    cd /usr/local/software/
    
    tar -zvxf libfastcommonV1.0.7.tar.gz 
    
    cd libfastcommon-1.0.7/
    # 编译
    ./make.sh
    # 安装
    ./make.sh install
    
三、安装FastDFS及配置
安装fastdfs
cd /usr/local/software/

tar -zvxf FastDFS_v5.0.5.tar.gz
# 进到解压后的FastDFS文件夹
cd FastDFS
# 编译
./make.sh
# 安装
./make.sh install
# 安装后会在/etc/下生成一个fdfs文件夹。将FastDFS/conf/文件夹下的所有配置文件复制到/etc/fdfs/文件夹下。
 cp /usr/local/software/FastDFS/conf/* /etc/fdfs/
配置追踪器(Tracker)
  • 修改/etc/fdfs/tracker.conf

    vim /etc/fdfs/tracker.conf
    

    修改base_base的路径,将路径改为/usr/local/software/FastDFS/tracker。用来存放追踪器运行的日志信息。可自定义路径。

    在这里插入图片描述

  • 启动Tracker

    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
    

    查看进程,如下图所示则启动成功。

    在这里插入图片描述

配置存储器(Storage)
  • 修改存储器的配置文件/etc/fdfs/storage.conf

    vim /etc/fdfs/storage.conf
    

    修改以下几个地方:

    1. group_name=group1:当前的服务器为组1
    2. base_path:存储器日志信息存放路径
    3. store_path_count:存储器的数量
    4. store_path0:第一个存储器存放文件的路径。如果有多个修改下store_path_count的数量,并一次增加store_path1、store_path2…
    5. tracker_server:追踪器的地址,多个追踪器就添加多个tracker_server。

    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 启动storage服务。

    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
    

    查看进程是否启动,要先启动tracker。

    在这里插入图片描述

配置客户端
  • vim /etc/fdfs/client.conf

  • 修改base_path和tracker_server

在这里插入图片描述

测试文件上传
  • 放一张图片到/home/下。用命令测试上传。

    /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.png
    

    查看结果,可以看到返回的文件路径即上传成功。存放的路径在/usr/local/software/FastDFS/storage/data/下。

在这里插入图片描述

在这里插入图片描述

四、安装nginx

fastdfs不提供web服务,要访问上传的图片要通过nginx代理才能获取图片。

  • 安装nginx插件

    cd /usr/local/software/
    tar -zvxf fastdfs-nginx-module_v1.16.tar.gz 
    cd fastdfs-nginx-module/src/
    # 修改config文件,在vim串口通过执行:0,$s/\/local//g命令将local全换为空。
    
    

    在这里插入图片描述

    将cp mod_fastdfs.conf 拷贝到/etc/fdfs/

    cp mod_fastdfs.conf /etc/fdfs/
    # 修改配置文件
    vim /etc/fdfs/mod_fastdfs.conf
    

    修改tracker_server为追踪器的地址。

    将url_hava_group_name改为true。

    修改store_path0为存储器的路径

在这里插入图片描述

  • 安装nginx

    cd /usr/local/software
    tar -zxf nginx-1.8.1.tar.gz
    cd nginx-1.8.1
    ./configure --add-module=/usr/local/software/fastdfs-nginx-module/src/
    make
    make install
    # nginx安装后的目录地址/usr/local/nginx/
    

    修改nginx的配置文件开启代理。

    vim /usr/local/nginx/conf/nginx.conf
    
    # 修改location
    location /group1/M00/ {
        ngx_fastdfs_module;
    }
    
    

    在这里插入图片描述

    启动nginx

    /usr/local/nginx/sbin/nginx
    # 查看进程  要有work进程才算成功
    ps _ aux | grep nginx
    

    在这里插入图片描述

开放端口

​ 开放80端口用于nginx代理,22122端口为追踪器的访问端口,23000为存储器的端口。

centos6开放端口方式:

vim /etc/sysconfig/iptables
# 添加以下内容
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

# 保存后重启网络
service iptables restart
# 查看端口状态
netstat -ntlp

centos7开放端口方式

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=22122/tcp --permanent
firewall-cmd --zone=public --add-port=23000/tcp --permanent

# 重启防火墙
firewall-cmd --reload
# 查看端口状态
firewall-cmd --zone=public --query-port=80/tcp
测试

再上传一次图片获取地址

 /usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/test.png

将获取到的地址用浏览器打开。

在这里插入图片描述

测试成功。

现在图片服务器就搭建好了,不过现在只有一台服务器一个组一个storage。接下来就开始扩容。通过新增一台服务器新增组的方式扩容。


三、新增group扩容

​ 新增一台服务器,搭建fdstdfs步骤与第一台一样,只是配置文件稍有修改。因为使用同一个追踪器,所以第二台服务器就不需要开启tracker,直接将ip指向tracker所在的ip即可。

​ 首先跟第一台安装的方式一样,先配置依赖环境。接着可以跳过tracker的安装,直接使用第一台的tracker即可。然后storage的配置文件跟前面一样,需要修改的是group_name,改成group2。然后tracker_server的ip填第一个tracker地址即可,即192.168.152.137:22122。

在这里插入图片描述

在这里插入图片描述

接着直接启动storage不需要再启动tracker,当然你第一台的服务器tracker还是要开启的。

# 启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf

​ 接着就可以跳过安装客户端那一段,只是测试用的。直接到nginx这一步,安装过程一样,mod_fastdfs.conf 的配置要变化以下。tracker_server还是填原来的tracker地址,group_name同样的改为group2其他的和原来的配置一样。

在这里插入图片描述

在这里插入图片描述

接下来nginx的安装步骤一模一样。只需要将配置文件的group1改为group2即可。然后启动nginx。

在这里插入图片描述


​ 接下来回到第一台服务器。修改第一台服务器的tracker.conf文件。将store_lookup改为0,表示轮询上传。方便后面的测试。同时将use_storage_id改为true

在这里插入图片描述

在这里插入图片描述

接着修改storage_ids.conf 文件。

 vim /etc/fdfs/storage_ids.conf 

将group1和group2的ip配进来。

在这里插入图片描述

然后接着修改/storage.conf

vim /etc/fdfs/storage.conf

将use_storage_id 改为true。将group_count改为2,表示有两个组。然后将两个组的信息写上。

在这里插入图片描述

在这里插入图片描述

最后修改ngxin的配置文件,新增一个group2监听。或者直接将原来的改为group([0-9])表是匹配group0到group9。

vim /usr/local/nginx/nginx.conf

在这里插入图片描述

到此配置就全部配好了,然后将第一台服务器的tracker、storage、nginx全部关闭并重新开启。先开tracker再开storage最后开nginx。

重启后打开监控看一下就可以看到当前有两组存储器。

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

在这里插入图片描述

在这里插入图片描述

然后再进行多次的上传测试,可以发现将文件上传到不同组的服务器了。

在这里插入图片描述

在这里插入图片描述


四、通过java代码上传
  • 导入fastdfs的jar包

    maven坐标

    <dependency>
         <groupId>net.oschina.zcx7878</groupId>
         <artifactId>fastdfs-client-java</artifactId>
         <version>1.27.0.0</version>
    </dependency>
    
  • 创建配置文件fdfs_client.conf

    connect_timeout = 2
    network_timeout = 30
    charset = UTF-8
    http.tracker_http_port = 8080
    http.anti_steal_token = no
    http.secret_key = FastDFS1234567890
    
    # 追踪器地址
    tracker_server = 192.168.152.137:22122
    
    
  • 编码

        @Test
        public void upload() throws Exception {
            //配置文件的路径
            String confPath = this.getClass().getClassLoader().getResource("fdfs_client.conf").getPath();
    
            StorageServer storageServer= null;
            //初始化客户端
            ClientGlobal.init(confPath);
    
            TrackerClient trackerClient = new TrackerClient();
            //获取与追踪器的连接
            TrackerServer trackerServer = trackerClient.getConnection();
    
            //获取客户端对象
            StorageClient client =new StorageClient(trackerServer, storageServer);
    
            //要上传的文件路径
            String filePath=this.getClass().getClassLoader().getResource("aaa.txt").getPath();
    
            //开始上传
            String[] result = client.upload_file(filePath, "txt", null);
    
            System.out.println("上传后的路径为:"+result[0]+result[1]);
    
        }
    
    
  • 结果

    上传后的路径为:group1M00/00/00/wKiYiVv5FluAHmpwAAAALsoeKsg378.txt
    
    Process finished with exit code 0
    
    

    如果要访问需要再返回的文件路径前加上tracker的ip地址。

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐