csssh中的Cassandra NoHostsAvailable错误

时间:2017-07-29 08:31:36

标签: cassandra cqlsh

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

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

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

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

这里发生了什么?

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

  

[不可用]无法达到一致性等级ONE:%{alive:0,   一致性:一,必需:1}

我确定一个节点还活着,一个节点已关闭。使用本地系统中的cqlsh连接到Cassandra节点可以确认这一点。我现在更加困惑。

1 个答案:

答案 0 :(得分:1)

问题出在" replication_factor"被配置为1.因此只有一个数据副本。假设您正在存储10条记录,那么每个节点应该获得其记录份额,为简单起见,我们可以说前5条记录存储在node1中,后5条记录存储在node2中。现在当您取下node1并查找第一条记录时,您将最终得到报告的驱动程序错误,因为没有节点可用于提供该记录。

  • 将replication_factor更改为最小值2,因为此处只有两个节点情况。建议RF = 3表示PROD。
  • 运行NODETOOL REPAIR,使该表中的记录成为两个副本。任何将来的插入都将自动为两个副本,但这是为了修复现有记录。
  • READ查询的一致性级别默认为ONE,即使在节点发生故障的情况下也会成功。

SimleStrategy应该适用于Single DataCenter场景。仍然推荐的PROD配置是NetworkTopology Strategy。