无法使用jconsole连接到cassandra

时间:2012-11-29 08:30:55

标签: cassandra jmx jconsole

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

任何人都可以帮我吗?

4 个答案:

答案 0 :(得分:1)

<强> CONF / cassandra-env.sh

JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=public_name"

答案 1 :(得分:1)

很可能您尚未配置远程JMX。 This should help.

答案 2 :(得分:1)

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

希望这会对你有所帮助。

答案 3 :(得分: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