Cassandra负载均衡与有序分区器?

时间:2009-11-20 01:35:43

标签: cassandra

所以我在这里看到Cassandra没有自动负载平衡,这在使用有序分区器时会被看到(一组行的某些常见值范围将存储在相对较少的机器上,然后这些机器将服务于大多数(查询) What's The Best Practice In Designing A Cassandra Data Model?

我还是Cassandra的新手以及它是如何运作的。如何避免这个问题,以便仍然可以进行范围查询?我没有真正得到关于向键附加哈希的上述答案(链接网址)。

3 个答案:

答案 0 :(得分:8)

正如另一篇文章所述,Cassandra 0.5支持半自动负载均衡,你需要做的就是告诉节点负载均衡,它会自动移动到令牌环上更加繁忙的地方。

http://wiki.apache.org/cassandra/Operations

中介绍了这一点

答案 1 :(得分:4)

我认为这个问题最好在cassandra-user邮件列表中使用;这就是人们所在的地方。

Cassandra没有自动负载平衡但是但它可能在不久的将来也会这样做。 0.5分支现在可以做到这一点。

基本上当你在已经运行的系统上引导一个节点时,它应该在环中找到一个最佳负载平衡并放在那里的点。如果您一次添加一个节点(即等待一个节点在添加另一个节点之前完成引导),这应该可以正常工作,前提是您的密钥分发不会随着时间的推移而发生太大变化。

但是,您的密钥可能会随着时间而变化(特别是如果它们是基于时间的),因此您可能需要一种解决方法。

这取决于您想要扫描范围。如果您只需要扫描密钥的 PART 范围,则可以散列您不想进行范围扫描的位,并将其用作密钥的第一部分。

我在这里使用术语“分区”来指代您不想扫描范围的键部分

function makeWholeKey(partition, key) {
   return concat(make_hash(partition), partition, key);
}

现在,如果您想要扫描给定分区中的键,您可以在makeWholeKey(p,start)和makeWholeKey(p,end)之间进行范围扫描

但是如果你想扫描分区,那你就不走运了。

但是你可以让你的节点拥有均匀分布在make_hash()输出范围内的令牌,并且你将得到均匀分布的数据(假设你有足够的分区,并不是所有的分区都聚集在一两个哈希值)

答案 2 :(得分:1)

跨群集对数据进行分区由partitioner中的cassandra.yaml参数控制:

partitioner: org.apache.cassandra.dht.Murmur3Partitioner

使用Murmur3Partitioner将为Row Key生成随机哈希码并执行负载平衡。

使用Cassandra 2.0,您可以在单个服务器中存储多个令牌(256),这也有助于负载平衡。使用OrderPreservingPartitioner并不推荐使用是不太好的做法。