gpt4 book ai didi

cassandra - 使用 cqlsh 执行插入语句时获取 "unable to complete request: one or more nodes were unavailable"

转载 作者:行者123 更新时间:2023-12-03 18:11:10 26 4
gpt4 key购买 nike

我正在尝试在全新安装的 Cassandra 2 上执行插入,虽然我能够很好地设置新的键空间和表,但在尝试执行插入时出现上述错误。

我没有任何花哨的多服务器设置,它只是运行一台带有测试数据库的计算机,因此我对节点配置感到困惑

用于创建所述项目的命令是:

CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 3 };
USE demodb;
CREATE TABLE users (user_name varchar, state varchar, birth_year bigint, PRIMARY KEY (user_name));
INSERT INTO users (user_name, state, birth_year) VALUES ('canadiancreed', 'PA', 1976);

最佳答案

CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 3 };

很可能是你的罪魁祸首。它说 demodb key 空间中的数据属于 DC1,应该复制 3 次。如果您的单个测试节点未指定为 DC1 的成员,则任何插入此键空间的请求都将失败。此外,如果它是 DC1 的成员并且一致性级别大于 1,则所有请求都将失败,因为写入不可能获得多个确认。

检查您的数据中心的名称(节点工具状态)并调整它们的 key 空间复制详细信息以匹配。这很可能会解决您的问题。

---- 编辑更多细节和更好的格式----

这是新用户使用 Cassandra 时最常见的错误之一。基本上在 Cassandra 中有我们称为数据中心的硬件逻辑单元。数据中心应该代表一组在地理上或以其他方式不同的机器组。您可以制作其中的许多并防止在一个地理位置发生故障导致您的应用程序脱机。

键空间是用于组织信息组的逻辑结构,它类似于关系世界中的数据库。每个 Keyspace 都可以指定它应该在哪些机器上复制以及复制多少台机器。如果我们使用 NetworkTopologyStrategy,则在每个数据中心的基础上指定复制。我们在创建时使用“CREATE KEYSPACE .... WITH REPLICATION”指定这些细节(尽管它们可以在以后修改)。

在上面的语句中,您已指定 Keyspace demodb 中的所有信息都应放在数据中心“DC1”中,并且该数据中心中应该有 3 个数据副本。这基本上意味着您在 DC1 中至少有 3 个节点,并且您需要每个节点上的数据副本。这本身不会导致插入失败,除非 Cassandra 集群不知道整个数据中心。如果您没有对 C* 集群进行初始配置并且只是运行库存 yaml,就会出现这种情况。

运行 nodetool status 将显示当前节点对集群状态的看法。这是从我的本地机器上运行的 C* 的输出。
Datacenter: Cassandra
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Owns (effective) Host ID Token Rack
UN 127.0.0.1 93.37 KB 100.0% 50be3bec-7e30-4385-bd4a-918055a29292 4731866028208108826 rack1

此输出显示我有一个节点在名为“Cassandra”的集群中运行。这意味着对需要其他数据中心副本的键空间的任何插入都将失败,因为集群不知道如何处理这些请求。 (如果节点只是关闭,但我们在保存提示之前已经看到它们,但如果从未见过另一个 DC,我们拒绝请求,因为集群很可能配置错误。)

为了解决这种情况,我将使用修改我的 key 空间
cqlsh:demodb> ALTER KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'Cassandra' : 1 };

现在,demoDB 需要数据中心 Cassandra 中的一台机器上的数据副本。这很好,因为正如我的 nodetool 输出所述,我在名为 Cassandra 的数据中心中有一个节点。如果我现在尝试插入它会通过。
cqlsh:demodb> INSERT INTO users (user_name, state, birth_year) VALUES ('canadiancreed', 'PA', 1976);
cqlsh:demodb> select * from users where user_name = 'canadiancreed' ;

user_name | birth_year | state
---------------+------------+-------
canadiancreed | 1976 | PA

(1 rows)

我会更改我的设置模式脚本以具有正确的数据中心名称
CREATE KEYSPACE demodb WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'Cassandra' : 1 };

关于cassandra - 使用 cqlsh 执行插入语句时获取 "unable to complete request: one or more nodes were unavailable",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22272675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com