【问题标题】:How to take backup of entire keyspace data from one node in cassandra irrespective of replication factor?无论复制因子如何,如何从 cassandra 中的一个节点备份整个键空间数据?
【发布时间】:2015-06-22 10:50:08
【问题描述】:

我在 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。解决方案是什么?我们不能不考虑复制因子从一个节点备份整个数据吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

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

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

    如果您必须恢复数据,选项一将需要大量工作,因为您需要执行完整的键空间读取才能找到丢失的键。

    在不可逆转的数据丢失的情况下,选项二会更容易。您只需对键空间进行修复即可。

    由于我不了解您的用例,因此无法给您建议,但在大多数故障情况下,Cassandra 可以自行恢复得相当好,并且您的应用程序停机时间最短甚至没有。

    经验法则是押注存储系统(使用 raid 或 JBOD)。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2020-01-01
        • 2013-11-10
        • 1970-01-01
        • 2017-01-01
        • 2014-11-26
        • 1970-01-01
        • 2016-06-23
        • 2016-08-04
        • 2017-03-22
        相关资源
        最近更新 更多