【问题标题】:Cassandra 3.11 SSTableLoader mechanicsCassandra 3.11 SSTableLoader 机制
【发布时间】:2019-03-16 01:28:40
【问题描述】:

我一直在使用 SSTableLoader 实用程序在两个不同的 Cassandra 集群之间批量传输数据,我想知道是否有其他人遇到过同样的问题。源集群有数据,目的地没有。

我已阅读有关实用程序详细信息的 datastax 页面,但我仍然对它的工作原理有一些未解答的问题。

我在源集群的活动节点上使用该实用程序,命令遵循以下格式:

sstableloader -d target.host.ip -v -f /etc/cassandra/cassandra.yaml /cassandra/data/keyspace1/table1-uuid

两个集群都设置有 256 个 vnode,每个集群中有 6 个节点。两种环境中的架构都是 RF = 3,并且表的结构都相同。

所以我的问题如下:

1) 该实用程序从您指定的 cassandra.yaml 中提取源集群信息,但您仍然必须指定 SSTables 的绝对路径。那么从单个节点运行 SSTableLoader 是否会在完成后给我整个目标表?由于目标集群的令牌范围不同,因此似乎很难验证。

2) 数据税信息说:

要从 SSTable 加载中获得最佳吞吐量,您可以使用多个 sstableloader 的实例跨多台机器流式传输。不难 sstableloader 可以运行的 SSTable 数量存在限制 同时,所以你可以添加额外的装载机,直到你看到没有 进一步改进。

这是否意味着对于单个表,我将跨多个源计算机启动多个 SSTableLoader 实例?还是仅仅意味着我可以在多台机器上同时对多个不同的表使用 SSTableLoader。我试图了解他们提到的吞吐量增益是针对单个表还是针对多个正在运行的表。

3) 需要修改哪些语法才能从快照运行?我拍摄了一个快照并通过运行相同的命令进行了测试,但进一步深入到表的快照目录中,它没有正确解析它说“快照”是一个无效的键空间。

无论如何,谢谢希望我的问题足够清楚。

【问题讨论】:

    标签: cassandra datastax cassandra-3.0 scylla


    【解决方案1】:

    1) 如果您的 RF=3 并且您的集群有 3 个节点,则每个节点都保存 ALL 数据。由于尚未传播到所有副本的更新,仍然可能会有一些细微的变化。如果集群中的节点数量大于 RF(您的情况是 6 个节点,RF=3),则每个节点都拥有 50% 的数据组合(不同的令牌范围)。 无论如何,您需要在从每个源节点到新集群的目标节点的所有键空间 + 表上运行 sstableloader(假设比例为 1:1)。

    2) 是的,您可以在同一个表/键空间上从每个源节点运行多个 sstableloader,并行匹配目标节点。但这也意味着您可以为不同的键空间/表执行此操作,只要最终您从所有键空间/表的所有源节点到它们匹配的目标节点执行它(假设比例为 1:1)。

    3) 从备份(快照)恢复是一个不同的过程,它不涉及使用sstableloader。你可以阅读更多关于它的信息here

    还有一个选项可以使用nodetool refresh 将所有源节点的 sstables 加载到新的目标节点,但仅当 num_nodes=RF 时才应使用它。阅读更多关于它的信息here

    【讨论】:

    • 谢谢,这确实有道理。此外,您知道 -d 参数必须采用什么格式才能指定多个目标主机 ip?我用逗号尝试了一个简单的 ip、ip、ip 列表,但它不接受。虽然 datastax 文档并不比这更具体... sstableloader -d host_url (,host_url ...) [options] path_to_keyspace
    • sstableloader 应该从 1 个源节点运行到 1 个目标节点。如果要运行多个实例,则必须是sstableloader 的多个进程,从同一个源节点每个用于不同的表到不同的单个目标节点。
    • 好的最后一个问题,有没有一些公式或方法来确定您需要运行的最小节点数?如您所说,在集群大小为 6 和 RF = 3 时,即每个节点上 50% 的数据。在 3 上运行它不能保证获得至少 1/3 的副本吗?然后从那里修复目标集群?要求这样做的速度。尤其是当您的集群变得超过 20 个节点时
    • 我不明白您关于“在 3 上运行”的说法 - 3 什么? RF=3 的 3 个节点,每个节点保存所有数据。对于生产,集群中至少需要 3 个节点。如果我不明白,请澄清。
    • 这里有几个假设: 1. 源集群中的数据已完全同步 - 完全修复,在您开始迁移到目标集群之前,没有新的写入。 2. 假设 item-1 没问题:你可以做 num_nodes_in_cluster - (RF-X=1)。例如对于 6 节点集群,RF=3,你应该可以从 4 个节点运行它。 3. sstableloader 默认以 CL(一致性级别)ONE 运行,因此 sstableloader 的数量多于最小值,是另一种冗余故障安全机制。 4. 在多 DC 设置中,如果 DC-2 是 DC-1 的副本,则根本不需要从 dc-2 运行 sstableloader(假设 DC 完全同步)。
    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 1970-01-01
    • 2022-01-14
    • 2016-03-25
    • 2011-10-13
    相关资源
    最近更新 更多