卡桑德拉负载均衡与有序分区?

问题描述:

所以我在这里看到,Cassandra没有自动负载平衡,当使用有序分区器时它会进入视图(一组行的某些常见值范围将存储在相对较少的机器上,然后这些机器将服务大部分查询)。
What's The Best Practice In Designing A Cassandra Data Model?卡桑德拉负载均衡与有序分区?

我还是卡桑德拉的新手,它是如何工作的。如何避免这个问题,以便范围查询仍然有可能?我没有真正得到上面的答案(链接网址)关于追加散列键的想法。

+0

我在这个博客上找到了更多关于“在键盘上附加散列值”的详细信息 http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue

我认为这个问题最好在cassandra用户邮件列表上;那是人们的地方。

Cassandra没有自动负载均衡还有但它可能会在不太遥远的未来。 0.5分支现在可能有这个能力。

本质上,当你在一个已经运行的系统上引导一个节点时,它应该在环中寻找一个能够最好地平衡负载的地方,并把它放在那里。如果您一次添加一个节点(即等待一个节点在添加另一个节点之前完成自举),则应该可以很好地工作,前提是您的密钥分配不会随时间变化太多。

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

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

我将使用“分区”一词在这里指的是关键的一部分,你不想范围扫描

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

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

但是,如果您要扫描分区,那么您运气不好。

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

正如另一篇文章中提到的,Cassandra 0.5支持半自动负载平衡,您只需告诉节点负载均衡,并自动移动到令牌环上更繁忙的地方。

这是覆盖在http://wiki.apache.org/cassandra/Operations

+0

链接不再工作。它发送给我们一个页面,说这个文档被移动了,并且这个目的地把我们带到了文档的根目录......另外,我不明白你的意思是“告诉一个节点负载均衡”*。为什么我必须告诉任何人?!另外,目前还不清楚为什么你想迁移到一个更繁忙的地方,负载平衡通常是相反的。也许你可以尝试澄清? –

分区横跨簇数据由partitioner参数控制在cassandra.yaml

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

使用Murmur3Partitioner将生成行键随机散列码和执行负载平衡。

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

+0

请注意,这个问题在2009年Cassandra 0.5的时候提出了......这就是说,我同意分区器是通常期望负载平衡Cassandra集群的。 –