TL; DR
如果副本节点出现故障并且新分区映射尚不可用,那么具有一致性级别= ALL的读取是否会失败?
示例:
鉴于此Aerospike群集设置:
- 3个物理节点:A,B,C
- 复制品= 2
- 读取一致性级别= ALL(读取请参阅保存数据的两个节点)
这一系列事件:
- 一条数据" DAT"存储在两个节点A和B中
- 节点B出现故障。
- B关闭后立即执行读取请求("请求1"),并保持一致性。
- 约1秒后,生成新的分区图。群集现在意识到B已经消失
- " DAT"现在变为在节点C复制(以保留副本= 2)
- 另一个读取请求("请求2")以一致性ALL执行。
说"请求2"是合理的。将会成功。
将"请求1"成功?会不会:
a)成功是因为尝试了两次读取,即使一个节点出现故障?
b)因为一个节点出现故障而失败,这意味着只有一个节点出现了#34; DAT"可以吗?
答案 0 :(得分:4)
请求1和请求2将成功。此处描述了一致性级别策略的行为:https://discuss.aerospike.com/t/understanding-consistency-level-overrides/711。
读/写一致性级别的要点是它们仅在群集中存在给定分区的多个版本时才适用。如果群集中只有一个给定分区的版本,那么无论一致性级别如何,读/写都只会转到单个节点。
时间流逝