Невозможно подключиться к Cassandra удаленно с помощью драйвера DataStax Python

У меня проблемы с подключением к Cassandra (работающей на узле EC2) удаленно (с моего ноутбука). Когда я использую драйвер Python DataStax для Cassandra:

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',)})

Но Кассандра работает, потому что nodetool status дает мне:

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

Кассандра, похоже, тоже слушает порт 9042:

netstat -nltp | grep 9042

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

И я могу подключиться к Кассандре через telnet со своего ноутбука:

$ 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 ничего полезного не показывает.

изменить: я также могу без проблем подключиться к Cassandra, используя cqlsh 127.0.0.1 9042 на сервере и cqlsh 10.X.X.X 9042 со своего ноутбука.


Решение

Похоже, что единственное место, где я тестировал свой скрипт (консоль Python внутри PyCharm), по какой-то причине является единственным местом, где мой скрипт не работает. Нет проблем с запуском скрипта в PyCharm или в интерактивном режиме Python / iPython. Я оставлю этот вопрос, так как он содержит довольно полный контрольный список для устранения неполадок подключения Python к Cassandra.


person Def_Os    schedule 02.06.2015    source источник
comment
Показывает ли «статус nodetool» UN?   -  person phact    schedule 03.06.2015
comment
@phact: Да, это так: UN 127.0.0.1 124.18 KB 256 100.0% 4d973e17-ae08-3aa1-81d2-605b92753694 rack1   -  person Def_Os    schedule 03.06.2015
comment
Хм можешь включить логг у драйвера   -  person phact    schedule 03.06.2015
comment
Это может быть причиной проблемы в PyCharm: datastax-oss.atlassian.net/browse / PYTHON-289   -  person Tyler Hobbs    schedule 05.06.2015
comment
Я помещаю ip машины вместо localhost в rcp_address; а затем заметил здесь фрагмент yaml;   -  person Alex Punnen    schedule 24.05.2016
comment
У меня такая же проблема, подключение с использованием cqlsh работает, но pytest, tox, интерактивный режим не работает (не удается подключиться), при запуске отдельного скрипта работает ... Использование драйвера -v 3.7.1, python 3.4.4.   -  person c-a    schedule 29.12.2016


Ответы (2)


Такое исключение может быть создано, если элемент управления превышено время ожидания подключения. Попробуйте увеличить его или установите None, чтобы полностью отключить этот тайм-аут. Например:

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

Вот простой способ отладки: На другом компьютере с установленной cassandra используйте команду cassandra cli "cqlsh 10.X.X.X" для подключения к удаленному серверу cassandra. В случае неудачи вам следует изменить файл конфигурации cassandra для удаленного режима cassandra.

person wherby    schedule 03.06.2015
comment
Спасибо. Похоже, я могу использовать CQL как на сервере, так и со своего ноутбука. Что-то должно быть не так со стороны водителя. - person Def_Os; 03.06.2015
comment
@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 - person Khalid Usman; 30.12.2017