De nombreux composants de Shinken Entreprise peuvent être installés et configurés de manière à former une architecture hautement disponible. Dans le page Haute disponibilité des démons de Shinken Entreprise sont décrites les procédures permettant de mettre en place des démons Shinken de remplacement pour améliorer la disponibilité.
Cependant, un certain de nombre de ces démons et leurs modules associés s'appuient sur une base Mongo pour fonctionner. Pour améliorer la résistance aux pannes de la plateforme Shinken dans son ensemble, on peut également s'assurer que la base Mongo soit plus robuste.
Dans cette documentation est décrite de manière détaillée comment mettre en place des mécanismes de haute disponibilité pour la base Mongo.
Avant d'aborder les étapes de configuration et les détails techniques, cette section présente quelques points importants à savoir avant de continuer.
Voici un lexique décrivant certains termes utilisés dans la suite de cette documentation:
Dans la procédure d'installation, des commandes doivent être lancées. On distingue ces commandes en 2 types:
Le commandes shell Unix, qui sauf mention contraire, doivent être lancées en tant que root. Elles seront présentées comme suivant:
echo "commande shell" |
Les commandes Mongo doivent elles être lancées dans un shell Mongo (les instructions pour ouvrir le bon shell Mongo seront présentes avant ces commandes). Elles seront présentées comme suivant:
commande mongo |
Ce qui est mis en place dans cette documentation est la haute disponibilité (réplication) de la base Mongo, et non une répartition de charge entre plusieurs nœuds Mongo (sharding).
Un load balancing entre plusieurs nœuds Mongo permet d'améliorer la disponibilité de la base lorsqu'elle est soumise à des contraintes importantes (de nombreux utilisateurs en parallèle) en répartissant la charge mise sur chaque nœud Mongo.
On se concentre ici plutôt sur la haute disponibilité, qui essaye de garantir l'intégrité des données et leur accès. Les données sont donc répliquées entre plusieurs nœuds Mongo, au lieu d'être reparties sur plusieurs nœuds.
Cette nuance a la conséquence suivante sur l'architecture mise en place:
Détail sur les démons Mongo
Dans une installation Mongo classique, on possède sur un machine un démon qui se charge du stockage des données (mongod). Ce démon représente dans ce cas là la base Mongo en elle même.
Pour obtenir une architecture distribuée permettant de mettre en place de la haute disponibilité, il faut répartir l'installation de Mongo sur plusieurs machines, qu'on appelle "nœud" dans la suite de cette documentation.
Chaque nœud Mongo possède plusieurs démons Mongo qui permettent de gérer la base de données. Dans cette installation, on a 3 nœuds:
Dans une architecture distribuée hautement disponible, il faut des démons supplémentaires pour que Mongo puisse gérer la réplication. Sur chaque noeud, les démons utilisés sont les suivants:
Un nœud du cluster Mongo a alors l'architecture décrite dans le schéma ci-contre.
Dans ce schéma, on a donc les 3 démons présents:
|
Chaque noeud du cluster interagit comme décrit sur le schéma ci-contre.
Dans ce schéma, chaque noeud constituant du cluster possède les démons décrits précédemment. Shinken effectue ses requêtes de manière locale sur le démon mongos, qui ensuite s'occupe de l'aspect cluster de Mongo et du bon traitement et acheminement des données.
Du point de vue de Shinken, la transformation de Mongo en un cluster Mongo est transparente.
Les requêtes sont toujours faites sur le même port et Shinken n'a pas conscience de la haute dispoinibilité de Mongo. Cela permet d'avoir 2 systèmes plus indépendants et leur association plus facilement configurable.
|
Pour la mise en place du cluster Mongo, il faut que les conditions suivantes soient réunies:
Comme indiqué précédemment, il faut que chaque serveur puisse supporter la charge de requêtes à eux seuls, et ce en permanence |
Pour tirer un maximum d'avantages de l'architecture haute disponibilité, il est plus judicieux dans le cas ou les serveurs du cluster sont des VM de ne pas les mettre sur le même hyperviseur (si possible). En effet, un problème sur l'hyperviseur pourrait alors affecter toutes les VM en même temps et rendre l'architecture haute disponibilité inutile. |
On installe pas Mongo tout seul, on utilise celui fournit par Shinken !!!
Synchronizer crash à chaque changement de primary (quand le primary tombe et quand il revient, puisqu'a chaque fois il y a une élection d'un nouveau primary et pendant ce temps on a personne)
SLA redémarre tant qu'il ne trouve pas de master et au final c'est bon
La retention mongo fait des retry, donc si l'election du nouveau primary se fait suffisamment rapidement, pas de pb. Aussi, si le changement de primary n'arrive pas pendant une sauvegarde de la rétention, le module va meme pas le remarquer.
Checks mongo, pas top mais c'est ce qu'on a de base de livré dans Shinken et ca fait le boulot.