【问题标题】:Does all the nodes in cassandra cluster know the "partition key ranges" for each other?cassandra 集群中的所有节点是否都知道彼此的“分区键范围”?
【发布时间】:2015-01-07 18:56:10
【问题描述】:

假设我有一个具有以下方案的 cassandra 集群:

(76-100) Node1 - Node2 (0-25)
                 |      |
(51-75)  Node4 - Node3 (26-50)

每个节点主要负责一个范围的分区键:例如总范围为0-100,我在上面已经指明了节点负责的范围。

现在,假设节点 1 是协调器处理请求。分区键 28 对应的读取请求到达节点 1。

节点 1 如何知道节点 2 是分区键 28 的主节点。每个节点是否都有节点 ID 到它们负责的分区键的映射。 例如,

{Node1:76-100, Node2: 0-25, Node3: 26-50, Node4: 51-75}

当请求以循环方式转发时,此映射是否作为全局配置存在于所有节点中,因为任何节点都可以充当协调器?

谢谢

【问题讨论】:

    标签: cassandra-2.0 distributed-database nosql


    【解决方案1】:

    映射不作为全局配置存在。相反,每个节点都维护自己的集群中其他节点状态的副本。通常,集群将使用 gossip 协议频繁地与附近的几个节点交换有关集群中其他节点的信息。这样映射信息会迅速传播到集群中的所有节点,即使有数千个节点。

    每个节点都必须知道如何将分区键映射到令牌值,并知道哪个节点负责该令牌。这样一来,每个节点都可以充当协调器,通过将请求发送到正在处理该密钥的确切节点来处理任何请求。

    更进一步,例如,如果您使用当前的 java 驱动程序,您可以让客户端使用令牌感知路由策略。这由客户端驱动程序工作,还获取有关如何将键映射到节点的信息的副本。然后,当您发出请求时,它将直接发送到正在处理该密钥的节点。这提供了很好的性能提升。

    通常您不需要担心键是如何映射的,因为如果您使用 vnodes 和 Murmur3Partitioner,集群将负责创建键的映射,以在添加和删除节点时平衡整个集群的负载.

    【讨论】:

      猜你喜欢
      • 2014-08-28
      • 2018-03-02
      • 2023-03-19
      • 2017-05-20
      • 1970-01-01
      • 2019-09-07
      • 2016-07-21
      • 1970-01-01
      • 2017-10-27
      相关资源
      最近更新 更多