You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cassandra 3.11.2 JMX指定网卡绑定失败及连接被拒求助

解决Cassandra 3.11.2 JMX绑定指定网卡后连接被拒绝的问题

从你的描述来看,JMX已经成功绑定到指定网卡192.168.1.100:7199,但nodetool连接被拒绝,这通常和JMX认证配置、防火墙拦截或者RMI参数设置有关。下面是一步步的排查和解决方法:

1. 检查JMX认证配置

当LOCAL_JMX=no时,Cassandra默认会启用JMX认证,但你的cassandra-env.sh配置里没有明确设置认证相关参数,这会导致连接请求被拒绝。

临时关闭认证(仅测试环境)

如果是测试环境,可以在else块中添加关闭认证和SSL的参数:

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 -Djava.rmi.server.hostname=192.168.1.100"
# 添加以下两行关闭认证和SSL
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
fi

生产环境配置认证

生产环境建议开启认证,需要:

  • 创建JMX认证文件(默认路径是/etc/cassandra/jmxremote.password和/etc/cassandra/jmxremote.access)
  • 在cassandra-env.sh中添加认证参数:
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 -Dcom.sun.management.jmxremote.access.file=/etc/cassandra/jmxremote.access"

注意要设置文件权限为600,并确保Cassandra进程用户拥有读取权限。

2. 验证防火墙设置

虽然netstat显示端口在监听,但防火墙可能拦截了外部连接请求。执行以下命令开放7199端口(以iptables为例):

iptables -A INPUT -p tcp --dport 7199 -s 192.168.1.0/24 -j ACCEPT
# 保存规则
iptables-save > /etc/iptables/rules.v4

如果使用ufw:

ufw allow from 192.168.1.0/24 to any port 7199
ufw reload

3. 确认Cassandra启动时加载了正确的JVM参数

查看Cassandra的启动日志(默认路径/var/log/cassandra/system.log),搜索JVM_OPTS相关的日志,确认java.rmi.server.hostname、jmx.remote.port等参数是否正确加载。例如:

INFO  [main] 202x-xx-xx xx:xx:xx,xxx CassandraDaemon: JVM Arguments: [-Dcassandra.jmx.remote.port=7199, -Dcom.sun.management.jmxremote.rmi.port=7199, -Djava.rmi.server.hostname=192.168.1.100, ...]

4. 用JMX工具直接测试连接

使用jconsole工具测试JMX连接,确认是否是nodetool的问题:

jconsole 192.168.1.100:7199

如果jconsole能连接,说明问题出在nodetool的配置上,可以检查~/.cassandra/nodetoolrc文件,确保里面的参数和cassandra-env.sh匹配:

host=192.168.1.100
port=7199

5. 检查端口占用情况

确保7199端口没有被其他进程占用:

lsof -i :7199

如果显示的进程不是Cassandra,需要停止占用进程或者修改JMX端口。

完成以上步骤后,重启Cassandra服务,再尝试用nodetool连接:

systemctl restart cassandra
nodetool -h 192.168.1.100 status

内容的提问来源于stack exchange,提问作者ozzieisaacs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:18:24