![](/img/trans.png)
[英]java.rmi.server.ExportException: Port already in use: 1099;
[英]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.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可以正確啟動。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.