Не удается подключиться к cassandra: NodeContext убивает все объединенные в пул соединения для сеанса

Когда я пытаюсь подключиться к cassandra в своем Java-приложении, я получаю исключение в конце этого сообщения. Я использую библиотеку pelops для доступа к базе данных. База данных работает в Linux, а моя среда разработки - в Windows 7. Интересная строка

ВНИМАНИЕ: 10.0.0.7 NodeContext уничтожает все соединения из пула для сеанса 44

10.0.0.7 — это IP-адрес узла cassandra. И я могу связать этот узел с cassandra-cli. После нескольких часов гугления решил спросить, что я делаю не так? Полная трассировка стека приведена ниже.

СЕРЬЕЗНЫЙ: org.apache.thrift.transport.TTransportException: java.net.ConnectException: в соединении отказано: подключитесь к org.apache.thrift.transport.TSocket.open(TSocket.java:185) к org.wyki.cassandra.pelops. ThriftPool$Connection.open(ThriftPool.java:329) в org.wyki.cassandra.pelops.ThriftPool$NodeContext.createConnection(ThriftPool.java:438) в org.wyki.cassandra.pelops.ThriftPool$NodeContext.access$5(ThriftPool .java:429) в org.wyki.cassandra.pelops.ThriftPool$NodeContext$1.run(ThriftPool.java:494) в java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) в java.util .concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) в java.lang.Thread.run(Thread.java:619) Вызвано: java.net.ConnectException: в соединении отказано: подключение в java.net.PlainSocketImpl. socketConnect (собственный метод) на java.net.PlainSocketImpl.doConnect (PlainSocketImpl.java:333) на java.net. PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) в java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) в java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) в java.net.Socket.connect(Socket .java:529) на java.net.Socket.connect(Socket.java:478) на org.apache.thrift.transport.TSocket.open(TSocket.java:180) ... еще 7

ВНИМАНИЕ: 10.0.0.7 NodeContext уничтожает все соединения в пуле для сеанса 44.


person Deniz    schedule 02.07.2010    source источник


Ответы (4)


«Соединение отклонено» означает, что Cassandra не прослушивает интерфейс, к которому вы подключаетесь. По умолчанию Cassandra прослушивает порт 9160 на локальном хосте. Вам нужно будет изменить это, если вы хотите подключиться извне; прочитайте комментарии для ThriftAddress в файле конфигурации.

person jbellis    schedule 03.07.2010
comment
он прослушивает 9160, хост 0.0.0.0, и я могу подключить его к cassandra-cli с удаленного компьютера. Так что проблема не в этом. - person Deniz; 04.07.2010

Пелопс не делает ничего сложного, когда дело доходит до установления связи с Кассандрой, поэтому маловероятно, что это специфично для Пелопса.

Я только что просмотрел код подключения Hector, и он выглядит почти так же: https://github.com/rantav/hector/blob/master/core/src/main/java/я/prettyprint/cassandra/connection/HThriftClient.java

Код cassandra-cli также выглядит примерно так же: https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/cli/CliMain.java#L57

p.s. Cassandra не следует настраивать для прослушивания 0.0.0.0. См. «Почему я не могу заставить Cassandra прослушивать 0.0.0.0 (все мои адреса)?» в часто задаваемых вопросах Кассандры.

person danw    schedule 02.04.2011

Кажется, это проблема с pelops, библиотекой поверх экономного клиента cassandra. У него есть некоторые проблемы с подключением к Cassandra, работающему на Linux, и клиенту на машине с Windows.

person Deniz    schedule 15.07.2010

У меня такое же исключение при удаленном подключении «любого» клиента к cassandra:

ConnectException: в соединении отказано

Просматривая SO, я не смог найти быстрого решения для этого, просто внимательно прочитав документы cassandra и комментарии в cassandra.yaml - они очень удобны!

Итак, для меня сработало следующее: измените значение rpc_address на имя хоста или IP-адрес, который вы используете для подключения к экземпляру cassandra с клиентом.

person Ivan Velykorodnyy    schedule 09.08.2012