我尝试使用cassandra-driver
2.1.4库连接到Cassandra时遇到以下错误(当然使用真正的IP而不是星号):
NoHostAvailable: ('Unable to connect to any servers', {'**.**.**.**':
OperationTimedOut('errors=None, last_host=None',), '**.**.**.**':
OperationTimedOut('errors=None, last_host=None',)})
连接代码:
Database.history = Cluster(
ip_list.split(","),
auth_provider=PlainTextAuthProvider(
username=u,
password=p
)
).connect(k)
现在很奇怪:我可以在相同的默认端口上使用Datastax DevCenter从同一个盒子中完全连接。如果我将这些IP编辑为虚假,我会得到一个不同的错误(说它无法连接到主机而不是超时)。如果我将用户名/密码编辑为虚假,我会收到验证错误。
很明显我 连接,但由于某种原因,我实际上无法在Python中获得有用的连接。
另外,我在远程盒子上成功运行了相同的代码。所以它必须与我的本地python或其他东西一样奇怪。
答案 0 :(得分:0)
cassandra-driver
连接代码中存在某种计时问题,无法通过增加连接或请求超时来解决。在调查问题可能出在哪里时,我偶然发现了这种棘手的变通方法,这可能对陷入这一障碍的其他人有用:
import logging
logging.getLogger().addHandler(logging.StreamHandler())
logging.getLogger().setLevel(logging.DEBUG)
将上述代码放在脚本顶部。我的猜测是,它以某种不必要的日志消息打印到stderr的方式,在客户端代码中添加了足够的延迟来解决定时问题。