2014-01-27 66 views
0

這是我卡桑德拉4個數據中心配置:卡桑德拉部分複製

create KEYSPACE mySpace WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1, 'DC3' : 1, 'DC4' : 1}; 

在這種構造中(Murmur3Partitioner + 256個標記),每個DC被存儲密鑰空間的大約25%。而這25%在對方DC上重複3次。意思是每一行總共有4個副本。例如,如果我的數據庫很大以保留它的4個完整副本,如何配置cassandra以便每個DC只複製一次或兩次(而不是DC的總數(x3))。

例如:存儲在DC1上的25%密鑰空間我只想在DC2上覆制一次。我不想選擇任何特定的DC進行復制,我也不關心是否將25%的DC1分配到多個DC1,2,3我只想使用NetworkTopologyStrategy,但是可以降低存儲成本。

可能嗎?

謝謝 問候

+0

是不是你爲每個DC指定1個副本而不是3個? –

+0

是的,我這樣做,但是使用NetworkTopologyStrategy,這意味着在任何DC上寫入的每行都將在此特定DC上具有1個副本。 – kirbo

回答

1

你的密鑰空間命令顯示每個區議會的保存數據的1份。這意味着如果每個DC中有1個節點,那麼每個節點將擁有100%的數據。所以,我不確定你是如何得出結論的,即你的每個DC只能存儲25%的密鑰,因爲它們顯然是100%存儲的。很可能當您運行nodetool命令時,您並未指定密鑰空間,因此命令會顯示您加載的是基於分配給每個節點的令牌誤差範圍,這會對NetworkTopology設置產生誤導。嘗試使用您的密鑰空間名稱來運行它,看看您是否注意到了不同之處。

我不認爲有一種方法可以按照您希望的方式使用任何現有的Snit切換數據。如果你真的想要均勻分佈,並且每個DC中的節點數量相同,並且初始令牌間隔均勻,那麼可以使用SimpleSnitch來實現你想要的。您可以將Snitch更改爲SimpleSnitch,並在每個節點上運行nodetool清理/修復。請記住,在此過程中,您將會發生一些中斷,因爲在SnitchChange之後,在修復作業完成之前,先前寫入的密鑰可能無法在某些節點上使用。

NetworkTopology的工作方式是,如果你說你有DC1:1,並且你有例如DC1中的2個節點,它將在2個節點間平均分配密鑰,導致每個節點的有效負載達到50%。考慮到這一點,我認爲你真正想要做的就是保留3份數據,每份數據1份。所以,你真的可以放棄一個區議會,省錢。我這樣說是因爲我認爲這些DC在虛擬網絡拓撲的概念中是虛擬的,而不是真正的物理DC,因爲沒有人希望在一個DC中只有25%的數據,因爲它不會成爲可用的設置。所以,我建議,如果您的節點分爲虛擬DCS,您分組到4個機架,而不是和維護1個DC:

 
DC1: 
nd1-ra_1 rack-a 
nd1-rb_1 rack-b 
nd1-rc_1 rack-c 

nd2-ra_2 rack-a 
nd2-rb_2 rack-b 
nd2-rc_2 rack-c 

nd3-ra_3 rack-a 
nd3-rb_3 rack-b 
nd3-rc_3 rack-c 

nd3-ra_4 rack-a 
nd3-rb_4 rack-b 
nd3-rc_4 rack-c 

在這種情況下,如果您的複製選項設置爲DC1:3,每個機架a,b和c將有100%的數據(每個機架中的每個節點爲25%)。