Я поместил все шаги, чтобы инициировать набор реплик в сценарии оболочки. По сути, я пытаюсь преобразовать автономный экземпляр A в набор реплик, который включает в себя один арбитр B и один вторичный узел C. В сценарии приведены следующие шаги:
- Запустить автономный экземпляр без параметра auth.
Создайте пользователя-администратора для базы данных администратора mongodb со следующей ролью:
Successfully added user: {
"user" : "mongodb_admin",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
- Остановить автономный экземпляр A.
- Запустите все три узла (A, B, C) с опцией установки реплик и контролем доступа к файлу ключей.
- Инициировать репликацию в экземпляре A, вызвав rs.initiate.
- Позвоните в rs.status, чтобы проверить, является ли здоровье всех участников равным 1 (в настоящее время в репликасе есть только A)
- Добавьте узел арбитра B и вторичный узел C в репликационный набор.
- Подождите, пока все узлы будут здоровы.
До шага 5 все в порядке. Я могу успешно запустить репликацию.
Но шаг 6 выдает следующую ошибку:
2018-08-27T11:43:47.080+0100 E QUERY [thread1] Error: auth failed :
DB.prototype._authOrThrow@src/mongo/shell/db.js:1608:20 @(auth):6:1
@(auth):1:2
Когда я засыпаю 15 секунд между шагами 5 и 6, все работает отлично.
Но я все еще хочу убедиться, что я все делаю правильно. Если усыпление в порядке, то как я могу убедиться, что 15 секунд можно подождать, прежде чем проверять состояние в шаге 6.
Также я не могу понять, почему он выдает ошибку аутентификации, хотя я использовал тот же пользователя и пароль для запуска набора реплик?
MongoDB версия: 3.6.2