无法使用最新的datastax python驱动程序扩展cassandra

时间:2015-08-05 06:44:42

标签: python cassandra datastax

我们正在使用多个cassandra数据集群实例(6)来使用python连接到cassandra。我们正在汇集这些多个连接以执行某些操作。每个操作都独立于其他操作。

它适用于少量操作,但是一旦我尝试扩展,我会收到以下错误:

NoHostAvailable: ('Unable to complete the operation against any hosts', {<Host: 127.ption('Pool is shutdown',)})

有时会出现以下警告:

WARNING  Heartbeat failed for connection (140414695068880) to 127.0.0.1

我尝试更改一些群集对象参数,但它没有帮助。

以下是我正在使用的cassandra中的密钥空间配置:

'class':'SimpleStrategy', 'replication_factor':'1'

我正在为python使用最新版本的cassandra和datastax驱动程序。 cassandra只有一个节点。

编辑:更多详情:

多个集群实例位于不同的进程中(使用Python多处理模块创建进程) - 每个进程一个集群实例。让我们称之为Cassandra-Processes(CP)。还有很多其他进程需要进行一些计算,需要查找一个Cassandra DB,并偶尔写入它。当前的设计是每个进程都映射到一个CP,并且由进程完成的所有DB读/写都是通过这个映射的CP完成的。 “读取/写入的确切内容”被传递到映射的CP读取的队列(同样来自多处理库)。

我们观察到这种设置运行了一段时间 - 然后突然Cassandra开始出错。

2 个答案:

答案 0 :(得分:1)

目前还不清楚为什么要对单个Cassandra节点使用六个群集实例。通常,每个应用程序(每个远程群集)应使用一个群集实例。您可以阅读有关Cassandra驱动程序here

的一般设计注意事项

如果你正在寻找&#34;规模&#34;关于吞吐量,您可以考虑使用多处理。我在博文here中讨论了这个问题。

后续:

从目前为止的信息可以推断出两件事:

  1. 应用程序正在推送比连接池配置为处理的更多并发请求。我这样说是因为&#34; Pool已关闭&#34;仅在请求等待连接/流可用时发生。您可以使用cluster settings调整连接池以使更多可用。但是,如果你的&#34;集群&#34; (服务器节点)不堪重负,你在那里获得了很多。
  2. 您的连接正在关闭。仅在突然标记节点时才会发生此异常。在单节点设置中,这很可能是由于连接错误。如果你正在捕获它,请在服务器日志或驱动程序调试日志中查找线索。
  3. 我们可能需要了解有关您的执行模型的更多信息才能提供更多帮助。你是否有可能在没有偶尔等待它们完成的情况下运行不受约束的异步请求?

答案 1 :(得分:0)

如果不了解特定拓扑,设置和系统配置,很难做出远程诊断。然而,这看起来很像配置问题甚至是python驱动程序。如果你谷歌你的错误消息,你会发现有关Datastax的Jira描述这个或类似问题的多个主题,我会检查Python驱动程序是最新的。 首先,有用的是详细了解您尝试执行的操作,以及如何配置群集。