fastDFS笔记

前言

FastDFS(Fast Distributed File System)是一款开源轻量级分布式文件系统。

安装libfastcommon

  1. 获取libfastcommon安装包:通过Xftp上传到服务器

    https://github.com/happyfish100/libfastcommon/archive/V1.0.38.tar.gz
    
  2. 解压安装包:tar -zxvf V1.0.38.tar.gz

  3. 进入目录:cd libfastcommon-1.0.38

  4. 执行编译:./make.sh

  5. 安装:./make.sh install

可能遇到的问题:

-bash: make: command not found
-bash: gcc: command not found解决方案:
debian通过apt-get install gcc make安装
centos通过yum -y install gcc make安装

安装FastDFS

  1. 获取fdfs安装包:

    https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
    
  2. 解压安装包:tar -zxvf V5.11.tar.gz

  3. 进入目录:cd fastdfs-5.11

  4. 执行编译:./make.sh

  5. 安装:./make.sh install

  6. 查看可执行命令:ls -la /usr/bin/fdfs*

配置Tracker服务

  • 先建立两个文件夹
  • mkdir /home/fastdfs/tracker -p
  • mkdir /home/fastdfs/storage -p*
  1. 进入/etc/fdfs目录,有三个.sample后缀的文件(自动生成的fdfs模板配置文件),通过cp命令拷贝tracker.conf.sample,删除.sample后缀作为正式文件:

  2. 编辑tracker.conf:vi tracker.conf,修改相关参数

    base_path=/home/fastdfs/tracker  #tracker存储data和logs的路径
    http.server_port=80 #http端口,需要和nginx相同
    thread_stack_size = 128KB
    
  3. 启动tracker(支持start|stop|restart):

    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
    
  4. 查看tracker启动日志:进入刚刚指定的base_path(/home/fastdfs/tracker)中有个logs目录,查看tracker.log文件

  5. 查看端口情况:netstat -apn|grep fdfs

  6. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vWbNhCli-1621559649053)(fastDFS笔记.assets/872887-20180809201847657-2001149194.jpg)]

可能遇到的报错:

/usr/bin/fdfs_trackerd: error while loading shared libraries: libfastcommon.so: cannot open shared object file: No such file or directory
解决方案:建立libfastcommon.so软链接
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

配置Storage服务

  1. 进入/etc/fdfs目录,有cp命令拷贝storage.conf.sample,删除.sample后缀作为正式文件;

  2. 编辑storage.conf:vi storage.conf,修改相关参数:

    base_path=/home/fastdfs/storage   #storage存储data和logs的跟路径,必须提前创建好
    port=23000  #storge默认23000,同一个组的storage端口号必须一致
    group_name=group1  #默认组名,根据实际情况修改
    store_path_count=1  #存储路径个数,需要和store_path个数匹配
    store_path0=/home/fastdfs/storage  #如果为空,则使用base_path
    tracker_server=112.125.122.106:22122 #配置该storage监听的tracker的ip和port(如果有错误可选用内部ip)
    
  3. 启动storage(支持start|stop|restart):

    /usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
    
  4. 查看端口情况:netstat -apn|grep fdfs
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q1vyw6Xb-1621559649056)(fastDFS笔记.assets/872887-20180809202028138-670884814.jpg)]

  5. 通过monitor来查看storage是否成功绑定:

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

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7G8GT5z-1621559649058)(fastDFS笔记.assets/872887-20180809202102192-1479269612.jpg)]

  6. 查看storage启动日志。

vi /home/fastdfs/storage/logs/storaged.log

查看最后几行,显示类似如下所示,表示启动成功。

[2019-07-09 17:03:51] INFO - file: tracker_client_thread.c, line: 310, successfully connect to tracker server 192.168.1.206:2
2122, as a tracker client, my ip is 192.168.1.206
[2019-07-09 17:04:21] INFO - file: tracker_client_thread.c, line: 1263, tracker server 192.168.1.206:22122, set tracker leade
r: 192.168.1.206:22122

一个测试案例

该案例是在springboot基础上进行的,下面是具体内容:

需要的依赖:

<dependency>
    <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>

fastdfs-client.properties

fastdfs.connect_timeout_in_seconds=5
fastdfs.netword_timeout_in_seconds=30
fastdfs.charset=UTF-8
fastdfs.http_anti_steal_token=false
fastdfs.http_secret_key=FastDFS1234567890//默认密码
fastdfs.http_tracker_http_port=8080//与tracker.conf文件中的http.server_port=8080一致

fastdfs.tracker_servers=112.125.122.106:22122//与storage.conf文件中的tracker_server=112.125.122.106:22122一致

需要开启的端口

22122、23000、8080

TestFastDFS类

public class TestFastDFS {

    private String local_filename="C:\\Users\\86135\\Desktop\\1825010260.jpg";
    //上传文件
    @Test
    public void testUpload(){
        try {
            //加载fastDFS客户端配置文件
            ClientGlobal.initByProperties("C:\\Users\\86135\\IdeaProjects\\fastdfs\\src\\main\\java\\com\\example\\fastdfs\\config\\fastdfs-client.properties");
            System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
            System.out.println("charset=" + ClientGlobal.g_charset);
            //创建一个tracker客户端和服务端
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            //定义一个storage客户端和服务端
            StorageServer storageServer = null;
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);
            //文件元信息
            NameValuePair[] metaList = new NameValuePair[1];
            metaList[0] = new NameValuePair("fileName", local_filename);
            //执行上传,返回文件id
            String fileId = client.upload_file1(local_filename, null, metaList);
            System.out.println("upload success. file id is: " + fileId);
            trackerServer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    //查询文件
    @Test
    public void testSelect(){
        try {
            //加载fastDFS客户端配置文件
            ClientGlobal.initByProperties("C:\\Users\\86135\\IdeaProjects\\fastdfs\\src\\main\\java\\com\\example\\fastdfs\\config\\fastdfs-client.properties");
            System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
            System.out.println("charset=" + ClientGlobal.g_charset);
            //创建一个tracker客户端
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            //定义一个storage客户端
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);
			//查询可以根据文件id进行
            FileInfo fileInfo =client.query_file_info1("group1/M00/00/00/rBE9YV8Nde2AMkxmAABPOPwk_k4219.jpg");
            System.out.println(fileInfo);
            trackerServer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    //下载文件
    @Test
    public void testDownload(){
        try {
            //加载fastDFS客户端配置文件
            ClientGlobal.initByProperties("C:\\Users\\86135\\IdeaProjects\\fastdfs\\src\\main\\java\\com\\example\\fastdfs\\config\\fastdfs-client.properties");
            System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
            System.out.println("charset=" + ClientGlobal.g_charset);
            //创建一个tracker客户端
            TrackerClient tracker = new TrackerClient();
            TrackerServer trackerServer = tracker.getConnection();
            StorageServer storageServer = null;
            //定义一个storage客户端
            StorageClient1 client = new StorageClient1(trackerServer, storageServer);
			//下载可以根据文件id
            byte[] bytes=client.download_file1("group1/M00/00/00/rBE9YV8Nde2AMkxmAABPOPwk_k4219.jpg");
            File file =new File("C:\\Users\\86135\\Desktop\\2.jpg");
            FileOutputStream fileOutputStream=new FileOutputStream(file);
            fileOutputStream.write(bytes);
            fileOutputStream.close();
            trackerServer.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

安装Nginx和fastdfs-nginx-module模块

安装nginx相关依赖

gcc
pcre
openssl
zlib

① 安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++

② PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel

③ zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel

④ OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

安装nginx

先进入cd /usr/local/src/fastdfs-5.11/conf

执行cp mime.types http.conf /etc/fdfs/

  1. 下载Nginx安装包

    http://nginx.org/download/nginx-1.15.2.tar.gz
    
  2. 下载fastdfs-nginx-module安装包

    https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
    
  3. 解压nginx:tar -zxvf nginx-1.15.2.tar.gz

  4. 解压fastdfs-nginx-module:tar -xvf V1.20.tar.gz

  5. 进入nginx目录:cd nginx-1.15.2

  6. 配置,并加载fastdfs-nginx-module模块:(如果之前已经安装好了nginx就直接执行这一步就可以了。)(之后无需在执行./configure)

    (指定安装在同级目录下的nginx中)

    ./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-1.20/src/
    
  7. 编译安装:

    make
    make install
    
  8. 查看安装路径:whereis nginx
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjPjmpUk-1621559649061)(fastDFS笔记.assets/872887-20180809202137626-1411197392.jpg)]

  9. 启动、停止:

    cd /usr/local/nginx/sbin/
    ./nginx 
    ./nginx -s stop #此方式相当于先查出nginx进程id再使用kill命令强制杀掉进程
    ./nginx -s quit #此方式停止步骤是待nginx进程处理任务完毕进行停止
    ./nginx -s reload
    

可能出现的错误

/usr/include/fastdfs/fdfs_define.h:15:27: 致命错误:common_define.h:没有那个文件或目录
在这里插入图片描述

解决办法

1、编辑fastdfs-nginx-module的配置文件

vim fastdfs/fastdfs-nginx-module-1.20/src/config

在这里插入图片描述

2、将原文修改为上图的两处红框圈出的地方

ngx_module_incs="/usr/local/include /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/local/include /usr/include/fastcommon/"

3、重新编译安装

./configure --prefix=/usr/local/nginx --add-module=/usr/local/fastdfs-nginx-module-1.20/src/  #解压后fastdfs-nginx-module所在的位置
make
make install

另一个问题:同时安装sll和fastdfs-nginx-module模块

./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --add-module=/usr/local/fastdfs-nginx-module-1.20/src/

之后make,一定不要make install

然后将刚刚编译好的nginx覆盖掉原有的nginx(这个时候nginx要停止状态)

cp ./objs/nginx /usr/local/nginx/sbin/

然后启动nginx,仍可以通过命令查看是否已经加入成功

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

配置Nginx和fastdfs-nginx-module模块

  1. 配置mod-fastdfs.conf,并拷贝到/etc/fdfs文件目录下

    cd fastdfs-nginx-module-1.20/src/
    cp mod_fastdfs.conf /etc/fdfs/
    
  2. 进入/etc/fdfs修改mod_fastdfs.conf:

    base_path=/home/fastdfs
    tracker_server=10.122.149.211:22122 #tracker的地址
    url_have_group_name=true #url是否包含group名称
    storage_server_port=23000 #需要和storage配置的相同
    store_path_count=1  #存储路径个数,需要和store_path个数匹配
    store_path0=/home/fastdfs #文件存储的位置
    group_count = 3 #设置组的个数,事实上这次只使用了group1
    
  3. mod-fastdfs.conf在文件的最后,设置group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/fastdfs/storage
store_path1=/home/fastdfs/storage
  1. 配置nginx,80端口server增加location如图:

    cd /usr/local/nginx/conf/
    vi nginx.conf
    
    server {
            listen       80;
            server_name  www.360.cn;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    		//新添
            location /group1/M00 {
                root /home/fastdfs/storage/data;
                ngx_fastdfs_module;
            }
    
  2. 最后需要拷贝fastdfs解压目录中的http.conf和mime.types:

cd /usr/local/fastdfs-5.11/conf
cp mime.types http.conf /etc/fdfs/
  1. 创建M00至storage存储目录的符号连接:
ln -s /home/fastdfs/data /home/fastdfs/data/M00
  1. 重启nginx

    这样我们就可以通过nginx访问fastDFS中的文件了:(例子如下)

    http://www.360zcc.cn/group1/M00/00/00/rBE9YV8OOhKAGYnmAABPOPwk_k4699.jpg
    

    如果出现这样的问题:

    nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
    
    解决办法

    使用指定nginx.conf文件的方式重启nginx

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

    此时去logs目录下查看发现nginx.pid文件已经生成了

FastDFS常用命令测试

上传文件

  1. 进入/etc/fdfs目录,有cp命令拷贝client.conf.sample,删除.sample后缀作为正式文件;

  2. 修改client.conf相关配置:

    base_path=/home/fastdfs/tracker //tracker服务器文件路径
    tracker_server=10.122.149.211:22122 //tracker服务器IP地址和端口号
    http.tracker_server_port=80 # tracker服务器的http端口号,必须和tracker的设置对应起来
    
  3. 新建一个测试文档1.txt,内容为abc

  4. 命令:

    /usr/bin/fdfs_upload_file  <config_file> <local_filename>
    
  5. 示例:

    /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf 1.txt
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x3tyDSnZ-1621559649067)(https://www.cnblogs.com/handsomeye/p/media/15336343653165/15337784246114.jpg)]img

    组名:group1 
    磁盘:M00 
    目录:00/00 
    文件名称:CnqV01trmeyAbAN0AAAABLh3frE677.txt
    
  6. 查看结果,进入storage的data目录:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jSflJH3-1621559649069)(https://www.cnblogs.com/handsomeye/p/media/15336343653165/15337784664094.jpg)]img

  7. 通过wget和浏览器方式访问成功:

    wget http://10.122.149.211/group1/M00/00/00/CnqV01trmeyAbAN0AAAABLh3frE677.txt
    

    img

    [外链图片转存中…(img-x3tyDSnZ-1621559649067)][外链图片转存中…(img-VN6jHWHr-1621559649068)]

    组名:group1 
    磁盘:M00 
    目录:00/00 
    文件名称:CnqV01trmeyAbAN0AAAABLh3frE677.txt
    
  8. 查看结果,进入storage的data目录:

  9. 通过wget和浏览器方式访问成功:

    wget http://10.122.149.211/group1/M00/00/00/CnqV01trmeyAbAN0AAAABLh3frE677.txt
    

img

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

木鱼未来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值