我有 2 个 cassandra 集群,位于不同的数据中心(请注意,这些是 2 个不同的集群,而不是具有 multidc 的单个集群),并且两个集群具有相同的键空间和列族模型。我希望以最有效的方式将列族 C 的数据从集群 A 复制到集群 B。其他一些 ColumnFamily 我可以使用 get 和 put 操作进行复制,因为它是一个时间序列并且键是顺序的。但是这个其他列族 C,我可以复制。我正在使用节俭和 pycassa。我已经尝试了 CQL COPY 命令,但不幸的是 CF 太大了,我得到了一个 rpc_timeout。我怎样才能做到这一点?
3 回答
如果您只想一次性执行此操作,请拍摄快照并使用 sstableloader 将其加载到集群中。如果您想随着时间的推移继续加载新数据,您将需要打开增量备份,然后拍摄快照以加载初始数据,然后定期从增量备份中获取 sstables 到 sstableload 以保持最新状态。
有时我还需要将数据从一个 cassandra 集群复制到另一个集群。我使用这个工具https://github.com/masumsoft/cassandra-exporter。
export.js
脚本将数据导出到 json 文件,import.js
脚本将导出的数据导入到 cassandra。您可以对指定键空间中的所有表执行此操作,也可以仅对特定表执行此操作。目标键空间和表应该在导入之前存在。
在 js 脚本中,如果出现“读取超时错误”,您可以调整批处理大小和 readTimeout。
更新:经过Alex Ott的提示后,我尝试了 DSBulk 工具。它工作得很好,但每次运行只能用于一张桌子。如果要处理完整的键空间,则需要一个为每个表运行 DSBulk 的脚本。
我对如何将 cassandra 数据从一个集群复制到另一个集群知之甚少,但是对于 rpc_timeout 错误,您可以使用
cqlsh --request-timeout 3600 <IP address>
使用上述命令进入 Cql shell request-timeout 默认以秒为单位,如果需要可以增加