2009-11-20 45 views
6

所以我在這裏看到,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

回答

4

我認爲這個問題最好在cassandra用戶郵件列表上;那是人們的地方。

Cassandra沒有自動負載均衡還有但它可能會在不太遙遠的未來。 0.5分支現在可能有這個能力。

本質上,當你在一個已經運行的系統上引導一個節點時,它應該在環中尋找一個能夠最好地平衡負載的地方,並把它放在那裏。如果您一次添加一個節點(即等待一個節點在添加另一個節點之前完成自舉),則應該可以很好地工作,前提是您的密鑰分配不會隨時間變化太多。

但是,您的密鑰可能會隨時間而改變(尤其是如果它們是基於時間的話),因此您可能需要一種解決方法。

這取決於你想要進行範圍掃描。如果您只需要掃描密鑰的部分,則可以散列您不想進行範圍掃描的位,並將其用作密鑰的第一部分。

我將使用「分區」一詞在這裏指的是關鍵的一部分,你不想範圍掃描

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

現在,如果你想的範圍給定分區中掃描鍵,您可以在makeWholeKey(p,start)和makeWholeKey(p,end)之間進行範圍掃描

但是,如果您要掃描分區,那麼您運氣不好。

但是你可以讓你的節點擁有均勻分佈在make_hash()輸出範圍內的標記,並且你會得到均勻分佈的數據(假設你有足夠的分區,它並不都聚集在一個分區上,或者兩個哈希值)

8

正如另一篇文章中提到的,Cassandra 0.5支持半自動負載平衡,您只需告訴節點負載均衡,並自動移動到令牌環上更繁忙的地方。

這是覆蓋在http://wiki.apache.org/cassandra/Operations

+0

鏈接不再工作。它發送給我們一個頁面,說這個文檔被移動了,並且這個目的地把我們帶到了文檔的根目錄......另外,我不明白你的意思是「告訴一個節點負載均衡」*。爲什麼我必須告訴任何人?!另外,目前還不清楚爲什麼你想遷移到一個更繁忙的地方,負載平衡通常是相反的。也許你可以嘗試澄清? –

1

分區橫跨簇數據由partitioner參數控制在cassandra.yaml

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

使用Murmur3Partitioner將生成行鍵隨機散列碼和執行負載平衡。

使用Cassandra 2.0,您可以在單個服務器中存儲多個令牌(256),這也有助於負載均衡。使用OrderPreservingPartitioner並不推薦使用。

+0

請注意,這個問題在2009年Cassandra 0.5的時候提出了......這就是說,我同意分區器是通常期望負載平衡Cassandra集羣的。 –