文章目录
1. Replication
SeaweedFS的存储层可以支持Replication,但不是以文件为粒度,而是以Volume为粒度来进行。
2. 如何使用
2.1 启动master服务,指定replication的类型
# 001 means for each file a replica will be created in the same rack
./weed master -defaultReplication=001
2.2 启动volume服务
-dataCenter
: 指定datacenter
-rack
: 指定机架
./weed volume -port=8081 -dir=/tmp/1 -max=100 -mserver="master_address:9333" -dataCenter=dc1 -rack=rack1
./weed volume -port=8082 -dir=/tmp/2 -max=100 -mserver="master_address:9333" -dataCenter=dc1 -rack=rack1
On another rack,
./weed volume -port=8081 -dir=/tmp/1 -max=100 -mserver="master_address:9333" -dataCenter=dc1 -rack=rack2
./weed volume -port=8082 -dir=/tmp/2 -max=100 -mserver="master_address:9333" -dataCenter=dc1 -rack=rack2
2.3 replication的类型有哪些
Value | Meaning |
---|---|
000 | 没有复制,只有一个副本 |
001 | 在同一个机架上复制一次 |
010 | 在同一个datacenter的不同机架上复制一次 |
100 | 在不同的datacenter复制一次 |
200 | 在不同的datacenter复制两次 |
110 | 在同一个datacenter的不同机架复制一次,在不同的datacenter复制一次 |
… | … |
所以replication类型可以归纳为xyz:
Column | Meaning |
---|---|
x | 不同数据中心的副本数 |
y | 相同数据中心不同机架的副本数 |
z | 相同机架不同服务器的副本数 |
x,y,z的取值可以为0,1,2。每一种复制类型会产生的volume副本数是 x+y+z+1
3. 指定datacenter分配file key
http://localhost:9333/dir/assign?dataCenter=dc1
4. Write and Read
在SeaweedFS中, 所有写入请求都是强一致性的,所有的副本写成功才算成功。只要有其中一个副本写失败,则正写入请求都是失败的。这使得读请求非常的快。
写入流程:
- 客户端向Master服务发送请求已获得fid
- Master服务根据请求的replication类型选择volumes服务器,返回给客户端
- 客户端把写请求发送到其中一个volume服务器并等待ACK信息
- volume服务器保存数据并按需把数据复制到其他的volume服务器
- 一切正常,客户端会受到“OK”的返回信息
5. 修改复制的类型
可以在weed shell
执行volume.configure.replication
来修改复制的类型。修改完之后,与复制类型不匹配的volume会变成只读的状态,执行volume.fix.replication
命令可使这些volume的副本数与复制类型一致。