2016-09-28 2 views
0

J'ai trois instances sur EC2, chacune avec mongo de service, mis en place avec jeu de réplicas, à savoir, un primaire (192.168.1.1), un secondaire (192.168.1.2) et un arbitre (192.168.1.3).Ajouter un nouveau membre dans mongo et empêcher l'exception d'erreur dans l'application

J'ai plusieurs applications qui se connectent avec mongo.

Ma question est la suivante:

Si j'ajouter un autre membre dans la réplique, je dois changer toutes les applications dans la configuration de la connexion pour inclure le nouveau membre?

Parce que je le demande. Supposons que ip avec le .1 final soit primaire, .2 soit secondaire, puis ajoute un nouveau membre à la fin ip .4. Et je n'inclue pas ce nouveau membre dans les paramètres de base de données d'application. Et si le premier tombe, l'arbitre choisit ip avec .4 pour être le nouveau primaire. Toutes les applications commenceront à lancer une exception.

Comment puis-je "réparer", de sorte que toujours je dois ajouter un nouveau membre n'a pas besoin de changer la configuration de la base de données de l'application. Imaginez si je dois ajouter des membres 'n'.

Avez-vous un moyen de configurer l'application, sachant que mon application est en PHP, d'identifier le primaire seul sans avoir à ajouter la configuration de l'hôte?

+0

C'est difficile; à moins que vous ne soyez assez chanceux pour que votre ensemble initial d'hôtes reste inclus dans le jeu de réplicas pour toujours, et qu'il y en ait au moins un actif et disponible, vous devrez éventuellement changer la configuration de l'application. Les différentes solutions à ce problème sont appelées [tag: service-discovery] et impliquent que votre application contacte un 3ème système pour savoir où il peut se connecter au jeu de réplicas. –

Répondre

0

Pas besoin de changer quoi que ce soit dans l'application. Vous venez d'ajouter un nouveau noeud au jeu de réplicas avec la commande rs.add ("adresse: port"). Si vous avez trois nœuds (primaire et 2x secondaire), vous ne devriez avoir aucun arbitre, si tous ces nœuds sont des membres votants. (Le nombre de votes doit toujours être un nombre impair)

Vous pouvez "choisir" l'ordre du patrimoine principal avec des valeurs prioritaires. Si vous définissez votre priorité .1 nœuds f.ex. à 3, .2 nœuds priorité à 2 et conserver le dernier secondaire comme priorité 1, .1 reste primaire s'il le peut et quand il ne peut pas, .2 est sélectionné comme primaire ... Le point est que, il suffit que votre application se connecte à un nœud de jeu de réplicas et il (l'application) obtient automatiquement des informations, quels sont les autres nœuds de cet ensemble de réplicas et "qui" est primaire. Avec le jeu de réplicas à trois nœuds, vous devez toujours avoir deux nœuds opérationnels (majorité: 2/3) ou votre dernier nœud ne doit pas être élu en tant que nœud primaire.

+0

Cela fonctionnera correctement, à condition qu'il n'y ait que quelques modifications à la réplique. Si vous finissez par effectuer de nombreux changements (par exemple en ajoutant cinq nouveaux hôtes, puis en supprimant les trois hôtes d'origine), la chaîne de connexion de l'application ne sera plus valide car elle n'inclut pas l'adresse de l'un des hôtes actifs. –