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

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

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

from pymongo import MongoClient

uri = "mongodb://correctWorkingUsername:password@localhost: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')

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

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

1 ответов


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

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

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

пользователи были уже созданы на других серверах скриптом

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