【问题标题】:Bind Cassandra JMX to ip将 Cassandra JMX 绑定到 ip
【发布时间】:2018-05-17 18:01:04
【问题描述】:

我使用的是 Cassandra 3.11.2,无法在特定接口上绑定 JMX。

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

netstat -l
tcp        0      0 *:7199                  *:*                     LISTEN

我的 cassandra-env.sh 如下:

if [ "x$LOCAL_JMX" = "x" ]; then
    LOCAL_JMX=no
fi

# Specifies the default port over which Cassandra will be available for
# JMX connections.
# For security reasons, you should not expose this port to the internet.  Firewall it if needed.
JMX_PORT="7199"

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"
  # if ssl is enabled the same port cannot be used for both jmx and rmi so either
  # pick another value for this property or comment out to use a random port (though see CASSANDRA-7087 for origins)
  JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
  JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=192.168.8.60"
fi

我的印象是 Djava.rmi.server.hostname 会设置 jxm 监听主机。 JMX 连接在这种情况下可以正常工作。

编辑: 它现在正在工作,但我与 JMX 主机的连接被拒绝

root@server:/etc/cassandra# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:domain        *:*                     LISTEN
tcp        0      0 192.168.1.100:7199      *:*                     LISTEN

root@server:/etc/cassandra# nodetool -h 192.168.1.100 status
nodetool: Failed to connect to '192.168.1.100:7199' - ConnectException: 'Connection refused (Connection refused)'

【问题讨论】:

    标签: cassandra jmx


    【解决方案1】:

    您正在寻找的选项是:

    -Dcom.sun.management.jmxremote.host=...
    

    它已在 jdk 1.8.0_101 周围添加,因此使用 1.8.0_171 即可。

    编辑:port 需要设置

    -Dcom.sun.management.jmxremote.port=... 
    

    为此工作。

    此外,由于您在此处使用-Dcom.sun.management.jmxremote.rmi.port=...,您需要禁用 SSL 或将一个端口用于 rmi,一个用于 jmx。

    一个你的用例,你可以有:

    JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.port=$JMX_PORT"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    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.host=..."
    

    或类似的东西

    JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.port=$JMX_PORT"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.ssl=true"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.port=7200"
    JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.host=..."
    

    【讨论】:

    • 仍然没有为我设置 - 正在听 *
    • 我添加了带有 ssl/non ssl 的完整示例。
    • 感谢您提供完整的示例。它现在正在正确收听,但我的连接仍然被 nodetool 拒绝,就像在我的编辑中一样。我想这是一个单独的问题,所以我奖励了赏金作为答案。如果您有任何进一步的建议,请告诉我。谢谢!
    • “连接被拒绝”没有其他错误吗?你设置了登录密码吗?如果是这样,您需要使用 nodetool 添加身份验证参数。 (-u 和 -pw )。你设置了 ssl 吗? (有了这个你有 2 个端口,我不记得需要指定哪一个)
    猜你喜欢
    • 1970-01-01
    • 2010-11-15
    • 2013-02-05
    • 2011-04-15
    • 2022-06-18
    • 1970-01-01
    • 2012-04-16
    • 2017-03-11
    相关资源
    最近更新 更多