fastDFS安装与使用

fastDFS安装

环境:Ubuntu16.04

  • 安装libfastcommon:
git clone https://github.com/happyfish100/libfastcommon
cd libfastcommon
./make.sh
sudo ./make.sh install
  • 安装fastdfs:
git clone https://github.com/happyfish100/fastdfs.git
cd fastdfs
./make.sh
sudo ./make.sh install
  • 验证是否安装成功
fdfs_test

可使用命令 ls /usr/bin/fdfs*在/usr/bin目录下找到fdfs相关可执行命令

fastDFS配置修改

cd /etc/fdfs

路径下是四个配置文件:client.conf.sample 、storage.conf.sample 、 storage_ids.conf.sample tracker.conf.sample,分别对三个文件进行拷贝

sudo cp client.conf.sample client.conf
sudo cp storage.conf.sample storage.conf
sudo cp tracker.conf.sample tracker.conf

在/home/lzy/fastdfs新建tracker、client、storage三个文件夹用于分别存储log文件

  • 修改tracker的配置文件
bind_addr = 192.168.137.200
port = 22122
base_path = /home/lzy/fastdfs/tracker
  • 修改storage的配置文件
bind_addr = 192.168.137.200
port = 23000
base_path = /home/lzy/fastdfs/storage
store_path_count=1
store_path0=/home/lzy/fastdfs/storage
tracker_server=192.168.137.200:22122
  • 修改client的配置文件
base_path = /home/lzy/fastdfs/storage
tracker_server=192.168.137.200:22122

运行fdfs

启动相关服务

  • 使用ls /usr/bin/fdfs* 在/usr/bin目录下找到fdfs相关可执行命令

  • 使用ps aux|grep fdfs*查看进程是否成功运行
//启动tracker服务
fdfs_trackerd /etc/fdfs/tracker.conf
sudo fdfs_trackerd /etc/fdfs/tracker.conf restart
sudo fdfs_trackerd /etc/fdfs/tracker.conf stop
//启动storage服务
fdfs_storaged /etc/fdfs/storage.conf
//启动监控服务
fdfs_monitor /etc/fdfs/client.conf
显示ACTIVE则服务启动成功

注:期间若遇到storage服务启动失败,可以查看storage/data文件夹是否有写数据权限,chmod添加即可

上传/下载

  • 上传操作
fdfs_upload_file /etc/fdfs/client.conf test.cpp

(上传文件命令+client配置文件+文件名)
======>终端输出:group1/M00/00/00/wKiJyF8_OMeAWU9XAAAGUOlgsCM004.cpp

文件存储路径在/home/lzy/fastdfs/storage/data/00/00/wKiJyF8_OMeAWU9XAAAGUOlgsCM004.cpp

  • 下载操作
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKiJyF8_OMeAWU9XAAAGUOlgsCM004.cpp

源码分析

本地的fasdfs地址存放在/home/lzy/Documents/diskPro/fastdfs/client

由于上传下载操作均与client相关,故进入client文件夹

上传文件源码分析:fdfs_upload_file.c

使用api的方式实现文件的上传/下载操作

自己根据源码写接口

(使用gcc编译的时候记得指定头文件路径、动态库路径)

使用进程的方式实现文件的上传/下载操作

  • 创建匿名管道

  • 创建子进程

  • 子进程执行execlp

    • 关闭读端
    • 将得到的文件ID写入管道
  • 父进程读管道

    • 关闭写端
    • 将flieID读到内存
    • 回收子进程pcb

注:父子进程始终共享的东西

  • 文件描述符
    • open
    • pipe
  • 内存映射区
    • mmap

注:了解生产者消费者模型

posted @ 2020-08-21 11:20  代码生财  阅读(226)  评论(0)    收藏  举报