Cassandra 卡桑德拉部分复制

Cassandra 卡桑德拉部分复制,cassandra,replication,Cassandra,Replication,这是我对卡桑德拉4个数据中心的配置: create KEYSPACE mySpace WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1, 'DC3' : 1, 'DC4' : 1}; 在这种配置中(3partitioner+256个令牌),每个DC存储大约25%的密钥空间。这25%在每个DC上复制了3次。这意味着每一行总共有4个副本 例如,如果我的数据库太大,无法保存它的4个完整副本,我如何

这是我对卡桑德拉4个数据中心的配置:

create KEYSPACE mySpace WITH replication = {'class': 'NetworkTopologyStrategy', 'DC1' : 1, 'DC2' : 1, 'DC3' : 1, 'DC4' : 1};
在这种配置中(3partitioner+256个令牌),每个DC存储大约25%的密钥空间。这25%在每个DC上复制了3次。这意味着每一行总共有4个副本

例如,如果我的数据库太大,无法保存它的4个完整副本,我如何配置cassandra,使每个DC只复制一次或两次(而不是DC总数(x3))

例如:我只想在DC2上复制一次DC1上存储的25%的密钥空间。我不希望选择任何特定的DC进行复制,也不关心是否将25%的DC1拆分为多个DC1、2、3。我只想使用NetworkTopologyStrategy,但降低存储成本

可能吗

多谢各位
致以最诚挚的问候

您的keyspace命令显示每个DC持有一份数据副本。这意味着,如果每个DC中有1个节点,那么每个节点将拥有100%的数据。因此,我不确定您是如何得出结论,即每个DC只存储25%的密钥的,因为很明显,它们存储了100%。运行nodetool命令时,可能没有指定键空间,因此该命令会显示基于分配给每个节点的令牌范围的加载,这可能会误导网络拓扑设置。尝试使用您的键空间名称运行它,看看您是否注意到了差异

我不认为有一种方法可以使用任何现有的告密者以您想要的方式在DCs周围转移数据。如果您真的想要均匀分布,并且每个DC中的节点数量相等,初始令牌间隔均匀,那么可以使用SimpleSnitch来实现您想要的。您可以将Snitch更改为SimpleSnitch,并在每个节点上运行nodetool清理/修复。请记住,在此过程中,您将有一些中断,因为在SnitchChange之后,在修复工作完成之前,以前写入的密钥可能在某些节点上不可用

NetworkTopology的工作方式是,如果您说您有DC1:1,例如DC1中有2个节点,它将在2个节点上均匀分布密钥,从而在每个节点上产生50%的有效负载。考虑到这一点,我认为您真正想要做的是保留数据的3个副本,每个DC 1个。所以,你真的可以放弃一个DC,省钱。我之所以这么说,是因为我认为您拥有的这些DC在网络拓扑的概念中是虚拟的,而不是真正的物理DC,因为没有人希望在一个DC中只有25%的数据,因为这将不是一个可用的设置。因此,我建议如果将节点分组到虚拟DC中,则将它们分组到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: nd1-ra_1机架a nd1-rb_1机架b nd1-rc_1机架-c nd2-ra_2机架a nd2-rb_2机架b nd2-rc_2机架-c nd3-ra_3机架a nd3-rb_3机架b nd3-rc_3机架-c nd3-ra_4机架a nd3-rb_4机架b nd3-rc_4机架-c
在这种情况下,如果您将复制选项设置为DC1:3,则每个机架a、b和c将拥有100%的数据(每个机架中的每个节点占25%)。

是否为每个DC指定1个副本而不是3个副本?是的,我指定了,但使用NetworkTopologyStrategy,这意味着在任何DC上写入的每一行在此特定DC上都将有1个副本。