假设情况:
- 设置一个具有 N 个节点的 cassandra 集群。
- 创建一个键空间并设置
replication_factor
为 1 并使用SimpleStrategy
。 - 添加一些数据。
- 移除 1 个节点。
这是否意味着现在有 1/N 的数据丢失?
答案1
对于读取请求,是的,这就是它的意思。对于 Cassandra,您通常不希望复制因子为 1(除非您有一个节点)。
更高的复制因子会给你更好的弹性,但决定行可用性的主要参数实际上是一致性级别(特定于查询)。
对于写入请求,即使缺少该行选定的目标,ANY 一致性级别也会使集群成为一种请求(因为它会尝试使用提示的切换稍后提交写入)。
答案2
您没有告诉我们如何删除节点,如果您使用 nodetool 命令,则节点上的数据将在删除之前发送到其他节点。因此您将保留您的数据。
看http://wiki.apache.org/cassandra/Operations#Removing_nodes_entirely
如果你的节点崩溃:
- 对于读取请求,您的数据将丢失
- 对于写请求:
- 对于网络故障等短暂问题,你的集群(每个请求的协调器)将使用 HintedHandoff 功能处理此节点的数据,直到它重新出现
- 对于较长时间或永久性的问题,您需要重新组织集群,以确保 1/N 以正确的方式运行,请参阅http://wiki.apache.org/cassandra/Operations#For_versions_1.2.0_and_above