Этот узел не был запущен с параметром replSet

Я изучаю курс MongoDBUniversity M101P: MongoDB для разработчиков.

Я использую WiredTiger в MongoDB 3.2.

В настоящее время я занимаюсь темой наборов реплик.

Курс требует, чтобы я создал набор реплик, используя следующий код:

mongod --replSet rs1 --logpath "1.log" --dbpath /data/rs1 --port 27017 --fork

Но я использую Windows, которая не поддерживает fork, поэтому использую эту суть (как рекомендуется администратором курса) Я запустил эти строки одновременно на 3 разных консолях после того, как создал каталоги (с запущенным mongod):

mongod --replSet rs1 --logpath "1.log" --dbpath rs1 --port 27018 --smallfiles --oplogSize64  
mongod --replSet rs1 --logpath "2.log" --dbpath rs2 --port 27019 --smallfiles --oplogSize64  
mongod --replSet rs1 --logpath "3.log" --dbpath rs3 --port 27020 --smallfiles --oplogSize64

Кажется, что все работает нормально; Я вижу, что каталоги были заполнены, и файлы журнала, которые все показывают «ожидание подключения» с соответствующим номером порта.

Наконец, я запускаю следующий код, чтобы объединить серверы в набор реплик:

config = {_id: "rs1", members: [
           { _id: 0, host: "localhost:27018"},
           { _id: 1, host: "localhost:27019"},
           { _id: 2, host: "localhost:27020"}
                                ]
         }

rs.initiate(config)
rs.status()

Который бросает:

"errmsg" : "This node was not started with the replSet option",
"code" : 76

Что я не могу понять, так как я явно использовал параметр --replSet для каждого сервера и действительно предоставил то же имя replSet, что и в файле конфигурации.

Я просмотрел другие вопросы по этой теме, но их мало, и я не могу найти адрес и решить эту проблему для меня. Это говорит о том, что выглядит очевидным из ошибки: мой файл конфигурации должен включать --replSet=rs1, но после прочтения документации я у меня сложилось впечатление, что _id конфигурации, которую я определил, служит этой цели:

_id
Тип: строка

Имя набора реплик. После установки вы не можете изменить имя набора реплик.

_id должен совпадать с replication.replSetName или значением –replSet, указанным для mongod в командной строке.

Кроме того, это ясно показано в видеодемонстрациях материалов курса, как это работает правильно именно так, как я пытаюсь его использовать.

Я в отчаянии и буду очень признателен за помощь.
Джейк


person Jake Stokes    schedule 21.11.2016    source источник


Ответы (1)


Итак, когда я закончил писать этот вопрос, ответ пришел ко мне, как лампочка, что, кажется, случается часто ... но на этот раз я подумал, что оставлю ответ здесь для всех, кто боролся с этим, учитывая некоторую нехватку вопросов/ответов по этой теме на форуме.

Это был простой случай, когда порт по умолчанию использовался при запуске моего файла конфигурации.
Я использовал mongo < init_replica.js для запуска моей конфигурации и объединения серверов для создания набора реплик.

Просто добавив порт, используемый одним из допустимых серверов, он заработал правильно:

mongo --port 27020 < init_replica.js 

Горе мне за это, но я надеюсь, что это поможет тем, кто также изучает этот курс и застрял в чем-то подобном.

Джейк

person Jake Stokes    schedule 21.11.2016