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
注:了解生产者消费者模型