来自 Riak 官方文档:“在 Riak CS 系统中,任何节点都可以响应客户端请求 - 没有主节点,每个节点都具有相同的职责。由于数据是复制的(默认情况下每个对象有三个副本),并且其他节点会自动接管发生故障或无法通信的节点的职责,因此即使发生节点故障或网络分区,数据仍然可用。”
是否有经验表明每个对象三个副本会带来一些优势(速度、安全性)或者使用没有副本的 Riak 是否可以(占用更少的空间)?
答案1
即使副本数为 0,Riak 仍会顺利地保存您的所有数据,但是关闭一个节点(进行维护)将导致部分数据不可用,而丢失一个节点将导致数据丢失。
想象一下以下场景(假设戒指尺寸为 5)
5 个节点 riak,3 个副本
- 节点1
- 数据1
- 数据2
- 数据5
- 节点2
- 数据2
- 数据3
- 数据5
- 节点3
- 数据1
- 数据3
- 数据4
- 节点4
- 数据2
- 数据4
- 数据3
- 节点5
- 数据1
- 数据4
- 数据5
如果节点 3 关闭,所有数据仍可在另外 2 个节点上使用。所有内容仍可读取或写入,当节点恢复时,更改将根据需要转移。
5 个节点的 riak,0 个副本
- 节点1
- 数据1
- 节点2
- 数据2
- 节点3
- 数据3
- 节点4
- 数据4
- 节点5
- 数据5
在这种情况下,如果节点 3 关闭,其上的所有数据都将变得不可用,如果节点完全丢失,数据也会丢失。
Basho 有相当好的文档,但这是一个很好的起点http://basho.com/posts/technical/understanding-riak_core-handoff/