高性能、高可靠分布式文件系统 go-fastdfs

Unlicense
Google Go
跨平台
2019-01-24
s_jqzhang

English

分布式文件系统go-fastdfs(类fastdfs)在运维管理等方面优于fastdfs,更人性化

  • 支持curl命令上传

  • 支持浏览器上传

  • 支持HTTP下载

  • 支持多机自动同步

  • 类fastdfs

  • 高性能 (使用leveldb作为kv库)

  • 高可靠(设计极其简单,使用成熟组件)

优点

  • 无依赖(单一文件)

  • 自动同步

  • 失败自动修复

  • 按天分目录方便维护

  • 支持不同的场景

  • 文件自动去重

  • 支持目录自定义

  • 支持保留原文件名

  • 支持自动生成唯一文件名

  • 支持浏览器上传

  • 支持查看集群文件信息

  • 支持集群监控邮件告警

  • 支持token下载 token=md5(file_md5+timestamp)

  • 运维简单,只有一个角色(不像fastdfs有三个角色Tracker Server,Storage Server,Client),配置自动生成

  • 每个节点对等(简化运维)

  • 所有节点都可以同时读写

启动服务器(已编译,下载体验)

./fileserver

配置自动生成 (conf/cfg.json)

{
	"绑定端号": "端口",
	"addr": ":8080",
	"集群": "集群列表例如: http://10.1.xx.2:8080,http://10.1.xx.5:8080,http://10.1.xx.60:8080,注意是字符串数组(ip必须不一样)",
	"peers": ["http://10.1.xx.2:8080","http://10.1.xx.5:8080","http://10.1.xx.60:8080"],
	"组号": "组号",
	"group": "group1",
	"refresh_interval": 120,
	"是否自动重命名": "真假",
	"rename_file": false,
	"是否支持web上传": "真假",
	"enable_web_upload": true,
	"是否支持非日期路径": "真假",
	"enable_custom_path": true,
	"下载域名": "dowonload.web.com",
	"download_domain": "",
	"场景":"场景列表",
	"scenes":[],
	"默认场景":"",
	"default_scene":"default",
	"是否显示目录": "真假",
	"show_dir": true,
	"邮件配置":"",
	"mail":{
		"user":"abc@163.com",
		"password":"abc",
		"host":"smtp.163.com:25"
	},
	"告警接收邮件列表":"",
	"alram_receivers":[],
	"告警接收URL":"",
	"alarm_url":"",
	"下载是否需带token":"真假",
	"download_use_token":false,
	"下载token过期时间":"",
	"download_token_expire":600,
	"是否自动修复":"可能存在性问题(每小时一次)",
	"auto_repair":true,
	 "文件去重算法md5可能存在冲突,默认md5":"sha1|md5",
         "file_sum_arithmetic":"md5"
}

命令上传

curl -F file=@http-index-fs http://10.1.xx.60:8080/upload

WEB上传(浏览器打开)

http://127.0.0.1:8080

代码上传(选项参阅浏览器上传)

import requests
url = 'http://127.0.0.1:8080/upload'
files = {'file': open('report.xls', 'rb')}
options={'output':'json','path':'','scene':''} #参阅浏览器上传的选项
r = requests.post(url, files=files)
print(.text)

有问题请点击反馈

Q&A

  • 已经使用fastdfs存储的文件可以迁移到go fastdfs下么?

答案是可以的,你担心的问题是路径改变,go fastdfs为你考虑了这一点

curl -F file=@data/00/00/_78HAFwyvN2AK6ChAAHg8gw80FQ213.jpg -F path=M00/00/00/ http://127.0.0.1:8080/upload

同理可以用一行命令迁移所有文件

cd fastdfs/data && find -type f |xargs -n 1 -I {} curl -F file=@data/{} -F path=M00/00/00/ http://127.0.0.1:8080/

以上命令可以过迁粗糙
可以写一些简单脚本进行迁移
  • 还需要安装nginx么?

可以不安装,也可以选择安装
go fastdfs 本身就是一个高性能的web文件服务器。
  • 能动态加载配置么?

答案:是可以的,但要更新到最新版本
步骤:
1)修改 conf/cfg.json 文件
2)访问 http://10.1.xx.60:8080/reload
3) 注意:每个节点都需要进行同样的操作
  • 内存占用很高是怎么回事?

正常情况下,内存应该低于2G,除非每天上传文件超过百万
内存异常,主要是集群的文件没有同步,同时开启了自动修复功能
处理办法,删除data目录下当天的errors.md5文件,关闭自动修复,重启服务
参阅系统状态说明
  • 如何查看集群文件信息?

http://10.1.xx.60:8080/stat

如果出现文件统计出错怎么办?
请删除 data目录下的 stat.json文件 重启服务,请系统自动重新计算文件数。

或者调用
http://10.1.xx.60:8080/repair_stat
  • 可靠性怎样,能用于生产环境么?

本项目已大规模用于生产环境,如担心不能满足
可以在使用前对其各项特性进行压力测试,有任何
问题可以直接提issue
  • 能不能在一台机器部置多个服务端?

不能,在设计之初就已考虑到集群的高可用问题,为了保证集群的真正可用,必须为不同的ip,ip 不能用 127.0.0.1
错误 "peers": ["http://127.0.0.1:8080","http://127.0.0.1:8081","http://127.0.0.1:8082"]
正确 "peers": ["http://10.0.0.3:8080","http://10.0.0.4:8080","http://10.0.0.5:8080"]
  • 文件不同步了怎么办?

正常情况下,集群会每小时自动同步修复文件。(性能较差,在海量情况下建议关闭自动修复)
那异常情况下怎么?
答案:手动同步(最好在低峰执行)
http://172.16.70.123:7080/sync?date=20190117&force=1
参数说明:date 表示同步那一天的数据 force 1.表示是否强制同步当天所有(性能差),0.表示只同步失败的文件

不同步的情况:
1) 原来运行N台,现在突然加入一台变成N+1台
2)原来运行N台,某一台机器出现问题,变成N-1台

如果出现多天数据不一致怎么办?能一次同步所有吗?
答案是可以:(最好在低峰执行)
http://172.16.70.123:7080/repair?force=1
  • 文件不同步会影响访问吗?

答案:不会影响,会在访问不到时,自动修复不同步的文件。
  • 如何查看系统状态及说明?

http://172.16.70.123:7080/status
注意:(Fs.Peers是不带本机的,如果带有可能出问题)
本机为 Fs.Local
sts["Fs.ErrorSetSize"] = this.errorset.Cardinality()  这个会导致内存增加
  • 如何压测?

先用gen_file.py产生大量文件(注意如果要生成大文件,自已在内容中乘上一个大的数即可)
例如:
# -*- coding: utf-8 -*-
import os
j=0
for i in range(0,1000000):
    if i%1000==0:
        j=i
        os.system('mkdir %s'%(i))
    with open('%s/%s.txt'%(j,i),'w+') as f:
        f.write(str(i)*1024)
接着用benchmark.py进行压测
也可以多机同时进行压测,所有节点都是可以同时读写的
的码云指数为
超过 的项目
加载中

评论(9)

小武5
有Java客户端的demo吗?
小武5
要是有详细文档就好了
l
litNEON
简单,有效,希望后续能够支持文件分片上传和文件删除功能
毕井锐
毕井锐
fastdfs 已经停更了,余大神不维护了。
张生工作室

引用来自“g8up”的评论

上传成功的响应里,能立马返回这个个上传文件访问链接吗?
是可以的
g8up
g8up
上传成功的响应里,能立马返回这个个上传文件访问链接吗?
张生工作室
看着优点,真的很心动,希望大家一起压测一下,帮忙发现一下问题,好等我在线上使用。
红薯
红薯
fastdfs 好久没更新了
张生工作室
简单,高效,连配置都自动生成,很贴心,压测也很给力

暂无资讯

暂无问答

FastDFS安装使用实战一(安装篇)

最近在研究负载均衡和集群,其中涉及到一个主要问题是,如何让集群中的real server共享一套文件系统。在网上查到FastDFS,国人(happy fish,感谢他的开源精神)开发的一套轻量级分布式文件系...

2015/03/30 20:01
217
0
FastDFS client for .net

fastDfs Code: https://code.google.com/p/fastdfs/ FastDfs_Client_DotNet:https://code.google.com/p/fastdfs/downloads/detail?name=FastDFS_Client_Dotnet.rar FastDfs示例代码 初始化 ...

2014/02/11 14:35
95
0
FastDFS5.05安装说明

FastDFS5.05安装说明

2015/06/16 18:46
209
0
fastdfs搭建

一、安装依赖: yum install -y gcc-c++ wget unzip perl pcre-devel zlib-devel libevent 二、下载: 1、下载fastdfs: wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.g...

2018/04/28 14:53
33
0
linux下搭建 FastDFS + Nginx

FastDfs 依赖 libevent。 先决条件: 测试环境目录为: /home/users/wangyanpei/ libevent 版本: 2.0.21-stable Fastdfs 版本: FastDFS_v4.06.tar.gz Nginx 版本: 1.6.0 fastdfs-nginx-mo...

2015/07/29 13:45
89
0
CentOS 6.3(64) ---> fastdfs_v4.07 / 实现多服务器

自己闲着没事,在小黑上虚拟了 4 个 centos 64 的系统,用来安装分布式 fastdfs 、 nginx 负载均衡,过程一路艰辛,搞了一个通宵都没弄好,终于在第二天的傍晚终于弄好了,记录一下过程。 有...

2013/09/29 23:17
10.7K
6

没有更多内容

加载失败,请刷新页面

返回顶部
顶部