【问题标题】:Cassandra cqlsh connecton and data insertion through copy command?Cassandra cqlsh 连接和通过复制命令插入数据?
【发布时间】:2020-12-17 02:39:52
【问题描述】:

我有一个带有 5 节点 cassandra 集群的单一数据中心正在运行。我创建了一个 RF=3 和简单策略的键空间。我需要澄清以下几点-

  1. 使用 nodetool getpoints 可以告诉我们的数据物理存储在哪个节点上。所以我知道我的数据存储在节点 2、3、4 上。但我仍然可以在每个节点上看到各自的 sstable 和 *.db 文件。因此,如果数据物理存储在节点 2、3、4 上,那么为什么它也会显示在节点 0、1 上??

  2. 通过 cqlsh 客户端连接后,一致性命令显示 ONE 作为默认一致性级别。所以我现在的理解是,如果我将通过复制命令执行任何读取或写入,将作为一致性 ONE 执行。因此,如果我一次关闭三个或四个节点,除了来自 2、3、4 的一个节点,它会对客户端连接(cassandra 读取或写入查询)有任何影响吗??

请让我知道这一点,以便更好地理解 cassandra 的概念??

【问题讨论】:

    标签: cassandra cqlsh


    【解决方案1】:
    1. Cassandra 根据特定分区键的哈希值(通常称为token)和副本数将数据分发到集群的所有节点,因此值为 1 的 PK 将开启节点 (3,4,5),节点 (5, 1, 2) 上的值为 2 等。nodetool getendpoints 为您提供具有特定分区键的行的位置,而不是所有数据。您可以在以下blog post 中阅读更多相关信息。

    2. CL ONE 意味着我们只需要从数据的一个副本确认读取或写入操作(您有三个副本,因为 RF=3)。写入总是发送到所有副本,但如果只有一个成功回答,我们确认操作。对于您的具体问题 - 在您的情况下,您可以容忍丢失负责特定分区键的 2 个节点。

    我建议至少阅读 Cassandra: The Definitive Guide, 3rd edition 的第一部分 - 它是来自 DataStax 的freely available。或者阅读DataStax Enterprise Architecture Guide - 它也涵盖了 Cassandra 的架构。

    附:我建议使用DSBulk utility 而不是使用复制命令——它在加载或卸载数据(尤其是大量数据)时针对性能进行了高度优化,并且更加灵活。

    【讨论】:

    • 谢谢亚历克斯!!仍然来到问题1,一旦我们使用分区键创建表并了解其数据存储在节点(3,4,5)以及当我通过创建任何一个节点(3,4,5)来查询此表时)下来,客户端连接被终止..如前所述,我正在查询具有一致性 1 的表。错误:没有足够的副本可用于以一致性 ONE 查询(需要 1,但只有 0 活着)。它启用了 SSL 的集群。让我知道这里出了什么问题。
    • 如果您从cqlsh 执行此操作,那么它就是这样工作的——它只连接到提供的节点,并通过它工作。在应用程序中,驱动程序应自动处理重新路由。您还可以在驱动程序中启用自动重试,以避免此类事情
    • 谢谢!!我通过外部 cqlsh 客户端连接,能够找出问题所在。非常感谢您的回复和时间。
    猜你喜欢
    • 2018-08-12
    • 2014-12-18
    • 2015-04-25
    • 2013-10-04
    • 2016-06-24
    • 2015-02-05
    • 2016-03-14
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多