【数据存储】分布式文件系统SeaweedFS
2021.05.25
初始seaweedFS
安装
1、先去GitHub下载所需版本
linux_amd64.tar.gz
2、然后放到服务器的文档中
/opt/software
3、解压安装
tar -zxvf ./linux_amd64.tar.gz -C /opt/install/seaweed
4、在seaweed安装包下安装seaweedfs文件夹及其下属两个文件夹
mkdir -p ./seaweedfs/data ./seaweedfs/volume
5、用以下命令查看master
./weed master -h
Example: weed master -port=9333
Default Usage:-cpuprofile stringcpu profile output file-defaultReplication stringDefault replication type if not specified. (default "000")-disableHttpdisable http requests, only gRPC operations are allowed.-garbageThreshold floatthreshold to vacuum and reclaim spaces (default 0.3)-ip stringmaster <ip>|<server> address, also used as identifier (default "172.19.0.16")
-ip.bind stringip address to bind to-mdir stringdata directory to store meta data (default "/tmp")-memprofile stringmemory profile output file-metrics.address stringPrometheus gateway address <host>:<port>-metrics.intervalSeconds intPrometheus push interval in seconds (default 15)-options stringa file of command line options, each line in optionName=optionValue format-peers stringall master nodes in comma separated ip:port list, example: 127.0.0.1:9093,127.0.0.1:9094,127.0.0.1:9095-port inthttp listen port (default 9333)-resumeStateresume previous state on start master server-volumePreallocatePreallocate disk space for volumes.-volumeSizeLimitMB uintMaster stops directing writes to oversized volumes. (default 30000)-whiteList stringcomma separated Ip addresses having write permission. No limit if empty.
Description:start a master server to provide volume=>location mapping service and sequence number of file idsThe configuration file "security.toml" is read from ".", "$HOME/.seaweedfs/", "/usr/local/etc/seaweedfs/", or "/etc/seaweedfs/", in that order.The example security.toml configuration file can be generated by "weed scaffold -config=security"
6、用以下命令查看volume
./weed volume -h
Example: weed volume -port=8080 -dir=/tmp -max=5 -ip=server_name -mserver=localhost:9333
Default Usage:-compactionMBps intlimit background compaction or copying speed in mega bytes per second-concurrentUploadLimitMB intlimit total concurrent upload size (default 128)-cpuprofile stringcpu profile output file-dataCenter stringcurrent volume server's data center name-dir stringdirectories to store data files. dir[,dir]... (default "/tmp")-dir.idx stringdirectory to store .idx files-disk string[hdd|ssd|<tag>] hard drive or solid state drive or any tag-fileSizeLimitMB intlimit file size to avoid out of memory (default 256)-idleTimeout intconnection idle seconds (default 30)-images.fix.orientationAdjust jpg orientation when uploading.-index stringChoose [memory|leveldb|leveldbMedium|leveldbLarge] mode for memory~performance balance. (default "memory")-ip stringip or server name, also used as identifier (default "172.19.0.16")-ip.bind stringip address to bind to-max stringmaximum numbers of volumes, count[,count]... If set to zero, the limit will be auto configured. (default "8")-memprofile stringmemory profile output file-metricsPort intPrometheus metrics listen port-minFreeSpace stringmin free disk space (value<=100 as percentage like 1, other as human readable bytes, like 10GiB). Low disk space will mark all volumes as ReadOnly.-minFreeSpacePercent stringminimum free disk space (default to 1%). Low disk space will mark all volumes as ReadOnly (deprecated, use minFreeSpace instead). (default "1")-mserver stringcomma-separated master servers (default "localhost:9333")-options stringa file of command line options, each line in optionName=optionValue format-port inthttp listen port (default 8080)-port.public intport opened to public-pprofenable pprof http handlers. precludes --memprofile and --cpuprofile-preStopSeconds intnumber of seconds between stop send heartbeats and stop volume server (default 10)-publicUrl stringPublicly accessible address-rack stringcurrent volume server's rack name-read.redirectRedirect moved or non-local volumes. (default true)-tcp<exprimental> enable tcp port-whiteList stringcomma separated Ip addresses having write permission. No limit if empty.
Description:start a volume server to provide storage spaces
2021.05.26
认识SeaweedFS命令
seaweedFS是根据Haystack来实现的,它有两大特性:
1、存储数以亿计的文件
2、访问文件非常快
之所以它能达到这两个特性,是因为所有文件的元数据metadata不存储在master节点,而是分散存储在volume(逻辑卷,存储数据的逻辑结构)中,master节点只保存volume信息
3、查看master服务的参数:
命令 | 类型 | 解释 |
---|---|---|
-cpuprofile | string | 输出cpu使用的统计信息 |
-defaultReplication | string | 默认的副本类型(默认为000) |
-disableHttp | 关闭http接口,只使用gRPC来访问 | |
-garbageThreshold | float | 回收空间的阈值(默认为0.3) |
-ip | string | master服务的ip地址,默认为localhost |
-ip.bind | string | |
-mdir | string | 存储内存使用的统计信息(默认“/tmp”) |
-memprofile | string | 输出内存使用的统计信息 |
-metrics.address | string | 性能指标统计工具的地址,seaweedFS使用prometheus来存储性能统计信息 |
-metrics.intervalSeconds | int | 性能统计信息推送的间隔时间 |
-options | string | 一个命令行选项文件,每一行的格式为optionName=optionValue |
-peers | string | 所有的master节点列表,比如127.0.0.1:9093,127.0.0.1:9094 |
-port | int | master服务监听的端口,默认为9333 |
-resumeState | 在启动服务器上恢复原来的状态 | |
-volumePrellocate | 为volumes预分配空间 | |
-volumeSizeLimitMB | 停止向超出大小限制的volume写入数据,默认为3000 | |
-whiteList | string | ip白名单,只有在白名单中的ip才拥有写入权限 |
4、查看volume服务参数
命令 | 类型 | 解释 |
---|---|---|
-compactionMBps | int | 以百万字节每秒为单位限制后台压缩或复制速度 |
-concurrentUploadLimitMB | int | 限制总并发上传大小(默认128) |
-cpuprofile | string | CPU配置文件输出 |
-dataCenter | string | 当前卷服务器的数据中心名称 |
-dir | string | 存放数据文件的目录。dir [dir]…(默认“/ tmp”) |
-dir.idx | string | 存放。idx文件的目录 |
-disk | string | [hdd |
-fileSizeLimitMB | int | 限制文件大小以避免内存不足(默认256) |
idleTimeout | int | 连接空闲秒数(默认30秒) |
image.fix.orientation | 上传时调整jpg的方向。 | |
index string 选择[memory | leveldb | leveldbMedium |
-ip | string | IP或服务器名,也用作标识符(默认"172.19.0.16") |
-ip.bind | string | 要绑定的IP地址 |
-max | string | 最大卷数,count [,count]…如果设置为零,将自动配置该限制。(默认“8”) |
-memprofile | string | 内存配置文件输出文件 |
-metricsPort | int | 普罗米修斯度量监听端口 |
minFreeSpace | string | 最小的空闲磁盘空间(值<=100为百分数,如1,其他为人类可读字节,如10GiB)。低磁盘空间将把所有卷标记为只读。 |
-minFreeSpacePercent | string | 最小可用磁盘空间(默认为1%)。低磁盘空间将把所有卷标记为只读(已弃用,请使用minFreeSpace代替)。(默认值“1”) |
-mserver | string | 逗号分隔的主服务器(默认"localhost:9333") |
-options | string | 一个命令行选项文件,每一行的格式为optionName=optionValue |
-port | int | HTTP监听端口(默认8080) |
-port.public | int | 公开的端口 |
-pprof | 启用pprof HTTP处理程序。排除—memprofile和—cpuprofile | |
preStopSeconds | int | 停止发送心跳和停止音量服务器之间的秒数(默认10) |
publicUrl | string | 公共可访问的地址 |
-rack | string | 当前卷服务器的机架名 |
-read.redirect | 重定向移动的或非本地卷。(默认正确) | |
-tcp | < experimental >启用TCP端口 | |
-whiteList | string | 逗号分隔有写权限的Ip地址。如果为空,则没有限制。 |
2021.05.27
在集群上启动seaweedFS
1、先检查集群上是否已经运行
ps aux | grep weed
结果:
root 17420 0.0 0.0 112728 972 pts/4 S+ 09:40 0:00 grep --color=auto weed
再检查下端口号
netstat -anp |grep 9333
2、分别在三台服务器上建立文件夹
mkdir -p ./seaweedfs/data ./seaweedfs/volume
此处学习一些Linux的命令,放于Linux的笔记中如:nohup、<、&等
2、启动master服务,分别在三台机器上启动
nohup ./weed master -ip=集群ip01 -port=9333 -mdir=./seaweedfs/data -peers=集群ip01:9333,集群ip02:9333,集群ip03:9333 > ./seaweedfs/data/master.log &
nohup ./weed master -ip=集群ip02 -port=9333 -mdir=./seaweedfs/data -peers=集群ip02:9333,集群ip01:9333,集群ip03:9333 > ./seaweedfs/data/master.log &
nohup ./weed master -ip=集群ip03 -port=9333 -mdir=./seaweedfs/data -peers=集群ip03:9333,集群ip01:9333,集群ip02:9333 > ./seaweedfs/data/master.log &
3、启动volume,分别在三台机器上启动
nohup ./weed volume -dataCenter dc1 -rack rack1 -dir ./seaweedfs/volume -ip=集群ip01 -port 9222 -ip.bind 集群ip01 -max 20 -mserver 集群ip01:9333,集群ip02:9333,集群ip03:9333 -publicUrl 集群ip01:9222 > ./seaweedfs/volume/volume.log &
nohup ./weed volume -dataCenter dc1 -rack rack1 -dir ./seaweedfs/volume -ip=集群ip02 -port 9222 -ip.bind 集群ip02 -max 20 -mserver 集群ip01:9333,集群ip02:9333,集群ip03:9333 -publicUrl 集群ip02:9222 > ./seaweedfs/volume/volume.log &
nohup ./weed volume -dataCenter dc1 -rack rack1 -dir ./seaweedfs/volume -ip=集群ip03 -port 9222 -ip.bind 集群ip03 -max 20 -mserver 集群ip01:9333,集群ip02:9333,集群ip03:9333 -publicUrl 集群ip03:9222 > ./seaweedfs/volume/volume.log &
4、打开http://集群ip01:9333/
文件操作
1、文件上传:先请求master,分配一个fid
curl http://集群ip01:9333/dir/assign
返回结果:
{"fid":"1,01da229ee5","url":"172.17.100.30:9222","publicUrl":"172.17.100.30:9222","count":1}
然后把test文件夹里的text文件上传上去,按照分配的fid上传
curl -F file=@./seaweedfs/test/test.txt 集群ip01:9222/1,01da229ee5
得到结果:
{"name":"test.txt","size":71,"eTag":"321d88cf6431a578fc8d586889275ff4","mime":"text/plain"}
2、也可以来操作删除
curl -X DELETE 集群ip01:9222/1,01da229ee5
3、解释说明:文件fid:1,01da229ee5
1
代表volume id,volume id 是一个32位无符号整型
01
代表file key,file key是一个64位无符号整型
da229ee5
代表file cookie,file cookie是一个32位无符号整型,用来防止文件url被解
每个数字都以16进制保存,因此如果要保存成字符串的话,需要8+1+16+8一共33个字节
4、查询,下载都要先查到id
wget 集群ip01:9222/1,01da229ee5
filer
filer是一个在SeaweedFS之上的服务,它保存路径与文件id的映射关系,最终还是使用文件id来访问文件。filer服务和master服务保持一个长连接,获取并保存volume的信息。这样就不用每次请求都去查询volume的信息。
读:
1.从数据库中查询路径的元数据
2.从volume服务中读取文件内容并发送给请求
写:
1.客户端将文件传输给filer
2.filer将文件上传到volume服务,大文件被分成多个块
3.filer将元数据和块的元数据信息写到数据库中
1、先查看filer配置文件
./weed scaffold -config=filer
2、配置文件有一些如存储方式的选择,先选一个,根据红框里的配置式样配置一个,先创建filer文件
cd seaweedfs/
touch filer.toml
ll
创建好后,开始配置
vi filer.toml
[leveldb2]
enabled = true
dir = "."
3、保存退出后,执行启动命令
./weed filer -master="集群ip01:9333" -ip=集群ip01
已经启动
4、试一下上传文件,不需要再去找分配的fid上传
curl -F file=@/opt/finished/seaweedfs/test/test2.txt http://集群ip01:9333/text/
结果:{"error":"strconv.ParseUint: parsing \"text\": invalid syntax"}
无效的语法
查看启动文件
修改:
curl -F file=@/opt/finished/seaweedfs/test/test2.txt http://172.17.100.30:8888/text/
{"name":"test2.txt","size":71}
以新的名称重命名上传后的文件
curl -F file=@/opt/finished/seaweedfs/test/test2.txt http://172.17.100.30:8888/text/new.txt
查看一下内容
curl "http://172.17.100.30:8888/text/new.txt"
文件内容正确,是我瞎写的一些字母:abcdefgaskldhgkasdjgalsd;gshkdgasd;hgwe;aoityawdgjs;adjgkjsd;ugtaoieutg
挂载
1、先建立一个挂载的文件夹
mkdir -p ./seaweedfs/data/mount
2、指定SeaweedFS挂载到新建的文件夹
./weed mount -filer=172.17.100.30:8888 -dir=./seaweedfs/data/mount -filer.path=/
3、上传文件
curl -F file=@/opt/finished/seaweedfs/test/abc.txt http://172.17.100.30:8888/text/
4、查看文件夹里
【数据存储】分布式文件系统SeaweedFS相关推荐
- 组件分享之后端组件——一个简单且高度可扩展的分布式文件系统seaweedfs
组件分享之后端组件--一个简单且高度可扩展的分布式文件系统seaweedfs 背景 近期正在探索前端.后端.系统端各类常用组件与工具,对其一些常见的组件进行再次整理一下,形成标准化组件专题,后续该专题 ...
- 计算机技术基础:计算机基本结构、运行内存、数据存储、文件系统、软件、操作系统
今天课程的主要内容分为计算机基本结构.运行内存.数据存储.文件系统.软件.操作系统与虚拟化技术等板块. 计算机基本结构 计算机一般这样工作:输入数据存入内存,通过CPU计算后,返回给内存. 计算机基本 ...
- 彻底理解大数据 HDFS 分布式文件系统,这篇就够了
来源:https://www.cnblogs.com/cainiao-chuanqi/p/11420490.html 文件系统的基本概述 文件系统定义:文件系统是一种存储和组织计算机数据的方法,它使得 ...
- mysql对存储分布式文件系统的存储需求总结
1. 引言 云原生数据库跟分布式mpp数据库是有差异的,虽然两者都是计算与存储分离,但是在资源的占用上有所不同.云原生数据库是shard everything架构,其依赖的存储资源.内存资源.事务资源 ...
- 文件存储相关概念:inode、 dentry、 数据存储、文件系统
f.hard 和 f.h为建立的硬链接 椭圆 代表磁盘 绿色为,重新建立的 inode (实现恢复数据的效果) inode: 其本质为结构体,存储文件的属性信息.如:权限.类型.大小.时间 ...
- 云存储及其分布式文件系统
转自: https://www.cnblogs.com/langren1992/p/5432517.html 随着信息化程度的不断提高,全球数据日益膨胀.面对当前PB级的海量数据存储需求,传统的存储系 ...
- 大数据基础——HDFS(分布式文件系统)
分布式文件系统--HDFS 文章目录 分布式文件系统--HDFS HDFS概述 HDFS发展历史 HDFS的设计目标 HDSF应用场景 适合的应用场景 不适合的应用场景 HDFS架构 HDFS的基本原 ...
- 分布式文件系统KFS基础知识介绍
Kosmos distributed file system,简称KFS,是一个类GFS的分布式文件系统,被设计用于分布式的结构化存储.下面将对KFS的体系结构进行简单介绍,最后给出一个使用KFS C ...
- 分布式文件系统(GFS和HDFS)概述
目录 背景意义 分布式存储相关概念 分布式存储系统的分类 复制副本 CAP理论 一致性 GFS架构 租约(lease)和变更顺序 容错机制 前言 因为我研一下学期有一门分布式的课,老师要求我们选择一个 ...
- 一文读懂什么是分布式文件系统
一文读懂什么是分布式文件系统 什么是分布式文件系统 一般文件系统 什么是分布式文件系统 分布式文件系统与一般文件系统的对比 什么是分布式文件系统 本篇来讲讲什么是一般文件系统,什么是分布式文件系统,以 ...
最新文章
- MQTT 协议 Client ID 长度不能超过23个字符
- 人工智能论坛、AI x Science 论坛和首席智行官大会
- 进阶第四课 Python模块之os
- python 反转列表的3种方式
- java 日期计算类_java日期计算工具类【包含常用的日期计算方法】
- String比较? 用==判断两个字符串,有时为true有时为false
- java方法的重载 编程题,java面试编程题:重载方法
- 1040. Longest Symmetric String (25)-PAT甲级真题
- IE, FF, Safari前端开发常用调试工具(转载)
- python win32api sendmessage_win32api win32gui win32con 窗口句柄 发送消息 常用方法
- Shottr 免费好用的Mac 截屏软件
- php多张图片下载(zip压缩)
- 开发部程序员绩效考核办法
- 【大学生软件测试基础】薪资管理制度 - 因果图 - 测试用例
- 密码管理方案之SafeInCloud+坚果云同步
- 商品详情页商品属性选择,包含多规格
- Java学习-ATM系统
- D和弦的音阶在尤克里里上应该怎么按?
- transition transform translate 之间的区别
- 玄幻:开局选择瑶池,我只想默默签到!(一)
热门文章
- java实现变声器--变声萝莉
- ENFJ型的人:什么样的人很适合人工智能方向
- React简介--尚硅谷react全家桶笔记总结
- 怎么架设魔兽世界服务器?
- 性能指标TP99介绍
- 神器vimium:比同级程序员成长更快,我主要靠它
- Qt中的forever是什么?
- 计算机网络网络适配器的作用是什么原因,Win10网络适配器在哪里对网络有什么影响 网络适配器出现各种故障的解决方法...
- 深度学习系列 -- 神经网络和深度学习(Neural Networks and Deep Learning)(一):深度学习引言以及神经网络编程基础
- 算法基础篇-05-排序-LowB三人组(冒泡/选择/插入排序)