не могу подключиться к кассандре с помощью jconsole

У меня на удаленном сервере установлена ​​кассандра. У машины 2 IP-адреса - внутренний и внешний. В параметрах jvm cassandra у меня для java.rmi.server.hostname установлен внутренний IP-адрес. nodetool отлично подключается. Однако я не могу подключиться с помощью jconsole через внешний IP-адрес - он долго зависает, а затем (в режиме -debug) печатает java.net.ConnectException с тайм-аутом. Это не проблема брандмауэра - на сервере нет брандмауэра, а также я могу подключиться к внешнему IP-адресу и порту jmx с помощью telnet. Я также пробовал подключиться к внутреннему ip через туннель ssh - но результат все тот же.

Кто-нибудь может мне с этим помочь?


person shutyaev    schedule 29.11.2012    source источник


Ответы (4)


conf / cassandra-env.sh

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=public_name"
person Vlad Filimon    schedule 29.11.2012
comment
Спасибо, это тот, которого действительно не хватало. - person Alberto Massidda; 03.08.2020

Скорее всего, вы не настроили удаленный JMX. Это должно помочь.

person rs_atl    schedule 29.11.2012

По умолчанию Cassandra разрешает доступ к JMX только с localhost. Чтобы включить удаленное соединение JMX, вам необходимо изменить
"LOCAL_JMX = yes" на "LOCAL_JMX = no"
это свойство из файла Cassandra-env.sh.
При желании, если вы хотите включить аутентификацию, вы можете установить свойства, связанные с аутентификацией, иначе оставляйте их только комментированными.

Надеюсь, что это поможет вам.

person Shrikant Salgar    schedule 25.09.2016

Ключевой момент: JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=x.x.x.x"

Я вставляю сюда свой полный фрагмент, чтобы помочь другим:

LOCAL_JMX=no

# Specifies the default port over which Cassandra will be available for
# JMX connections.
# For security reasons, you should not expose this port to the internet.  Firewall it if needed.
JMX_PORT="7199"

if [ "$LOCAL_JMX" = "yes" ]; then
  JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.local.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
else
  JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.port=$JMX_PORT"
  # if ssl is enabled the same port cannot be used for both jmx and rmi so either
  # pick another value for this property or comment out to use a random port (though see CASSANDRA-7087 for origins)
  JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=192.168.42.101"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"

  # turn on JMX authentication. See below for further options
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"

  # jmx ssl options
  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true"
  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.protocols=<enabled-protocols>"
  #JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.enabled.cipher.suites=<enabled-cipher-suites>"
  #JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/path/to/keystore"
  #JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=<keystore-password>"
  #JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=/path/to/truststore"
  #JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=<truststore-password>"
fi
person Alberto Massidda    schedule 03.08.2020