Есть ли какое-либо решение для «nodetool: не удалось подключиться к ‘127.0.0.1: 7199’ — ConnectException: ‘Отказано в подключении (отказано в подключении)'»?

#cassandra #nodetool

#кассандра #nodetool

Вопрос:

В моем cassandra кластере доступны все узлы.

Но для одного узла, когда я проверяю статус, он отображается как:

 "nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'."
 

Поскольку я видел некоторые исправления, я попытался перезапустить службу cassandra после настройки JVM_OPTS="$JVM_OPTS -Djava.rmi.server.hostname=127.0.0.1" . Но опять же он выдает тот же статус, что и:

 "nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused (Connection refused)'."
 

Может кто-нибудь предложить другое решение?

Ответ №1:

Можете ли вы отредактировать свой вопрос с помощью фактической 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, по умолчанию) привязан к тому же IP, что и сам узел Cassandra.

По сути, если бы вы должны были прокомментировать локальные / удаленные 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.