FastDFS的安装以及与nginx整合

1 FastDFS 安装

所用文件下载 提取码:v9w5

1.1 安装虚拟机

安装 CentOS7 虚拟机。

1.2 FastDFS–tracker 安装

分别在 192.168.101.3 和 192.168.101.4 上安装 tracker。
注:初次安装可只安装一台 tracker即192.168.101.3, 快速体验。

1.2.1 下载

tracker 和 storage 使 用 相 同 的 安 装 包 ,下载地址
本教程使用: FastDFS_v5.05.tar.gz

1.2.2 FastDFS 安装环境

FastDFS 是 C 语言开发,建议在 linux 上运行,本教程使用 Centos7 作为安
装环境。
安装 FastDFS 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果
没有 gcc 环境,需要安装 gcc:yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake

1.2.3 安装 libevent

FastDFS 依赖 libevent 库,需要安装:

yum -y install libevent

1.2.4 安装 libfastcommon

libfastcommon 是 FastDFS 官方提供的, libfastcommon 包含了 FastDFS 运行所需要的一些基础库。将 libfastcommonV1.0.7.tar.gz 拷贝至/usr/local/下

cd /usr/local
tar -zxvf libfastcommonV1.0.7.tar.gz
cd libfastcommon-1.0.7
./make.sh
./make.sh install

注意: libfastcommon 安装好后会自动将库文件拷贝至/usr/lib64 下, 由于 FastDFS 程序引用 usr/lib 目录所以需要将/usr/lib64 下的库文件(如下所示)拷贝至/usr/lib 下。
在这里插入图片描述

cp /usr/lib64/libfastcommon.so /usr/lib

1.2.5 tracker 编译安装

将 FastDFS_v5.05.tar.gz 拷贝至/usr/local/下

tar -zxvf FastDFS_v5.05.tar.gz
cd FastDFS
./make.sh 编译
./make.sh install 安装

安装成功将安装目录下的 conf 下的文件拷贝到/etc/fdfs/下。

cp -r /usr/local/FastDFS/conf/. /etc/fdfs

1.2.6 配置

安装成功后进入/etc/fdfs 目录:
拷贝一份新的 tracker 配置文件:

cp tracker.conf.sample tracker.conf

修改 tracker.conf

vi tracker.conf

base_path=/home/yuqing/FastDFS 改为:base_path=/home/FastDFS
配置 http 端口:http.server_port=80
配置完后要手动创建目录/home/FastDFS,否则启动时会报错

1.2.7 启动

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

1.3 FastDFS–storage 安装

分别在 192.168.101.5、 192.168.101.6、 192.168.101.7、 192.168.101.8 上安装 storage。
注:初次安装可只安装一台 storage即192.168.101.5,快速体验。

1.3.1 安装 libevent

同 tracker 安装,克隆虚拟机可直接跳过

1.3.2 安装 libfastcommon

同 tracker 安装,克隆虚拟机可直接跳过

1.3.3 storage 编译安装

同 tracker 编译安装,克隆虚拟机可直接跳过

1.3.4 配置

安装成功后进入/etc/fdfs 目录:
拷贝一份新的 storage 配置文件:

cp storage.conf.sample storage.conf

修改 storage.conf

vi storage.conf	

group_name=group1
base_path=/home/yuqing/FastDFS 改为: base_path=/home/fastdfs
store_path0=/home/yuqing/FastDFS 改为: store_path0=/home/fastdfs/fdfs_storage

#如果有多个挂载磁盘则定义多个 store_path,如下
#store_path1=…
#store_path2=…
tracker_server=192.168.101.3:22122 #配置 tracker 服务器:IP
#如果有多个则配置多个 tracker
tracker_server=192.168.101.4:22122
#配置 http 端口
http.server_port=80

配置完后依然手动创建上面的目录 /home/fastdfs 和 /home/fastdfs/fdfs_storage

1.3.5 启动

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

1.4 上传图片测试

1.4.1 通过 fdfs_test 程序

测试前可以直接将防火墙关闭
关闭防火墙:systemctl stop firewalld.service 禁止防火墙开机自启:systemctl disable firewalld.service

FastDFS 安装成功可通过/usr/bin/fdfs_test 程序来测试上传、下载等操作。
修改/etc/fdfs/client.conf
tracker_server 根据自己部署虚拟机的情况配置 。
base_path=/home/fastdfs
tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122
使用格式:

/usr/bin/fdfs_test 客户端配置文件地址 upload 上传文件

比如将/home 下的图片上传到 FastDFS 中:

/usr/bin/fdfs_test /etc/fdfs/client.conf upload /home/gfd.jpg

打印如下日志:
在这里插入图片描述
其中最后一行的example file url就是文件的下载路径,但由于现在还没有和 nginx 整合无法使用 http 下载。

1.5 FastDFS 和 nginx 整合

1.5.1 nginx 代理

单独安装 nginx 代理服务,它的作用是代理访问 storage 上的文件,实现负载均衡。nginx 的安装细节参考 nginx 文档,这里使用单机 nginx,也可以使用两台 nginx 组成高可用或者采用 lvs+nginx 访问 Storage 上的 nginx。

1.5.2 在 Storage 上安装 nginx

在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文
件。使用 nginx 的模块 FastDFS-nginx-module 的作用是通过 http 方式访问 storage 中的文件,当 storage 本机没有要找的文件时向源 storage 主机代理请求文件。

1.5.2.1 FastDFS-nginx-module

将 FastDFS-nginx-module_v1.16.tar.gz 传 至 fastDFS 的 storage 服 务 器 的
/usr/local/下,执行如下命令:

cd /usr/local
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/src

修改 config 文件将/usr/local/路径改为/usr/
在这里插入图片描述
将 FastDFS-nginx-module/src 下的 mod_FastDFS.conf 拷贝至/etc/fdfs/下

cp mod_fastdfs.conf /etc/fdfs/

并修改 mod_fastdfs.conf 的内容:

vi /etc/fdfs/mod_fastdfs.conf

base_path=/home/fastdfs
tracker_server=192.168.101.3:22122
tracker_server=192.168.101.4:22122
url_have_group_name=true #url 中包含 group 名称
store_path0=/home/fastdfs/fdfs_storage #指定文件存储路径
#如果有多个

将 libfdfsclient.so 拷贝至/usr/lib 下
cp /usr/lib64/libfdfsclient.so /usr/lib/
创建 nginx/client 目录

mkdir -p /var/temp/nginx/client

1.5.2.2 nginx 安装

将 nginx-1.15.6.tar.gz 拷贝到/usr/local 下
解压 nginx-1.15.6.tar.gz:tar -zxvf nginx-1.15.6.tar.gz
安装必备库

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

进入 nginx-1.15.6目录,执行如下配置命令:
其中第二行表示本人要安装的位置
最后一行表示添加 FastDFS-nginx-module 模块

./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 \
--add-module=/usr/local/fastdfs-nginx-module/src

创建临时目录

mkdir /var/temp/nginx -p

安装

make && make install

查看已经安装的模块

/usr/local/nginx/sbin/nginx -V

在这里插入图片描述

1.5.2.3 修改nginx 配置文件并启动

server {
	listen 80;
	server_name 192.168.101.5;
	location /group1/M00/{
		root /home/fastdfs/fdfs_storage/data;
		ngx_fastdfs_module;
	}
}

说明:
server_name 指定本机 ip
location /group1/M00/: group1 为 nginx 服务 FastDFS 的分组名称, M00 是 FastDFS自动生成编号,对应 store_path0=/home/FastDFS/fdfs_storage,如果 FastDFS 定义store_path1,这里就是 M01

启动Storage上的nginx

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

如果遇到以下错误,新建/var/run/nginx/ 目录即可
在这里插入图片描述
启动后即可通过url直接进行访问
在这里插入图片描述

1.5.3 测试

测试将在SpringBoot工程中进行,代码编写可以参考FastDFS java client SDK

所包含的倚赖如下:

  <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs-client-java -->
        <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs-client-java</artifactId>
            <version>1.27.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>

在/resources/config/ 下新建 fastdfs-client.properties

fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.tracker_servers = 192.168.101.3:22122

上传和下载的测试代码如下:


import org.csource.common.MyException;
import org.csource.fastdfs.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author Administrator
 * @version 1.0
 **/
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestFastDFS {

    //上传文件
    @Test
    public void testUpload(){

        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //向stroage服务器上传文件
            //本地文件的路径
            String filePath = "C:\\Users\\Administrator\\Pictures\\gfd.jpg";
            //上传成功后拿到文件Id
            String fileId = storageClient1.upload_file1(filePath, "jpg", null);
            System.out.println(fileId);
            //group1/M00/00/01/wKhlQVuhU3eADb4pAAAawU0ID2Q159.png

        } catch (Exception e) {
            e.printStackTrace();
        }

    }


    //下载文件
    @Test
    public void testDownload(){
        try {
            //加载fastdfs-client.properties配置文件
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            //定义TrackerClient,用于请求TrackerServer
            TrackerClient trackerClient = new TrackerClient();
            //连接tracker
            TrackerServer trackerServer = trackerClient.getConnection();
            //获取Stroage
            StorageServer storeStorage = trackerClient.getStoreStorage(trackerServer);
            //创建stroageClient
            StorageClient1 storageClient1 = new StorageClient1(trackerServer,storeStorage);
            //下载文件
            //文件id
            String fileId = "group1/M00/00/00/wKhlBV4lcHqAUFywAAN2APkLUOc789.jpg";
            byte[] bytes = storageClient1.download_file1(fileId);
            //使用输出流保存文件
            FileOutputStream fileOutputStream = new FileOutputStream(new File("D:/logo.jpg"));
            fileOutputStream.write(bytes);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (MyException e) {
            e.printStackTrace();
        }
    }

}

发布了100 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/s_zero/article/details/103979051