我有两台服务器,分别安装了cassandra,每个节点都有自己的表,它们的复制因子都是1。所以现在我想把这两个服务器连接到一个集群。我能保存数据和管道吗?你能给个建议吗?
yebdmbv41#
您不能以“联机”方式执行此操作,因为它们实际上属于两个不同的群集,具有自己的群集id等。您可以使用以下方法执行此操作(根据数据量,在此列表中,“群集2”是数据较少的节点):停止所有使用群集2的应用程序复制集群2的模式,例如 cqlsh -e 'describe schema;' > schema.cql 使用关闭群集2节点 nodetool drain 首先(必需!),然后执行停止将数据目录的内容移到其他地方,确保没有遗留旧数据(还要检查提交日志、提示等)修改cluster 2节点的配置-将cluster name设置为cluster 1 name,指向cluster 1节点作为种子(非常重要,不要使用cluster 2节点作为种子!)启动集群2的节点-它将启动加入集群1并从中流式传输数据的过程节点2之后显示为 UN 在 nodetool status ,您可以开始复制数据:如果集群2有不同结构的键空间和表,那么使用第一步中保存的模式手动创建它们。如果表具有相同的名称,但结构不同,如不同的字段类型、主键等,请为它们创建新表,如下所示 sstableloader 无法将数据流传输到具有不同结构的表使用sstableloader从集群2节点的已保存数据目录流化数据另一种方法可能类似-先将数据流传输到集群1的节点,然后擦除集群2上的数据目录,并将其加入。。。
cqlsh -e 'describe schema;' > schema.cql
nodetool drain
UN
nodetool status
sstableloader
1条答案
按热度按时间yebdmbv41#
您不能以“联机”方式执行此操作,因为它们实际上属于两个不同的群集,具有自己的群集id等。您可以使用以下方法执行此操作(根据数据量,在此列表中,“群集2”是数据较少的节点):
停止所有使用群集2的应用程序
复制集群2的模式,例如
cqlsh -e 'describe schema;' > schema.cql
使用关闭群集2节点nodetool drain
首先(必需!),然后执行停止将数据目录的内容移到其他地方,确保没有遗留旧数据(还要检查提交日志、提示等)
修改cluster 2节点的配置-将cluster name设置为cluster 1 name,指向cluster 1节点作为种子(非常重要,不要使用cluster 2节点作为种子!)
启动集群2的节点-它将启动加入集群1并从中流式传输数据的过程
节点2之后显示为
UN
在nodetool status
,您可以开始复制数据:如果集群2有不同结构的键空间和表,那么使用第一步中保存的模式手动创建它们。如果表具有相同的名称,但结构不同,如不同的字段类型、主键等,请为它们创建新表,如下所示
sstableloader
无法将数据流传输到具有不同结构的表使用sstableloader从集群2节点的已保存数据目录流化数据
另一种方法可能类似-先将数据流传输到集群1的节点,然后擦除集群2上的数据目录,并将其加入。。。