我运行了 21 个节点的 Cassandra 集群,其中包含 150 多个架构和大约 20 TB 的数据。我需要在没有停机的情况下将架构和数据从 Cassandra 转移到 7 节点 Scylla。
Scylla 和 Cassandra 都支持相同的 cqlsh 版本,并且在分发数据和八卦方面几乎相同。
为了转移数据,我尝试在现有 Cassandra 集群中创建新的 Scylla 数据中心并更新 key 空间拓扑,使 Scylla 也在复制的 DC 列表中,然后引导/重建集群中的 Scylla 节点。
为此,我在 node.js 中添加种子列表时收到 TCP 连接失败的错误。
Scylla 错误:-
scylla: [shard 0] rpc - client 10.200.1.2:34236: server connection dropped: connection is closed scylla: [shard 0] rpc - client 10.200.1.2:7000: fail to connect: Connection refused.
Cassandra 错误:-
[MessagingService-Outgoing-/10.200.2.2-Gossip] OutboundTcpConnection.java:411 - Socket to /10.200.2.2 closed [HANDSHAKE-/10.200.2.2] OutboundTcpConnection.java:570 - Cannot handshake version with /10.200.2.2 [HANDSHAKE-/10.200.2.2] OutboundTcpConnection.java:561 - Handshaking version with /10.200.2.2
请帮助我,如果有人已经这样做了,或者有更好的想法在不停机的情况下转移数据,没有数据丢失,风险更小。
最佳答案
您不能在同一集群上拥有包含 C* 和 Scylla 节点的异构集群。
创建一个单独的 scylla 集群,创建架构,更改应用程序以执行双重写入(对两个集群),然后将 C* 历史数据迁移到 Scylla。
有多种方法可以迁移数据。这应该会有所帮助:https://youtu.be/CDOesdWDT9Y没有停机时间,没问题,也有选择。
关于cassandra - Scylla 数据中心和 Cassandra 数据中心在同一集群中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61206077/