我的Cassandra集群由2个DC组成,每个DC有5个节点,每个DC的复制因子为3。两个DC都托管在同一个docker编排器上。这是一个遗留问题,可能是在几年前的最后一次主要系统迁移期间完成的。目前,我看不出具有相同复制因子3的2个DC有什么好处。这样,相同的数据被写入6次。群集至少有80%的写入量,读取或多或少受到限制。
Cassandra负载在高峰期很困难,所以我希望有1个DC和10个节点(而不是2DC x 5 ndoes),以便能够在10个节点之间平衡,而不是仅仅5个节点。这样,我还可以降低每个节点的数据大小。有相同数量的RAM和CPU专用于Cassandra,我将赢得性能和免费存储空间;-)
所以,我们的想法是停用DC2,并将其中的所有5个节点作为全新节点引入DC1。已知步骤:
1.将密钥空间更改为仅限于DC1。
1.没有客户端写入/读取DC2-使用本地的DCAware策略_*
1.我想知道下一步是什么-它说我需要开始逐个节点停用DC2。这是强制性的,还是我可以以某种方式将这些节点关闭?目标不是退役DC中的一些节点,而是所有节点。如果我退役,比如说node5,数据将被传输到剩余的4个节点,以此类推。在某个时刻,我将剩下3个节点和复制因子3,因此我将无法再退役。更重要的是,我猜这些节点卷上没有空闲空间,我不愿意再扩展这些空间。
所以我的问题是:
1.是否有一种方法可以将密钥空间仅更改为DC1,然后只需关闭所有DC2节点,擦除卷并将它们逐个添加到DC1,扩展DC1?基本上是一次性停用所有DC2节点?
1.是否有一种方法可以更快地将这5个DC2节点移动到DC1(最后,它们包含与DC1中的5个节点相同的数据)?就像将它们与它们包含的所有数据连接到DC1一样?
1.在单个集群中有2个DC,而不是有一个具有双倍节点的DC,有什么好处?或者它强烈地取决于使用情况以及服务从Cassandra写入和读取数据的方式?
谢谢你的回复。
干杯,OvivO
1条答案
按热度按时间hpcdzsge1#
有没有办法只将密钥空间更改为DC1,然后将所有DC2节点关闭,擦除卷并将它们逐个添加到DC1,从而扩展DC1?基本上是一次性停用所有DC2节点?
是的,您可以调整密钥空间定义,使其仅在DC1中进行复制。因为您基本上是在删除一个DC,所以可以关闭它们,并为每个DC运行
nodetool removenode
。从理论上讲,这将从八卦中删除节点,并且(如果它们关闭了)不会尝试移动数据。然后,将每个节点添加回DC1,一次一个。完成后,在每个节点上运行修复,然后运行nodetool cleanup
。有没有一种方法可以更快地将这5个DC2节点移动到DC1(最后它们包含与DC1中的5个节点相同的数据)?就像将它们与它们包含的所有数据连接到DC1一样?
否。令牌范围分配取决于DC。如果它们移动到新的DC,它们的范围分配将发生变化,节点很可能负责不同的数据范围。
在单个集群中有2个DC,而不是有一个具有双倍节点的DC,有什么好处?
地理意识。如果你在西海岸和东海岸都有一个移动应用程序和用户,你不希望东海岸的用户一路呼叫西海岸的数据。您希望数据调用尽可能在本地进行。所以,你应该在每个海岸建立一个DC,让Cassandra保持它们的同步。