MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment initialiser l'ensemble de réplication mongodb sans appeler rs.initiate() ?

Réponse courte / tl;dr

Non.

Réponse légèrement plus longue

Non, car il est logique d'utiliser le shell.

Répondre

Lorsque vous configurez un jeu de répliques, vous avez généralement plusieurs membres. Tant que le jeu de répliques n'est pas initialisé, aucun des membres ne détient la configuration nécessaire. Le nœud sur lequel vous initialisez le jeu de réplicas devient principal, stockant la configuration. Maintenant, vous ajoutez des membres soit en utilisant le rs.add commande ou en utilisant rs.reconfig . Ce qui se passe alors, c'est que le principal contacte le membre ajouté, la configuration est synchronisée et quelques autres choses. Il est recommandé que les membres du jeu de réplicas ordinaires soient égaux afin qu'un nœud échoue, il n'y a aucun inconvénient qu'un autre nœud devienne principal et que le nouveau principal puisse rester principal jusqu'à ce qu'il tombe en panne pour une raison ou l'autre lui-même.

Donc, si vous démarrez un membre du jeu de répliques, d'où devrait-il obtenir sa configuration ? Décider par lui-même ce qu'il doit faire ? Cela ne fonctionnerait pas bien dans un cluster. Comment doit-il découvrir les autres membres et leur config ? N'oubliez pas que les membres du jeu de réplicas peuvent se trouver dans différents centres de données. Et s'il y avait un --IamPrimaryDoAsISay option, que se passerait-il s'il y avait un autre primaire actuellement dans le cluster ? Et comment une situation dans laquelle plus d'un membre a été lancé avec cette option devrait-elle être traitée ? Un step down de l'autre serveur ? Peut-être simplement parce que vous avez remplacé une glacière ? Ou l'instance qui vient de démarrer ne doit-elle rien faire alors qu'il y avait déjà une instance primaire ? Quel sens aurait alors l'option en premier lieu ?

Et toutes ces complications juste pour empêcher une seule commande du shell ?

Remarque :Si vous souhaitez un seul serveur, démarrez simplement une instance autonome (un mongod sans le --replSet option). si vous souhaitez explorer les possibilités d'un jeu de répliques, vous avez besoin de plusieurs membres.