【go-fastdfs】go-fastdfs 分布式文件系统搭建

文章目录
【go-fastdfs】go-fastdfs 分布式文件系统搭建
〇、缘起
一、从头开始:FastDFS 简介
二、主角出场:go-fastdfs (go语言版本的FastDFS)
1.介绍
2.安装
3.配置
4.启动
5.使用
三、数据美化:go-fastdfs-web 监控工具安装
0.介绍
1.安装
2.配置
3.部分截图
四、写在最后:总结
五、友情链接:其他相关文章
【go-fastdfs】go-fastdfs 分布式文件系统搭建
〇、缘起
前段时间写爬虫准备爬取了很多图片,没有云服务器,没有图片服务器,然后就创建了个虚拟机,开了个 HTTP 的图片接受服务,用的很 happy,单机爬取、展示玩的很开心,就这样过了很久,某一天清理电脑空间,一不小心,虚拟机没了,哈哈。让我自己凌乱一会~
吸取经验教训,接下来装一套可以自备份的分布式文件系统管理图片数据吧。。。
【选型】
选项一:B站开源的 BFS 分布式文件系统很适合小文件的存取,不过部署起来要复杂很。
选项二:C 原版 FastDFS,备选
选项三:其他分布式文件系统(GFS、HDFS、Lustre、Ceph、GridFS、mogileFS、TFS等);
选项四:无意中发现了 go 实现的 FastDFS,就是他了…

一、从头开始:FastDFS 简介
FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。

看着还挺合适的嘛,不错…

更详细的介绍请看 这里;

项目地址:https://github.com/happyfish100/fastdfs

二、主角出场:go-fastdfs (go语言版本的FastDFS)
项目地址:https://github.com/sjqzhang/go-fastdfs
编译版本下载地址:https://github.com/sjqzhang/go-fastdfs/releases

1.介绍
中文Wiki地址:https://github.com/sjqzhang/go-fastdfs/blob/master/README-en.md

go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。

支持curl命令上传
支持浏览器上传
支持HTTP下载
支持多机自动同步
支持断点下载
支持小文件自动合并(减少inode占用
支持配置自动生成
支持自监控告警
支持集群文件信息查看
使用通用HTTP协议
无需专用客户端(支持wget,curl等工具)
类fastdfs
高性能 (使用leveldb作为kv库)
高可靠(设计极其简单,使用成熟组件)
无中心设计(所有节点都可以同时读写)
优点

无依赖(单一文件)
自动同步
失败自动修复
按天分目录方便维护
支持不同的场景
文件自动去重
支持目录自定义
支持保留原文件名
支持自动生成唯一文件名
支持浏览器上传
支持查看集群文件信息
支持集群监控邮件告警
支持token下载 token=md5(file_md5+timestamp)
运维简单,只有一个角色(不像fastdfs有三个角色Tracker Server,Storage Server,Client),配置自动生成
每个节点对等(简化运维)
所有节点都可以同时读写
部署图

2.安装

  1. 首先下载官网的编译版本

  

  1. 修改权限

    root# chmod +x fileserver
    
    • 1
  2. 生成配置文件

    // 运行一下,然后杀死程序即可生成各种需要的配置文件,还是很人性化的
    root# ./fileserver

3.配置
// 正常运行之后的目录结构
root# tree -L 2

// 正常运行之后的目录结构
root# tree -L 2
.
├── conf
│   └── cfg.json
├── data
│   ├── 20190517
│   ├── 20190518
│   ├── 20190519
│   ├── 20190520
│   ├── 20190521
│   ├── 20190522
│   ├── 20190523
│   ├── fileserver.db
│   ├── log.db
│   └── stat.json
├── files
│   ├── _big
│   └── default
├── fileserver
├── log
│   ├── access.log
│   ├── fileserver.log
│   └── tusd.log
└── static
    └── uppy.html

16 directories, 7 files


需要修改 conf 目录下的 cfg.json 文件;

这里添加了两台机器,需要把两台机器的 IP 地址和端口号 添加到 peers 的组里面,这样才能做到相互备份;

其余地方根据自己需要修改,这里用默认配置;

当然,第二台机器也需要做同样的处理;

root# cat conf/cfg.json 
{
    "绑定端号": "端口",
    "addr": ":8080",
    "PeerID": "集群内唯一,请使用0-9的单字符,默认自动生成",
    "peer_id": "2",
    "本主机地址": "本机http地址,默认自动生成(注意端口必须与addr中的端口一致),必段为内网,自动生成不为内网请自行修改,下同",
    "host": "http://172.16.13.103:8080",
    "集群": "集群列表,注意为了高可用,IP必须不能是同一个,同一不会自动备份,且不能为127.0.0.1,且必须为内网IP,默认自动生成",
    "peers": ["http://172.16.13.103:8080","http://172.16.13.104:8080"],
    "组号": "用于区别不同的集群(上传或下载)与support_group_upload配合使用,带在下载路径中",
    "group": "group1",
    "是否合并小文件": "默认不合并,合并可以解决inode不够用的情况(当前对于小于1M文件)进行合并",
    "enable_merge_small_file": false,
    "重试同步失败文件的时间": "单位秒",
    "refresh_interval": 1800,
    "是否自动重命名": "默认不自动重命名,使用原文件名",
    "rename_file": false,
    "是否支持web上传,方便调试": "默认支持web上传",
    "enable_web_upload": true,
    "是否支持非日期路径": "默认支持非日期路径,也即支持自定义路径,需要上传文件时指定path",
    "enable_custom_path": true,
    "下载域名": "用于外网下载文件的域名,不包含http://",
    "download_domain": "",
    "场景列表": "当设定后,用户指的场景必项在列表中,默认不做限制(注意:如果想开启场景认功能,格式如下:'场景名:googleauth_secret' 如 default:N7IET373HB2C5M6D ",
    "scenes": [],
    "默认场景": "默认default",
    "default_scene": "default",
    "是否显示目录": "默认显示,方便调试用,上线时请关闭",
    "show_dir": true,
    "邮件配置": "",
    "mail": {
        "user": "abc@163.com",
        "password": "abc",
        "host": "smtp.163.com:25"
    },
    "告警接收邮件列表": "接收人数组",
    "alram_receivers": [],
    "告警接收URL": "方法post,参数:subjet,message",
    "alarm_url": "",
    "下载是否需带token": "真假",
    "download_use_token": false,
    "下载token过期时间": "单位秒",
    "download_token_expire": 600,
    "是否自动修复": "在超过1亿文件时出现性能问题,取消此选项,请手动按天同步,请查看FAQ",
    "auto_repair": true,
    "文件去重算法md5可能存在冲突,默认md5": "sha1|md5",
    "file_sum_arithmetic": "md5",
    "是否支持按组(集群)管理,主要用途是Nginx支持多集群": "默认不支持,不支持时路径为http://10.1.5.4:8080/action,支持时为http://10.1.5.4:8080/group(配置中的group参数)/action,action为动作名,如status,delete,sync等",
    "support_group_manage": false,
    "管理ip列表": "用于管理集的ip白名单,",
    "admin_ips": ["127.0.0.1"],
    "是否启用迁移": "默认不启用",
    "enable_migrate": false,
    "文件是否去重": "默认去重",
    "enable_distinct_file": true,
    "是否开启跨站访问": "默认开启",
    "enable_cross_origin": true,
    "是否开启Google认证,实现安全的上传、下载": "默认不开启",
    "enable_google_auth": false,
    "认证url": "当url不为空时生效,注意:普通上传中使用http参数 auth_token 作为认证参数, 在断点续传中通过HTTP头Upload-Metadata中的auth_token作为认证参数,认证流程参考认证架构图",
    "auth_url": "",
    "下载是否认证": "默认不认证(注意此选项是在auth_url不为空的情况下生效)",
    "enable_download_auth": false,
    "默认是否下载": "默认下载",
    "default_download": true,
    "本机是否只读": "默认可读可写",
    "read_only": false,
    "是否开启断点续传": "默认开启",
    "enable_tus": true
}
 

4.启动
// 此处就直接运行了,当然也可以自己编写管理脚本
root# ./fileserver &
// 检查运行状态
root# ps -ef | grep fileserver | grep -v grep 
ubuntu    38193  37927  0 May23 pts/0    00:01:00 ./fileserver

5.使用

详细资料参考地址:https://sjqzhang.github.io/go-fastdfs/ca.html#compiler_install

 

此时就可以正常使用了,打开浏览器,测试下 web 上传功能;

端口号默认为:8080,我的地址就是:172.16.13.103:8080

upload-web

当然不止如此,支持命令、web、代码上传,还有断点续传功能;

在部署的服务器上,访问:172.16.13.103:8080/stat
就可以查看此刻文件状态的 JSON 结构体,如下:

{
  "data": [
    {
      "date": "20190517",
      "fileCount": 1,
      "totalSize": 32083
    },
    {
      "date": "20190521",
      "fileCount": 1,
      "totalSize": 2123748
    },
    {
      "date": "20190523",
      "fileCount": 0,
      "totalSize": 0
    },
    {
      "date": "all",
      "fileCount": 2,
      "totalSize": 2155831
    }
  ],
  "message": "",
  "status": "ok"
}
其他 nginx 部署、压力测试等功能,移步官方文档吧。

 

三、数据美化:go-fastdfs-web 监控工具安装
项目地址:https://github.com/perfree/go-fastdfs-web
各打包版本下载地址:https://github.com/perfree/go-fastdfs-web/releases

0.介绍
go-fastdfs 虽好,可是对于机器和文件的监控并不友好,我好想有个高大上的控制台,可以实时查看文件系统的状态…
一不小心,找到了 go-fastdfs-web 这个项目,我可能可以直接通过 WEB 查看文件系统状态了,为什么可以这么优秀…

1.安装

到 官方下载页面 下载所需的版本(带jre或者不到jre)
go-fastdfs-web-download

目录结构:

root# tree -L 2
.
├── config
│   ├── application-dev.properties
│   ├── application-prod.properties
│   ├── application.properties
│   └── log4j.properties
├── db
│   └── go-fastdfs.db
├── go-fastdfs-web.jar
├── goFastDfsWeb.sh
├── jre
│   ├── bin
│   ├── COPYRIGHT
│   ├── lib
│   ├── LICENSE
│   ├── plugin
│   ├── README
│   ├── THIRDPARTYLICENSEREADME-JAVAFX.txt
│   ├── THIRDPARTYLICENSEREADME.txt
│   └── Welcome.html
├── logs
│   ├── go-fastdfs-web.log
│   └── go-fastdfs-web.log.2019-05-21.log
└── README.md

7 directories, 16 files

运行

作者提供了 管理脚本,还是比较人性化的…

root# ./goFastDfsWeb.sh start


由于默认端口号是 8088,所以就可以 web 访问了,
地址:172.16.13.103:8088

登陆界面需要注册个账号;
需要把两台部署了 go-fastdfs 文件系统的服务器添加到监控目录里,弹出界面自动添加;

作者提供了 管理脚本,还是比较人性化的…

root# ./goFastDfsWeb.sh start


2.配置
由于默认端口号是 8088,所以就可以 web 访问了,
地址:172.16.13.103:8088

登陆界面需要注册个账号;
需要把两台部署了 go-fastdfs 文件系统的服务器添加到监控目录里,弹出界面自动添加;
3.部分截图

 

1

2


版权声明:本文为CSDN博主「追火车」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tmt123421/article/details/90522244

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
go-fastdfs是一个基于http协议的分布式文件系统,它基于大道至简的设计理念,一切从简设计,使得它的运维及扩展变得更加简单,它具有高性能、高可靠、无中心、免维护等优点。 特点: 支持curl命令上传 支持浏览器上传 支持HTTP下载 支持多机自动同步 支持断点下载 支持配置自动生成 支持小文件自动合并(减少inode占用) 支持秒传 支持跨域访问 支持一键迁移(搬迁) 支持异地备份(特别是小文件1M以下) 支持并行体验 支持断点续传(tus) 支持docker部署 支持自监控告警 支持图片缩放 支持google认证码 支持自定义认证 支持集群文件信息查看 使用通用HTTP协议 无需专用客户端(支持wget,curl等工具) 类fastdfs 高性能 (使用leveldb作为kv库) 高可靠(设计极其简单,使用成熟组件) 无中心设计(所有节点都可以同时读写) 优点: 无依赖(单一文件) 自动同步 失败自动修复 按天分目录方便维护 支持不同的场景 文件自动去重 支持目录自定义 支持保留原文件名 支持自动生成唯一文件名 支持浏览器上传 支持查看集群文件信息 支持集群监控邮件告警 支持小文件自动合并(减少inode占用) 支持秒传 支持图片缩放 支持google认证码 支持自定义认证 支持跨域访问 极低资源开销 支持断点续传(tus) 支持docker部署 支持一键迁移(从其他系统文件系统迁移过来) 支持异地备份(特别是小文件) 支持并行体验(与现有的文件系统并行体验,确认OK再一键迁移) 支持token下载 token=md5(file_md5+timestamp) 运维简单,只有一个角色(不像fastdfs有三个角色Tracker Server,Storage Server,Client),配置自动生成 每个节点对等(简化运维) 所有节点都可以同时读写   go-fastdfs分布式文件系统 更新日志: v1.4.2 修复图片缩放过大服务出现退出问题
go-fastdfs是一个开源的分布式文件系统,被广泛应用于大规模文件存储和传输的场景中。然而,就像其他软件一样,go-fastdfs也存在一些潜在的漏洞。 首先,由于go-fastdfs的设计初衷是快速的文件上传和下载,因此可能在安全性方面存在一些弱点。例如,由于缺乏严格的访问控制机制,未经授权的用户可能能够访问和下载存储在go-fastdfs上的文件。这可能导致敏感信息泄露的风险。 其次,go-fastdfs的文件上传功能可能存在文件类型验证不严格的问题。攻击者可以通过伪装文件类型来上传恶意文件,从而危害系统安全。例如,攻击者可以将具有恶意程序的文件伪装成图片进行上传,一旦用户下载并打开这些文件,就可能被恶意程序攻击。 此外,还有可能存在go-fastdfs的路径遍历漏洞。攻击者可能通过构造特定的请求来绕过路径限制,访问系统中的敏感文件。这可能导致服务器的文件系统被恶意篡改,或者对系统的任意代码执行造成风险。 为了减少这些漏洞的风险,建议用户在使用go-fastdfs时采取以下措施: 1. 定期更新和维护go-fastdfs的最新版本,以确保修复了已知的漏洞和安全问题。 2. 配置严格的访问控制机制,限制用户对文件的访问权限,并禁止未经授权的访问。 3. 对上传的文件进行严格的文件类型验证,确保只有合法的文件类型被上传和下载。 4. 配置防火墙和入侵检测系统,以提高系统的安全性并及时检测到潜在的攻击。 5. 定期进行系统漏洞扫描和安全审计,及时发现并修复潜在的漏洞和安全风险。 总而言之,go-fastdfs作为一个分布式文件系统,虽然存在一些漏洞,但通过采取相应的安全措施,可以有效减少潜在的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值