基本概念
master 存储映射关系,文件和fid的映射关系 weed master
Node 系统抽象的结点,抽象为datacenter、rack、datanode
datacenter 数据中心,包含多个rack,类似一个机房
rack :属于一个datacenter,类似机房中的一个机架
datanode : 存储节点,存储多个volume,类似机架中的一个机器 weed volume
volume :逻辑卷,存储needle
needle: 逻辑卷中的object,对应存储的文件
collection:文件集,默认所有文件都属于""文件集。如果想给某些文件单独分类,可以在申请id的时候指定相同的文件集
filer :指向一个或多个master的file服务器,多个使用逗号隔开。 weed filer
weed volume会创建一个 datanode ,可以指定所属的 datacenter rack和master ,会根据配置存储文件,默认一开始没有volume,当开始存储文件的时候才会创建一个volume,当这一个volume大小超过了volumeSizeLimitMB 就会新增一个volume,当volume个数超过了max则该datanode就不能新增数据了。那就需要在通过weed volume命令新增一个datanode。
启动一个master
weed master -ip -mdir -port -peers -defaultReplication -volumeSizeLimitMB -whiteList
weed volume -dir -max=100 -mserver -port -dataCenter -rack -whiteList
申请文件地址时可以指定dataCenter collection replication count
Basic Usage:
curl http://localhost:9333/dir/assign
{"count":1,"fid":"3,01637037d6","url":"127.0.0.1:8080",
"publicUrl":"localhost:8080"}
To assign with a specific replication type:
curl "http://localhost:9333/dir/assign?replication=001"
To specify how many file ids to reserve
curl "http://localhost:9333/dir/assign?count=5"
To assign a specific data center
curl "http://localhost:9333/dir/assign?dataCenter=dc1"
启动服务的方式
方式1
weed scaffold -config=filer -output=. 然后修改里面leveldb的目录
weed server -dir=./vtmp -master.port=9333 -master.dir=./mtmp -volume.max=5 -volume.port=9991 -filer -filer.port=8888 -master.volumeSizeLimitMB=10
-whiteList
-filer.dir 目录来存储元数据,默认为指定-dir的“filer”子目录
-master.volumeSizeLimitMB 默认最大30000000 (30G)
-master.dir用于存储元数据的数据目录,默认为与指定的-dir相同
方式2
weed master -port=9333 -mdir=./mtmp
weed volume -port=9991 -dir=./vtmp -max=100 -mserver=localhost:9333
weed scaffold -config=filer -output=.
weed filer -port=8888 -master=localhost:9333
volume个数和最大存储
默认最大7个,你可以设置100等等。。。
volume的备份机制 Replication
默认000 不备份
defaultReplication
000 不备份, 只有一份数据
001 在相同的rackj里备份一份数据
010 在相同数据中心内不同的rack间备份一份数据
100 在不同的数据中心备份一份数据
200 在两个不同的数据中心各复制2次
110 在不同的rack备份一份数据, 在不同的数据中心备份一次
如果数据备份类型是 xyz形式
各自的意义
x 在别的数据中心备份的份数
y 不相同数据中心不同的racks备份的份数
z 在别的服务器相同的rack的备份份数
filer的使用
直接往weed filer中拷贝目录或者文件(-include是文件模式通配符前使用??)
weed filer.copy nginxdir http://localhost:8888/aaa 把nginxdir拷贝到aaa目录下
weed filer.copy -include *.go . http://localhost:8888/github/
关于filer mount的问题
weed mount -filer=localhost:8888 -dir=~/wz/mdir(本地目录) -filer.path=/aaa(上传的filer中的目录)
weed mount 像访问本地目录一样访问文件系统,前提是开启了 master volume filer
(它使用bazil.org/FUSE,它允许在Linux和OSX上编写FUSE文件系统。在OSX上,它需要OSXFUSE)
weed mount -filer=localhost:8888 -dir=~/folder_on_seaweedfs -filer.path=/home/chris -collection=chris
weed mount -filer=localhost:8888 -dir=~/wz/mdir -filer.path=/aaa
关闭挂在需要关闭mount并且手动umont ~/wz/mdir目录,如果一般用户失败请使用root用户
数据备份
找一个磁盘充足的地方运行 备份某一个卷轴。如果id是一个不存在的卷轴不会在贝蒂创建任何文件,所有可以for循环一个很大的数来备份所有卷轴
weed backup -server=master:port -dir=. -volumeId=5
故障转移主服务器
主服务器通过Raft协议进行协调,以选出一个领导者。领导接手所有管理卷、分配文件id的工作。所有其他主服务器只是简单地将请求转发给leader。
如果领导人去世,将选举出另一位领导人。所有的卷服务器将把它们的心跳和卷信息一起发送给新的领导。新领导人将承担全部责任。
在转换过程中,可能会出现新领导对所有卷服务器都有部分信息的情况。这只是意味着那些还没有心跳的卷服务器暂时无法写入。
现在让我们按照通常的方式分别启动主服务器和卷服务器。
通常您会启动几个(3或5)主服务器,然后启动卷服务器:
weed master -port=9333 -mdir=./1 -peers=localhost:9333,localhost:9334,localhost:9335
weed master -port=9334 -mdir=./2 -peers=localhost:9333,localhost:9334,localhost:9335
weed master -port=9335 -mdir=./3 -peers=localhost:9333,localhost:9334,localhost:9335
now start the volume servers, specifying any one of the master server
weed volume -dir=./1 -port=8080 -mserver=localhost:9333,localhost:9334,localhost:9335
weed volume -dir=./2 -port=8081 -mserver=localhost:9333,localhost:9334,localhost:9335
weed volume -dir=./3 -port=8082 -mserver=localhost:9333,localhost:9334,localhost:9335
其他
一个场景:
如果本地已经有很多文件了,如何快速的迁移到seaweedfs中呢?
1.启动master、volume、filer
2.启动mount
3.手动拷贝到mount目录中(单线程的)
4.使用weed filer.copy file_or_dir1 [file_or_dir2 file_or_dir3] http://localhost:8888/path/to/a/folder/ (多线程且绕过fuse层)
aws s3 兼容
Each bucket is stored in one collection, and mapped to folder /buckets/
可以通过删除collection来快速删除一个bucket
异步复制
应该有两个SeawideFileSystems运行,可能跨数据中心运行。每个服务器都应该有自己的文件服务器、主服务器和卷服务器。
参考:https://blog.csdn.net/u012618915/article/details/83415955
经典论文翻译导读之《Finding a needle in Haystack: Facebook’s photo storage》:http://www.importnew.com/3292.html