cassandra - 我可以将 Apache cassandra 节点添加到 DataStax (DSE) cassandra 集群吗?
问题描述
我正在从 Datastax (DSE) Cassandra 迁移到 Apache Cassandra 3.11。
我有一个由 7 个 Datastax (DSE) Cassandra 节点组成的集群。
有没有办法创建新的 apache Cassandra 集群并将其连接到 DSE Cassandra,以便我的写入同时发送到 DSE 和 Apache cassandra
因此,一旦我的数据开始在 Cassandra 中写入,我就可以将我的读取 API 逐渐从 DSE 迁移到 Apache。
解决方案
是的,我以前做过。
首先,找到您的集群正在运行的 Cassandra 版本(不是 DSE 版本)的确切版本:
SELECT release_version FROM system.local;
release_version
-----------------
3.11.4
连接时也可以看到这个版本号cqlsh
。Cassandra 的 DSE 版本将添加一个(长)内部版本号。但想法是新节点上的 Apache Cassandra 版本应尽可能与 DSE 版本的 Cassandra 匹配。
接下来,将您的 Apache Cassandra “替换”节点构建为新的逻辑数据中心。确保他们dc_name
在文件中使用不同的(与现有节点)cassandra-rackdc.properties
。第一个(或两个)节点应该使用现有集群中的节点作为种子节点。随后的节点可以使用第一个节点作为种子。另外,cluster_name
需要匹配。
现在检查 、 、 和应用程序需要的任何键空间的键system_auth
空间system_traces
定义system_distributed
。确保他们正在使用NetworkTopologyStrategy
. 如果不是,请确保它是,并为现有 DC 配置复制因子 (RF)(DC 名称必须与dc_name
现有 DSE 节点匹配)。然后,您可以将复制扩展到新的数据中心。
如果 current dc_name
isDSE_DC
和 new dc_name
is AC_DC
,那么:
ALTER KEYSPACE yourkeyspace WITH replication =
{'class': 'NetworkTopologyStrategy',
'DSE_DC': '3', 'AC_DC': '3'};
更改完成后,在每个新的 Apache Cassandra 节点上运行 nodetool 重建。
nodetool rebuild -- DSE_DC
这会将数据从移动到DSE_DC
当前节点。然后,您应该能够通过指定新的数据中心名称来切换您的 API。
编辑 20200506
检查您的数据目录。要使其正常工作,最重要的是要匹配 SSTable 格式。
版本 3.11.4+
43 Feb 20 08:55 md-1-big-CompressionInfo.db
83 Feb 20 08:55 md-1-big-Data.db
10 Feb 20 08:55 md-1-big-Digest.crc32
16 Feb 20 08:55 md-1-big-Filter.db
17 Feb 20 08:55 md-1-big-Index.db
4769 Feb 20 08:55 md-1-big-Statistics.db
57 Feb 20 08:55 md-1-big-Summary.db
92 Feb 20 08:55 md-1-big-TOC.txt
4.0-alpha4 版:
47 May 6 10:13 na-1-big-CompressionInfo.db
107 May 6 10:13 na-1-big-Data.db
10 May 6 10:13 na-1-big-Digest.crc32
16 May 6 10:13 na-1-big-Filter.db
32 May 6 10:13 na-1-big-Index.db
4687 May 6 10:13 na-1-big-Statistics.db
66 May 6 10:13 na-1-big-Summary.db
92 May 6 10:13 na-1-big-TOC.txt
您还可以在 DataStax 的产品兼容性指南中验证这一点。
基本上,如果您的 SSTable 文件以 m[a,b,c,d] 为前缀,那么 3.11.6 应该可以工作。
推荐阅读
- php - WooCommerce - 通过不同的浏览器/用户保持给定的输入
- django - Django 不提供静态文件
- java - 如果没有提供请求和响应类,如何编写soap客户端
- arrays - 在 Typescript 中仅获取具有动态元素的对象数组中的唯一值
- amazon-s3 - AWS 仅创建具有 S3 权限的用户
- java - 如何知道单击按钮的列表项的索引
- authentication - Kafka Broker SASL - NoAuth 异常 - KeeperErrorCode NoAuth for /brokers/ids
- python - 如何使用 Pytorch 将二进制迁移学习模型扩展到多个图像类别?
- python - 无法在服务器上的 Docker 容器内建立网络连接 [Errno 111]
- r - Rollapply 填充矢量(在头部和尾部)