Cassandra JMX java.rmi.server.ExportException:端口已在使用中:7199
Cassandra JMX java.rmi.server.ExportException: Port already in use: 7199
我们的 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.port
和 jmxremote.rmi.port
使用不同的端口,尽管这违反了手册中的建议。不幸的是,即使我无法使用 nodetool 得到 NoSuchObjectException: 'no such object in table'
异常。
有什么想法吗?非常感谢。
我找到了解决办法。问题出在以下行:
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"
那么一切都很顺利。
我遇到了同样的问题,我也启用了
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
然而,当我 运行 带有 --ssl 选项的 nodetool 时,我能够毫无问题地进行身份验证。所以也许您错过了 --ssl 选项?
Cassandara与VMware也有冲突。停止VMware服务后,Cassandra正常启动。
我们的 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.port
和 jmxremote.rmi.port
使用不同的端口,尽管这违反了手册中的建议。不幸的是,即使我无法使用 nodetool 得到 NoSuchObjectException: 'no such object in table'
异常。
有什么想法吗?非常感谢。
我找到了解决办法。问题出在以下行:
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"
那么一切都很顺利。
我遇到了同样的问题,我也启用了
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
然而,当我 运行 带有 --ssl 选项的 nodetool 时,我能够毫无问题地进行身份验证。所以也许您错过了 --ssl 选项?
Cassandara与VMware也有冲突。停止VMware服务后,Cassandra正常启动。