Cassandra — nodetool не работает на другой машине?

#java #cassandra

#java #cassandra

Вопрос:

У меня есть кластер cassandra на 4 узлах (на каждом работает ubuntu 10.04 и cassandra 0.7.4). Все узлы подключены с помощью КОММУТАТОРА, и каждому присвоен СТАТИЧЕСКИЙ IP-АДРЕС (DNS не задействован).

Узел, похоже, функционирует должным образом (статус «Нормальный», все узлы подключены и т.д.).

Проблема в следующем: nodetool работает, но это работает только тогда, когда nodetool команда выполняется на том же узле. Когда я пытаюсь запустить nodetool из STATIC_IP = 192.168.0.253 на STATIC_IP = 192.168.0.4, я получаю следующую ошибку:

(примечание: машина ‘s3789’ имеет статический IP 192.168.0.253)

user@s3789:/opt/cassandra/apache-cassandra-0.7.4$ bin/nodetool -host 192.168.0.4 ring

Error connection to remote JMX agent!
java.rmi.ConnectException: Connection refused to host: 127.0.1.1; nested exception is:
java.net.ConnectException: Connection refused
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:619)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:128)
at javax.management.remote.rmi.RMIServerImpl_Stub.newClient(Unknown Source)
at javax.management.remote.rmi.RMIConnector.getConnection(RMIConnector.java:2343)
at javax.management.remote.rmi.RMIConnector.connect(RMIConnector.java:296)
at javax.management.remote.JMXConnectorFactory.connect(JMXConnectorFactory.java:267)
at org.apache.cassandra.tools.NodeProbe.connect(NodeProbe.java:137)
at org.apache.cassandra.tools.NodeProbe.<init>(NodeProbe.java:107)
at org.apache.cassandra.tools.NodeCmd.main(NodeCmd.java:511)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)
at java.net.Socket.connect(Socket.java:546)
at java.net.Socket.connect(Socket.java:495)
at java.net.Socket.<init>(Socket.java:392)
at java.net.Socket.<init>(Socket.java:206)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)

Есть какие-нибудь подсказки, как это решить?

Комментарии:

1. Обоснованное предположение: вы поместили указанный ip-адрес и порт в hosts разрешающий файл?

2. Нет hosts файла deny, почему я должен использовать allow ?

3. некоторые работают … но если у вас есть hosts файл, почему бы не включить туда свои ip-адреса?

Ответ №1:

из conf/cassandra-env.sh:

 # add this if you're having trouble connecting:
# JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=<public name>"
# 
# see 
# https://blogs.oracle.com/jmxetc/entry/troubleshooting_connection_problems_in_jconsole
# for more on configuring JMX through firewalls, etc. (Short version:
# get it working with no firewall first.)
  

Комментарии:

1. Спасибо. Хотелось бы, чтобы была хорошая и простая для понимания документация — я потратил часы, пытаясь разобраться в этом.

2. У меня была та же проблема, что и с оригинальным постером. Это исправление помогло, но мне также нужно было открыть порты на брандмауэре внутренней локальной сети, чтобы узлы cassandra могли обмениваться данными. Поэтому убедитесь, что все порты, необходимые cassandra, открыты.

3. @jbellis: да, сработало… но я не понял, как это работало в MAC OS без добавления JVM_OPTS =»$ JVM_OPTS -Djava.rmi.server.hostname=<общедоступное имя> в конце ..? может быть, это связано с JVM? можете ли вы объяснить это правильно

4. @пользователь3262424 ! что именно вы передали в <public name> filed. является ли общедоступный ip??

Ответ №2:

Проверьте, запустили ли вы rmiregistry перед запуском сервера

 rmiregistry amp;
  

Начало работы с RMI