Подтвердить что ты не робот

MongoDB: не может инициировать набор реплик; 'уже имеет данные, не может инициировать набор'

У меня есть экземпляр MongoDB, настроить с помощью файла конфигурации и файла ключа.

Я хотел бы инициировать набор реплик с использованием pymongo. Когда я пытаюсь инициировать набор replcia, выполнив python script на сервере, который станет основным набором реплик, как таковой:

from pymongo import MongoClient

uri = "mongodb://correctWorkingUsername:[email protected]:27017"
c = MongoClient(uri)

config = {'_id': 'RelicaSetName', 'members': [
{'_id': 0, 'host': 'FirstServer:27017'},
{'_id': 1, 'host': 'SecondServer:27017'},
{'_id': 2, 'host': 'ThirdServer:27017'}]}

c.admin.command("replSetInitiate", config)

Появляется сообщение об ошибке:

'SecondSErver:27017' has data already, cannot initiate set

Однако, если я аутентифицируюсь в базе данных с помощью

mongo admin -u correctWorkingUsername -p password

Я могу инициировать репликацию и успешно добавлять элементы:

rs.initiate()
rs.add('SecondServer:27017')

Я не знал, связано ли это с проверкой ключа ключа или тем фактом, что пользователи были УЖЕ созданы на других серверах с помощью script. Каждый сервер также был запущен с конфигурационным файлом mongod.conf, который содержит имя набора реплик.

Почему это не удается? Операции rs.initiate() и rs.add() работают отлично, но python script не работает, хотя может привести к подключению к базе данных.

4b9b3361

Ответ 1

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

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

Что вы должны делать, это запустить узлы, инициализировать набор реплик и затем создать пользователей (только на основном).

пользователи были УЖЕ созданы на других серверах с помощью script

Это основная проблема - единственный способ, которым это могло быть сделано для неинициализированного члена набора реплик, - это то, что он был впервые представлен как набор не replica set node, пользователи были добавлены, а затем это было перезапущен с опцией replSet. Это не правильная последовательность. Для правильного списка шагов проверить документы.