FastDFS
FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等
特性
文件不分块存储,上传的文件和OS文件系统中的文件一一对应
支持相同内容的文件只保存一份,节约磁盘空间
下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用
支持在线扩容
支持主从文件
核心架构
client(业务请求方)
客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。
tracker(大哥)
跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。
storage(小弟)
存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。
group
组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行
docker下载
拉取镜像
docker pull registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
启动容器(修改ip)【自启动】
docker run -d --restart=always --privileged=true --net=host --name=fastdfs -e IP=192.168.66.101 -e WEB_PORT=8888 -v ${HOME}/fastdfs:/var/local/fdfs registry.cn-beijing.aliyuncs.com/tianzuo/fastdfs
查看容器,找到fastdfs容器的id
docker images
进入容器
docker exec -it ea5bb54e1180 bash
修改client.conf文件(核对一下即可)
vi /etc/fdfs/client.conf
#需要修改的内容如下 (可以不一致,不用改)
base_path=/home/fastdfs
#tracker服务器IP和端口
tracker_server=192.168.139.128:22122
fastdfs命令
上传
fdfs_upload_file /etc/fdfs/client.conf /opt/test1.info
会把/opt路径下的test1.info保存到设置的storage存储路径
fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
参数含义:
<config_file> :配置文件路径
<local_filename> :本地文件路径
[storage_ip:port] :(可选参数)
[store_path_index] :(可选参数)
下载
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKhCZWM2EFKAdOn9AAAAFEtV3as48.infogroup1/M00/00/00/wKhCZWM2EFKAdOn9AAAAFEtV3as48.info
把这个文件下载到此目录
fdfs_download_file <config_file> <file_id> [local_filename] [<download_offset> <download_bytes>]
参数含义:
<config_file> :配置文件路径
<file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名
[local_filename] :文件下载地址
<download_offset> :(可选参数)文件下载开始时间
<download_bytes> :(可选参数)文件下载的字节数
查看文件信息
fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/wKhCZWM2EFKAdOn9AAAAFEtV3as48.info
fdfs_file_info <config_file> <file_id>
参数含义:
<config_file> :配置文件路径
<file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名
删除(慎用)
dfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhCZWM2EFKAdOn9AAAAFEtV3as48.info
注意:
删除指令使用后,文件在该卷中的所有备份都会被删除,因为卷内的存储节点会相互同步,故慎用
fdfs_delete_file <config_file> <file_id>
参数含义:
<config_file> :配置文件路径
<file_id> :文件在FastDFS中的唯一文件标识,即卷名+文件名
fastdfs实战
查看容器id
docker images
进入容器
docker exec -it ea5bb54e1180 bash
查看图片路径
find / -name '*.jpg'
把虚拟机的文件cp到容器里面
先把文件上传到虚拟机中,再把文件cp到docker容器中(先创建好目录)
docker cp 目录名称 容器id:/usr/local
如:docker cp /usr/local/images/rentPro ea5bb54e1180:/usr/local/images/rentPro
上传文件【命令/配置文件的路径/需要上传文件的路径】
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/anti-steal.jpg
上传后获得路径group1/M00/00/00/wKhCZWQ8MVqAU_ErAABdreSfEnY378.jpg
删除【命令/配置文件的路径/需要上传文件的路径】
/usr/bin/dfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKhCZWM2EFKAdOn9AAAAFEtV3as48.info
访问
192.168.66.101:8888/group1/M00/00/00/wKhCZWQ8MVqAU_ErAABdreSfEnY378.jpg