【问题标题】:Unable to connect to Cassandra remotely using DataStax Python driver无法使用 DataStax Python 驱动程序远程连接到 Cassandra
【发布时间】:2015-08-16 23:33:23
【问题描述】:

我无法(从我的笔记本电脑)远程连接到 Cassandra(在 EC2 节点上运行)。当我为 Cassandra 使用 DataStax Python 驱动程序时:

from cassandra.cluster import Cluster
cluster = Cluster(['10.X.X.X'], port=9042)
cluster.connect()

我明白了:

Traceback (most recent call last):
  File "/Users/user/virtualenvs/test/lib/python2.7/site-packages/IPython/core/interactiveshell.py", line 3035, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-23-dc85f20fd4f5>", line 1, in <module>
    session = cluster.connect()
  File "/Users/user/virtualenvs/test/lib/python2.7/site-packages/cassandra/cluster.py", line 755, in connect
    self.control_connection.connect()
  File "/Users/user/virtualenvs/test/lib/python2.7/site-packages/cassandra/cluster.py", line 1868, in connect
    self._set_new_connection(self._reconnect_internal())
  File "/Users/user/virtualenvs/test/lib/python2.7/site-packages/cassandra/cluster.py", line 1903, in _reconnect_internal
    raise NoHostAvailable("Unable to connect to any servers", errors)
NoHostAvailable: ('Unable to connect to any servers', {'10.X.X.X': OperationTimedOut('errors=None, last_host=None',)})

但 Cassandra 正在运行,因为 nodetool status 给了我:

UN 127.0.0.1 124.18 KB 256 100.0% 4d973e17-ae08-3aa1-81d2-605b92753694 rack1

Cassandra 似乎也在监听 9042 端口:

netstat -nltp | grep 9042

tcp6       0      0 0.0.0.0:9042            :::*                    LISTEN      -

我可以从我的笔记本电脑远程登录到 Cassandra:

$ telnet 10.X.X.X 9042
Trying 10.X.X.X...
Connected to ip-10-X-X-X.
Escape character is '^]'.

我的 cassandra.yaml 中的相关亮点:

start_native_transport: true
rpc_address: 0.0.0.0
rpc_port: 9160
broadcast_rpc_address: 10.X.X.X

/var/log/cassandra/system.log 没有显示任何有用的信息。

编辑: 我还可以使用服务器上的cqlsh 127.0.0.1 9042 和笔记本电脑上的cqlsh 10.X.X.X 9042 连接到 Cassandra,没有任何问题。


解决方案

由于某种原因,我测试脚本的地方(PyCharm 中的 Python 控制台)看起来是唯一一个我的脚本不起作用的地方。在 PyCharm 或 Python/iPython 交互模式下作为脚本运行没有问题。我会留下这个问题,因为它包含一个相当完整的 Python 到 Cassandra 连接故障排除清单。

【问题讨论】:

  • “nodetool status”是否显示联合国?
  • @phact:是的,确实如此:UN 127.0.0.1 124.18 KB 256 100.0% 4d973e17-ae08-3aa1-81d2-605b92753694 rack1
  • 嗯,你可以在驱动程序上打开日志记录
  • 这可能是 PyCharm 出现问题的原因:datastax-oss.atlassian.net/browse/PYTHON-289
  • 我在rcp_address中放的是机器ip而不是localhost;然后注意到这里的yaml sn-p;

标签: python cassandra database-connection datastax


【解决方案1】:

这是一个简单的调试方法: 在另一台安装了 cassandra 的机器上,使用 cassandra cli 命令“cqlsh 10.X.X.X”连接远程 cassandra 服务器。如果失败,那么你应该修改cassandra远程模式的cassandra配置文件。

【讨论】:

  • 谢谢。看起来我可以在服务器和笔记本电脑上使用 CQL。驾驶员侧一定有问题。
  • @Def_Os 我的 cqlsh 127.0.0.1 9042 正在运行,但 cqlsh 192.168.X.X 9042 甚至无法在服务器上运行。我已经在 yaml 文件中更改了这些值。 start_native_transport: true rpc_address: 0.0.0.0 rpc_port: 9160 broadcast_rpc_address: 192.168.X.X
【解决方案2】:

如果超出control connection timeout,则可能引发此类异常。尝试增加它或将其设置为None 以完全禁用此超时。例如:

from cassandra.cluster import Cluster
cluster = Cluster(['127.0.0.1'], control_connection_timeout=10,  port=9042)
cluster.connect()

【讨论】:

    猜你喜欢
    • 2016-02-18
    • 2016-07-26
    • 2018-04-16
    • 2013-12-23
    • 2014-07-28
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多