2014-01-27 61 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%)。