2017-07-29 80 views
1

我在两个节点上运行Cassandra 3.11。这是关键字空间:在cqlsh中Cassandra NoHostsAvailable错误

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的问题,但这不是我的情况。

这里发生了什么?

编辑:这是驾驶员给出错误:

[不可]无法实现一致性水平之一:%{活着:0, 一致性::一,需要:1}

我确定有一个节点还活着,一个活着。从我的本地系统使用cqlsh连接到Cassandra节点证实了这一点。我现在更加困惑。

+0

您的密钥空间中是否存在表“test”? –

+0

@AshrafulIslam'测试'是一个假名。是的,它肯定存在,因为我可以在两个节点都运行时运行相同的查询。而且,'cqlsh'能够自动完成我的表名,所以我不会写错。 – vfsoraki

+0

什么是系统密钥空间的副本放置策略类? –

回答

1

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

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

SimleStrategy对Single DataCenter方案应该可以正常工作。推荐的PROD配置仍然是NetworkTopology Strategy。

+0

我明白了。感谢您的解释。 – vfsoraki