如何从cassandra中的一个节点备份整个密钥空间数据,而不考虑复制因素?

时间:2015-04-16 07:13:28

标签: cassandra

我在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。这是什么解决方案?无论复制因素如何,我​​们都无法从一个节点备份整个数据吗?

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的。至少自动备份是不行的。 你还有其他两个选择,但它们需要“额外的劳动力”:

  1. 创建一个RF = 1的侧面Keyspace,并将其备份到所有4个节点上(不需要自定义脚本,只需启用快照)。这样,您可以为这些备份设置第二个存储设置(在fstab中安装备份目录)。您将“每次写入两次写入”,因此请使用批量插入。
  2. 虽然您的副本位置逻辑是正确的,但您的结论却不是。您只需要支持任意两个节点,因为有4个节点且RF = 3,两个节点的每个组合将具有整个范围的键。您必须注意何时/如果您决定添加更多节点..
  3. 如果您必须恢复数据,选项一将需要大量工作,因为您需要执行完整的键空间读取才能找到丢失的密钥。

    在不可逆转的数据丢失的情况下,选项二将更容易。您只需要在键空间上运行修复。

    由于我不知道你的用例我不能给你一个建议,但在大多数失败的情况下,Cassandra自身恢复得很好,你的应用程序停机时间很短,没有停机。

    经验法则是赌注(使用raid或JBOD)。

答案 1 :(得分:0)

不幸的是,没有解决方案。通常,备份在所有节点上运行。