0

我在远程服务器上安装了 cassandra。该机器有 2 个 IP -内部外部。在 cassandra 的 jvm opts 中,我将java.rmi.server.hostname设置为内部ip。nodetool连接得很好。但是我无法通过外部ip 使用jconsole进行连接- 它挂断了很长时间,然后(在-debug模式下)打印一个超时的java.net.ConnectException。这不是防火墙问题 - 服务器上没有防火墙,而且我可以使用telnet连接到外部ip 和 jmx 端口。我也尝试连接到通过 ssh 隧道的内部ip - 但结果仍然相同。

谁能帮我这个?

4

4 回答 4

2

conf/cassandra-env.sh

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=public_name"
于 2012-11-29T11:24:03.670 回答
1

很可能您尚未配置远程 JMX。 这应该会有所帮助。

于 2012-11-29T17:41:03.173 回答
1

默认情况下,Cassandra 只允许从 localhost 访问 JMX。要启用远程 JMX 连接,您需要将Cassandra-env.sh 文件中的
“LOCAL_JMX=yes”更改为“LOCAL_JMX=no”
此属性。
可选地,如果您想启用身份验证,您可以设置与身份验证相关的属性,否则只保留注释。

希望这会帮助你。

于 2016-09-25T09:13:26.337 回答
0

关键点是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
于 2020-08-03T14:15:13.433 回答