我在cassandra集群中有4个节点。如果我将密钥空间的复制因子设置为4,那么从一个节点获取备份将保证备份整个数据。假设我将复制因子设置为2或3,那么备份一个节点将不会备份整个数据,而是仅备份其中存在的数据。例如,如果我有4个节点A,B,C,D和复制因子是3并假设数据分布如下,
node A: 1-10,11-20,21-30
node B: 11-20,21-30,31-40
node C: 21-30,31-40,1-10
node D: 31-40,1-10,11-20
现在,如果从节点A获取备份并恢复其他群集的数据,那么我将只获得记录1-10,11-20,21-30,但我将丢失记录31-40。这是什么解决方案?无论复制因素如何,我们都无法从一个节点备份整个数据吗?
答案 0 :(得分:1)
简短的回答是否定的。至少自动备份是不行的。 你还有其他两个选择,但它们需要“额外的劳动力”:
如果您必须恢复数据,选项一将需要大量工作,因为您需要执行完整的键空间读取才能找到丢失的密钥。
在不可逆转的数据丢失的情况下,选项二将更容易。您只需要在键空间上运行修复。
由于我不知道你的用例我不能给你一个建议,但在大多数失败的情况下,Cassandra自身恢复得很好,你的应用程序停机时间很短,没有停机。
经验法则是赌注(使用raid或JBOD)。
答案 1 :(得分:0)
不幸的是,没有解决方案。通常,备份在所有节点上运行。