cqlsh 中的 Cassandra NoHostsAvailable 错误

Cassandra NoHostsAvailable error in cqlsh

我在两个节点上 运行 Cassandra 3.11。这是键空间:

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

我有两个节点,运行 在我机器上的虚拟机上。当两个节点都启动时,一切正常。但是当我关闭一个节点时,我的应用程序(elixir)开始抛出错误,以及 cqlsh(NoHostAvailableInvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table test")。

我搜索错误,每个人都遇到过为单个节点设置NetworkTopologyStrategy的问题,但我不是这样。

这里发生了什么?

编辑:这是驱动程序给出的错误:

[unavailable] Cannot achieve consistency level ONE: %{alive: 0, consistency: :one, required: 1}

我确定一个节点处于活动状态,一个已关闭。从我的本地系统使用 cqlsh 连接到 Cassandra 节点证实了这一点。我现在更糊涂了。

问题是"replication_factor"配置为1,所以只有一份数据。假设您要存储 10 条记录,那么每个节点都应该获得其记录份额,为简单起见,假设前 5 条记录存储在节点 1 中,后 5 条记录存储在节点 2 中。现在,当您关闭 node1 并查找第一条记录时,您将得到报告的驱动程序错误,因为没有节点可用于提供该记录。

  • 将 replication_factor 更改为最小值 2,因为这里只有两个节点的情况。 PROD 的推荐 RF=3。
  • 运行 NODETOOL REPAIR,为table里的记录变成两份。任何未来的插入将自动成为两个副本,但这是为了修复现有记录。
  • READ查询的一致性级别默认为ONE,即使在节点故障的情况下也会成功。

SimleStrategy 应该适用于单数据中心场景。 PROD 的推荐配置仍然是 NetworkTopology Strategy。