#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??