您能否使用正在运行的实际 nodetool status 命令来编辑您的问题?
您还在使用标准的默认cassandra-env.sh 文件吗?还是已经改变了?关于本地/远程 JMX,有如下逻辑检查:
if [ "x$LOCAL_JMX" = "x" ]; then
LOCAL_JMX=yes
fi
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"
...
首先,LOCAL_JMX 默认没有定义。因此,如果要启用远程 JMX,则需要调整代码。其次,调整rmi.server.hostname需要在正确的部分进行。
启用远程 JMX 还允许 JMX 在本地计算机上工作。但想法是使用的端口(默认为 7199)绑定到与 Cassandra 节点本身相同的 IP。
基本上,如果您要注释掉本地/远程 if 构造,这些设置应该允许 JMX(和 nodetool)运行。注意:假设外部 IP 地址为 10.2.3.5。
JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=10.2.3.5"
基本上,rmi.server.hostname 应该与用于连接节点的 IP 匹配。
如果您仍然遇到问题,请先检查您的system.log。在启动时,每个节点应该有这样一行:
StartupChecks.java:176 - JMX is enabled to receive remote connections on port: 7199
或:
StartupChecks.java:169 - JMX is not enabled to receive remote connections. Please see cassandra-env.sh for more info.