簡體   English   中英

Cassandra JMX java.rmi.server.ExportException:端口已在使用中:7199

[英]Cassandra JMX java.rmi.server.ExportException: Port already in use: 7199

除了一件事,我們的Cassandra 2.2集群(在CentOS 7上)運行良好。 一旦我在cassandra-env.sh中放入LOCAL_JMX=no ,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'異常。

有任何想法嗎? 非常感謝。

我找到了解決方案。 問題出在以下幾行:

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可以正確啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM