1

我在谷歌云上有两个Datastax群集(两个不同的帐户)。两个群集都有不同的密钥空间(数据)。结合Google云上的两个Datastax群集

我想组合两个集群,并且希望利用两个集群节点以及处理负载。

我不想导入/导出数据。由于这两个集群都很小,无法处理负载(想要集群并利用节点来处理负载)。

无论如何,我们可以做到这一点,无论是集群在云或不是?

谢谢,

回答

2

这是可行的,但棘手。

Cassandra根据集群名称知道哪些节点是集群的一部分。如果您的集群名称对于两个集群都不相同,那么第一步就是将您的集群重命名为具有相同的名称。

第二步是将一个群集作为父群集,您将在其中加入其他节点。我们称之为父集群,另一个称为加入集群。在此步骤中,将加入群集中存在的密钥空间和列族定义为与父群集相同。在此阶段,您的父群集具有密钥空间定义但没有来自加入群集的数据。另一方面,在连接群集中,您将不得不以同样的方式定义父群集上存在的密钥空间。

两个集群中的节点都必须具有公共接口才能进行通信。我不确定Google Cloud是如何实现的,但我相信您可以在两个帐户中为您的实例提供公共接口。然后,您将这两个集群视为Cassandra概念中的两个不同数据中心,一旦所有计算机都可以彼此访问Cassandra端口,请在每个集群上更改cassandra.yaml并将其他集群的节点添加到其中。如果您使用属性文件管理器来管理复制,则还需要更新它,以便它可以识别所有节点及其位置。

最后,执行滚动重新启动并更改密钥空间复制因子以按照需要的方式进行复制。

更新: 为Daniel Compton的观点添加了一个说明,即启用公共接口时,您需要正确设置公用接口之间复制的加密,并将对这些公共接口的访问限制为仅限于所有cassandra的IP节点。

重命名群集是可能的,我已经行使了这个谁曾经处理过一次。

要重命名群集,请在cassandra.yaml中更改群集名称。然后更改每个节点上的system.local表以反映该更改并执行滚动重新启动。重命名集群的细节可以在这里找到:

cassandra - Saved cluster name Test Cluster != configured name

+0

请记住,如果您将公共接口提供给Cassandra节点,那么它们将可公开访问。你可以做http://thelastpickle.com/blog/2015/09/30/hardening-cassandra-step-by-step-part-1-server-to-server.html,但最好让这两个项目访问其他资源。 –

+0

这个答案是高度怀疑的。 “第一步是将你的群集重命名为” - 你如何建议用户这样做?我坚信,建议实际上是可能的。 –

+0

谢谢你们两位。我更新了答案以反映您的意见。 – Arya

1

你不能用不同的名字,不同的模式连接两个集群在一起。坏事会发生。你需要做的是从一个备份数据,在另一个数据库中创建密钥空间,使用'sstableloader'流入数据,然后在事实之后引导新节点。

因为您使用的是云,最简单的选择是临时将几个节点添加到新集群,流入数据,然后删除旧节点/集群。试图变得聪明并且合并集群将会比它的价值更加痛苦。

如果您使用的是裸机,并且不想花钱购买更多硬件,您可能会变得聪明,但在云端没有真正的理由这么做。