J'ai mis toutes les étapes pour initier un replica-set dans un shell script. Fondamentalement, j'essaie de convertir une instance autonome A en un replica-set qui comprend un arbitre B et un nœud secondaire C. Ce sont les étapes suivantes dans le script :
-
Démarrer l'instance standalone sans paramètre d'authentification.
-
Créez un utilisateur admin pour la base de données mongodb admin avec le rôle suivant :
Successfully added user: { "user" : "mongodb_admin", "roles" : [ { "role" : "root", "db" : "admin" } ] }
-
Arrêtez l'instance autonome A.
-
Démarrer les trois nœuds (A, B, C) avec une option de réplique et un contrôle d'accès aux fichiers clés.
-
Initialiser le replicaset sur l'instance A en appelant rs.initiate.
-
Appeler rs.status pour vérifier si la santé de tous les membres est 1 (actuellement il y a seulement A dans le replicaset)
-
Ajoutez le nœud arbitre B et le nœud secondaire C au replicaset.
-
Attendez que tous les nœuds soient sains.
Tout va bien jusqu'à l'étape 5. Je suis capable d'initier avec succès un replicaset. Mais à l'étape 6, l'erreur suivante se produit :
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
Lorsque je mets une pause de 15 secondes entre les étapes 5 et 6, cela fonctionne parfaitement bien. Mais je veux quand même m'assurer que je fais les choses correctement. Si la mise en veille est correcte, alors comment puis-je m'assurer que 15 secondes sont suffisantes pour attendre avant de vérifier le statut à l'étape 6. Je n'arrive pas non plus à comprendre pourquoi il y a une erreur d'authentification alors que j'ai utilisé le même utilisateur et le même mot de passe pour initier le replica-set ?
Version de MongoDB : 3.6.2