【问题标题】:Cassandra JMX java.rmi.server.ExportException: Port already in use: 7199Cassandra JMX java.rmi.server.ExportException:端口已在使用中:7199
【发布时间】:2015-11-15 21:17:41
【问题描述】:

我们的 Cassandra 2.2 集群(在 CentOS 7 上)运行良好,除了一件事。我将LOCAL_JMX=no 放入 cassandra-env.sh 后,Cassandra 无法启动并出现以下错误:

Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 7199; nested exception is:
    java.net.BindException: Address already in use

相关配置如下:

  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/etc/pki/cassandra/keys/.keystore"
  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=password1"
  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=/etc/pki/cassandra/certs/.truststore"
  JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=password2"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=true"
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=true"

我确实验证了端口上是否没有运行任何东西,但事实并非如此。如果我更改端口,结果相同。 有帮助的是为jmxremote.portjmxremote.rmi.port 使用不同的端口,尽管这违反了手册中的建议。不幸的是,即使我无法使用 nodetool 得到NoSuchObjectException: 'no such object in table' 异常。

有什么想法吗?非常感谢。

【问题讨论】:

  • cassandra-env.sh 在哪里我没有在这个文件中写LOCAL_JMX=no 也有同样的错误

标签: java cassandra jmx


【解决方案1】:

我找到了解决方案。问题出在以下行:

JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"

当我将其切换为 true 时,可以使用上述设置(使用公共端口)启动 Cassandra。

但这并不意味着问题已经结束,因为在使用 nodetool 时我开始得到:nodetool: Failed to connect to - ConnectIOException: 'non-JRMP server at remote endpoint'

最终的解决方案是问题出在 SSL 上。该协议不支持 JMX。因此,唯一的解决方案是将其关闭,工作配置如下:

JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=true"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/jmxremote.password"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStore=/etc/pki/cassandra/keys/.keystore"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.keyStorePassword=password1"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStore=/etc/pki/cassandra/certs/.truststore"
JVM_OPTS="$JVM_OPTS -Djavax.net.ssl.trustStorePassword=password2"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl.need.client.auth=false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.registry.ssl=false"

然后一切都像魅力一样发挥作用。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我也启用了

    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
    

    然而,当我使用 --ssl 选项运行 nodetool 时,我能够毫无问题地进行身份验证。那么也许您错过了 --ssl 选项?

    【讨论】:

      【解决方案3】:

      Cassandara 也与 VMware 有冲突。停止 VMware 服务后,Cassandra 正常启动。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 1970-01-01
        • 1970-01-01
        • 2019-01-15
        • 2018-08-03
        • 2019-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多