FastDFS开源地址:https://github.com/happyfish100
参考:分布式文件系统FastDFS设计原理
参考:FastDFS分布式文件系统html
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。
FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。python
跟踪服务器,主要作调度工做,起到均衡的做用;负责管理全部的 storage server和 group,每一个 storage 在启动后会链接 Tracker,告知本身所属 group 等信息,并保持周期性心跳。Tracker须要管理的元信息不多,会所有存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,自己不须要持久化任何数据,这样使得tracker很是容易扩展,直接增长tracker机器便可扩展为tracker cluster来服务,cluster里每一个tracker之间是彻底对等的,全部的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。
linux
Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,因此建议group内的多个storage尽可能配置相同,以避免形成存储空间的浪费。
以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),好比将不一样应用数据存到不一样的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不一样的group来作负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其余机器,使得恢复时间会很长。
group内每一个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,好比有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。
storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了不单个目录下的文件数太多,在storage第一次启动时,会在每一个数据存储目录里建立2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,而后将文件数据直接做为一个本地文件存储到该目录中。nginx
客户端,上传下载数据的服务器,也就是咱们本身的项目所部署在的服务器。 git
资源包:
资源包百度云连接
一、解决Windows下安装FastDFS报 Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 问题
二、解决Windows下安装FastDFS报 fdfs_client/sendfilemodule.c(53) fatal error C1189: #error : platfom not supported 问题,fdfs_client-py-1.2.6-jj 安装包已经修改过, 使用python setup.py install 安装github
yum install gcc
1. 解压缩libfastcommon-master.zip 2. 进入到libfastcommon-master的目录中 3. 执行 ./make.sh 4. 执行 sudo ./make.sh install
1. 解压缩fastdfs-master.zip 2. 进入到 fastdfs-master目录中 3. 执行 ./make.sh 4. 执行 sudo ./make.sh install
1. sudo cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf 2. 在/home/python/目录中建立目录 fastdfs/tracker mkdir –p /home/python/fastdfs/tracker 3. 编辑/etc/fdfs/tracker.conf配置文件 sudo vim /etc/fdfs/tracker.conf 修改 base_path=/home/python/fastdfs/tracker
1. sudo cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf 2. 在/home/python/fastdfs/ 目录中建立目录 storage mkdir –p /home/python/fastdfs/storage 3. 编辑/etc/fdfs/storage.conf配置文件 sudo vim /etc/fdfs/storage.conf 修改内容: base_path=/home/python/fastdfs/storage store_path0=/home/python/fastdfs/storage tracker_server=本身ubuntu虚拟机的ip地址:22122
# 启动跟踪器
sudo service fdfs_trackerd start
# 启动存储器
sudo service fdfs_storaged start
1. sudo cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 2. 编辑/etc/fdfs/client.conf配置文件 sudo vim /etc/fdfs/client.conf 修改内容: base_path=/home/python/fastdfs/tracker tracker_server=本身ubuntu虚拟机的ip地址:22122 3. 上传文件测试: fdfs_upload_file /etc/fdfs/client.conf 要上传的图片文件 若是返回相似group1/M00/00/00/rBIK6VcaP0aARXXvAAHrUgHEviQ394.jpg的文件id则说明文件上传成功
vi /etc/rc.local # 启动跟踪器 sudo service fdfs_trackerd start # 启动存储器 sudo service fdfs_storaged start
使用清空命令
yum clean all
而后执行
yum groupinstall
"Development Tools"
yum -y install pcre-devel zlib-develweb
yum -y install openssl openssl-develshell
1. 解压缩 nginx-1.8.1.tar.gz 2. 解压缩 fastdfs-nginx-module-master.zip 3. 进入nginx-1.8.1目录中 4. 执行 sudo ./configure --prefix=/usr/local/nginx/ --add-module=fastdfs-nginx-module-master解压后的目录的绝对路径/src sudo make sudo make install
1. sudo cp fastdfs-nginx-module-master解压后的目录中src下的mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf 2. sudo vim /etc/fdfs/mod_fastdfs.conf 修改内容: connect_timeout=10 tracker_server=本身ubuntu虚拟机的ip地址:22122 url_have_group_name=true store_path0=/home/python/fastdfs/storage 3. sudo cp 解压缩的fastdfs-master目录conf目录中的http.conf /etc/fdfs/http.conf 4. sudo cp 解压缩的fastdfs-master目录conf目录中的mime.types /etc/fdfs/mime.types 5.sudo vim /usr/local/nginx/conf/nginx.conf
注意:在顶部必须添加:user root;
worker_processes 1;django
events {ubuntu
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
#(--permanent永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=8888/tcp --permanent firewall-cmd --zone=public --add-port=22122/tcp --permanent firewall-cmd --zone=public --add-port=80/tcp --permanent firewall-cmd --zone=public --add-port=23000/tcp --permanent #重载防火墙 firewall-cmd --reload
sudo /usr/local/nginx/sbin/nginx
1. workon django_py3 # 这里是进入正在Linux建的python虚拟环境(可跳过) 2. 进入fdfs_client-py-master.zip所在目录 3. pip install fdfs_client-py-master.zip 4. >>> from fdfs_client.client import Fdfs_client >>> client = Fdfs_client('/etc/fdfs/client.conf') >>> ret = client.upload_by_filename('test') >>> ret {'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/ wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test' , 'Storage IP':'192.168.243.133'}
1.解压fdfs_client-py-master.zip 进入fdfs_client-py-master所在目录
将fdfs_client文件夹copy到python解释器的 /lib 目录下
2.修改fdfs_client/storage_client.py文件,将第12行删除或注释(不然,使用时会报错ImportError: No module named sendfile)
# from fdfs_client.sendfile import *
3.安装 mutagen 和 requests
pip install mutagen
pip isntall requests
4.修改fastdfs配置文件:client_config
# connect timeout in seconds # default value is 30s connect_timeout=30 # network timeout in seconds # default value is 30s network_timeout=60 # the base path to store log files # 日志存放路径 base_path=../../logs # tracker_server can ocur more than once, and tracker_server format is # "host:port", host can be hostname or ip address # tracker服务器 tracker_server=192.168.11.200:22122 #standard log level as syslog, case insensitive, value list: ### emerg for emergency ### alert ### crit for critical ### error ### warn for warning ### notice ### info ### debug log_level=info # if use connection pool # default value is false # since V4.05 use_connection_pool = false # connections whose the idle time exceeds this time will be closed # unit: second # default value is 3600 # since V4.05 connection_pool_max_idle_time = 3600 # if load FastDFS parameters from tracker server # since V4.05 # default value is false load_fdfs_parameters_from_tracker=false # if use storage ID instead of IP address # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # default value is false # since V4.05 use_storage_id = false # specify storage ids filename, can use relative or absolute path # same as tracker.conf # valid only when load_fdfs_parameters_from_tracker is false # since V4.05 storage_ids_filename = storage_ids.conf #HTTP settings http.tracker_server_port=80 #use "#include" directive to include HTTP other settiongs ##include http.conf
5.在 python 虚拟环境下进入 shell 终端进行上传测试
导入模块: from fdfs_client.client import Fdfs_client 导入配置文件 注意:windows环境下绝对路径会发生转义,须要加上 "r" 说明是原生字符串 client = Fdfs_client(r'配置文件绝对路径') 上传图片 注意:windows环境下绝对路径会发生转义,须要加上 "r" 说明是原生字符串 client.upload_by_filename(r'图片文件绝对路径')
注意:
1.修改lib/fdfs_client/storage_client.py文件,注释第12行; 2.windows环境下路径分隔符是 ‘\’ ,而linux使用 ‘/’,因此须要使用 ‘r’ 来声明是原生字符串; 3.若是上传文件提示链接tracker失败,请仔细检查client_config配置文件,配置文件中必定不要出现中文; 4.若是刚开始使用 pip install fdfs_client,报错,不要盲目安装VC++ 14.0,能够先去 控制面板==>>程序==>>程序和功能 查看是否已经安装过。