我正在尝试远程使用 JMX nodetool。 我无法将 JMX 配置为在公共网络接口上侦听,而 Cassandra 却在公共接口上侦听。
注意不是Cassandra连接,而是JMX连接。 Cassandra 可在公共接口端口 9042 上使用。
netstat -planet | grep 7199
gives
127.0.0.1:7199
和
nodetool -h
始终失败。
使用 ./cassendra-env.sh,我设置 LOCAL_JMX=no
-Dcom.sun.management.jmxremote.host=<public_ip>
-Djava.rmi.server.hostname=<public_ip>
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
我尝试将参数也放入 jvm11-server.options 中,但没有成功。
JMX 保持绑定到 127.0.0.1。
我错过了什么吗?
(尝试远程使用JMX)
使用 Java 11 运行 Cassandra 4.1.4。
启用远程 JMX 访问的最低要求是将
LOCAL_JMX
设置为 yes
以外的任何值。
在我的测试环境中,我将以下行添加到
conf/cassandra-env.sh
:
LOCAL_JMX=no
为了简单起见,我没有启用身份验证或 SSL,仅保留配置:
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"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
fi
通过此最小配置,Cassandra 进程将侦听所有接口上的 JMX 连接。例如:
$ sudo lsof -nPi | grep 7199
java 4544 erick 78u IPv4 73723 0t0 TCP *:7199 (LISTEN)
$ sudo netstat -tnlp | grep 7199
tcp 0 0 0.0.0.0:7199 0.0.0.0:* LISTEN 4544/java
您很可能错误配置了环境中的某些内容。郑重声明,除了
cassandra-env.sh
之外,我没有修改任何其他配置文件。干杯!