当其中一个节点关闭时 Cassandra 无法工作

标签 cassandra

我有一个由两个 cassandra 节点组成的开发 cassandra 集群[我们称它们为 NodeA 和 NodeB]。我还有一个在 NodeA 上不断发送数据的脚本。我使用以下参数创建了数据库:

CREATE KEYSPACE test_database WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'}  AND durable_writes = true;

现在,由于某种原因 NodeB 一段时间后停止了。但问题是,一旦 NodeB 停止,向 NodeA 发送数据的脚本就会开始出现数据插入错误。

谁能指出同样的可能原因。

更新:两个节点都是种子节点。

最佳答案

Cassandra 如何处理数据重新分区

cassandra 中的每个键都可以转换为 token 。当您安装集群时,节点会计算它们将接受的 token 范围。
让我们举一个简单的例子:

您有两个节点,以及一个从 0 到 9 的 token 。一个简单的重新分区是:节点 A 存储 0-4 之间的每个 token ,节点 B 存储 5-9 之间的每个 token 。

Cassandra 如何进行写入

您选择一个接收数据的协调器(在您的案例中为节点 A)。然后该节点将计算一个 token 。如第一个示例所示,每个节点都分配有一系列 token 。因此,想象一下 key 被转换为 token 4,然后数据发送到节点 A(此处为协调器)。如果token为8,则将数据发送到节点B。

什么是 cassandra 数据复制因子

复制因子是数据将在集群上存储的次数。对于没有机架的单个数据库(您的情况),数据首先发送到拥有与 key 关联的 token 的节点,然后将副本发送到拓扑中的下一个节点。
当一个节点出现故障时,副本将帮助该节点恢复数据。
在您的情况下,没有副本,如果节点关闭,Cassandra 无法存储数据并引发错误。如果复制因子为 2,Cassandra 应该能够在节点 A 上存储副本并且不会失败。

关于当其中一个节点关闭时 Cassandra 无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36789181/

相关文章:

laravel - 如何整合 Laravel 5.7 和 Cassandra 3.6?

cassandra - 即使使用 Quorum 配置,Cassandra 中的数据也不一致

tomcat - 无法在 UserGrid 中注册用户 : All Host Pools Marked Down. 重试负担推给客户端

cassandra - 如何在 cassandra 中追溯列族的大分区

hadoop - 从 pig 放出的负载 hive

ubuntu - 无法从远程主机连接到 Cassandra

node.js - 无法使用 datastax-driver 连接到 cassandra(已 stub 的 cassandra)

cassandra - Cassandra 压力测试

java - Spring数据 Cassandra : How to query tables with compound keys?

cassandra - 在 Kubernetes 下管理 Cassandra 数据存储大小和备份