Соединение MongoDB отказалось от локального узла при подключении к набору реплик

У меня есть набор реплик, состоящий из четырех узлов (ux002, ux009, ux019, ux020). У меня есть программа, которую я хотел бы запустить параллельно на каждом из тех же четырех узлов, которые подключаются к этому набору реплик с помощью драйвера Mongo Java.

Проверка состояния набора реплик показывает, что все четыре узла работают нормально, однако программа выдает следующее предупреждающее сообщение на всех четырех узлах:

12 ноября 2014 г. 14:34:40 Обновление com.mongodb.ConnectionStatus$UpdatableNode ПРЕДУПРЕЖДЕНИЕ: сервер не работает: ux009/127.0.1.1:27017 — java.io.IOException — сообщение: не удалось подключиться к [ux009/127.0. 1.1:27017] bc:java.net.ConnectException: в соединении отказано

Однако на каждом узле сервер, который не работает, — это тот, на котором запущена программа. т.е. Я запускаю программу на ux009, и она говорит мне, что ux009 не работает. Я запускаю его на ux002, он говорит мне, что ux002 не работает.

Я сделал до глупости простую программу, чтобы проверить, что с моим исходным кодом что-то не так, но то же самое предупреждение остается:

public static void main(String[] args) throws Exception {
  List<ServerAddress> addrs = new ArrayList<>();

  if (args.length == 0) {
    addrs.add(new ServerAddress("localhost", 27017));
  } else {
    for (String a : args) {
      String[] host = a.split(":");
      addrs.add(new ServerAddress(host[0], Integer.valueOf(host[1])));
    }
  }

  mongo = new Mongo(addrs);
  Thread.sleep(5000); // Sleep to give it time to print messages
  mongo.close();
}

И я запускаю его следующим образом:

java -jar mongo-test.jar ux002:27017 ux009:27017 ux019:27017 ux020:27017

Может быть, mongod настроен неправильно? Или, может быть, я неправильно использую Java API?

Драйвер Mongo Java версии 2.9.3, а mongod версии 2.6.5.

Спасибо заранее! -Джим


person jrwilliams    schedule 12.11.2014    source источник
comment
У вас установлен bind_ip? Если это так, возможно, MongoDB не настроен для прослушивания на локальном хосте. Вы также можете дважды проверить журнал mongod, чтобы убедиться, что он запущен, проверить наличие ошибок и дважды проверить номер порта.   -  person helmy    schedule 12.11.2014
comment
Также, вероятно, стоит обновиться до последней версии драйвера Java, если это возможно, 2.12.4 должна быть последней.   -  person helmy    schedule 12.11.2014
comment
Привет, Хелми, спасибо! Кажется, что mongod был запущен с bind_ip, установленным только на IP-адрес основного узла. Кажется, теперь все работает :)   -  person jrwilliams    schedule 13.11.2014


Ответы (2)


IP немного странный для локального хоста:

ux009/127.0.1.1:27017

Я ожидал, что это будет:

ux009/127.0.0.1:27017

Скорее всего, кто-то жирно перебрал IP-адрес в /etc/hosts на каждой машине.

person Rob Moore    schedule 13.11.2014

Публикация ответа здесь для полноты. Проблема заключалась в том, что для параметра bind_ip в файле конфигурации mongod был установлен IP-адрес только одного из узлов. Спасибо helmy за то, что заметил это.

person jrwilliams    schedule 13.11.2014