【问题标题】:How DSE Spread Data?DSE如何传播数据?
【发布时间】:2019-08-28 18:31:23
【问题描述】:

我们将 DSE 与 Cassandra + Solr 结合使用。

我不确定它是如何传播数据的,假设我们有 6 个节点,复制因子为 3。

我们的平台使用全部6个节点来查询数据,我从6个节点中查询一个节点有可能会丢失数据吗?

或者,如果我想使用平台上的所有节点,我需要具有与我拥有的节点数相同的复制因子。

它是如何工作的?

【问题讨论】:

  • Cassandra 中的数据分布基于 RF,但 Solr 数据基于 Shards 跨节点分布。所以大部分分片分布在所有节点上,唯一的原因是快速检索 Solr 索引数据。

标签: solr cassandra datastax-enterprise cassandra-2.0


【解决方案1】:

在 Cassandra 中,每个节点都存储部分数据。当您构建集群时,每个节点都将负责数据的特定部分。这是根据分配给该节点的令牌值决定的。现在,当您插入或选择数据时,每个插入或选择都会有一个分区键。根据该分区键计算哈希值,并将数据发送到负责该特定令牌值的节点。

如果有 6 个节点并且 RF =3,那么在集群内您有 3 个完整数据的副本。基于上述概念存储主副本。副本将根据您在创建密钥空间时指定的复制类进行存储。如果您采用SimpleStrategy,它将按顺时针方向将副本存储在下一个节点上,即node1 的副本将存储在node2 和node3 上,node2 的副本将存储在node3 和node4 上,依此类推。

如果您从一个节点查询,则根据分区键,查询将被发送到负责该分区键的特定节点。要知道您的查询将发送到哪个节点,您可以使用 nodetool 实用程序。

nodetool getendpoints <keyspace> <table> <key> 

这将为您提供将发送查询以获取结果的节点 Ip

【讨论】:

    【解决方案2】:

    如果您有 6 个节点和 RF 3,则意味着您的 cassandra 集群中存在 3 个数据副本。数据可用性还取决于一致性级别。如果您使用 ONE 一致性并且 2 个节点关闭,那么也将获取数据并且不会丢失,但如果使用 TWO、QOURAM、THREE 或 ALL 一致性,那么情况会有所不同。

    【讨论】:

    • 但是我怎么知道数据在哪里呢?从哪个节点获取 Cassandra 传播的数据。
    • 为此,您可以使用 TRACING ON 进行查询,并会得到跟踪日志。
    • 所以我需要提前知道我的数据在哪里?
    • 数据是基于 cassandra 中的哈希分布的,因此当您插入数据时,只需启用跟踪检查跟踪日志。
    • 它是无主的,将它发送到任何节点,它就会去它需要的地方。如果您真的希望驱动程序将其发送到正确的副本,只需在驱动程序中使用令牌感知负载平衡策略,它会自动为您完成。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2016-09-25
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2019-08-23
    相关资源
    最近更新 更多