1 votes

Extension du contrôle de santé HAProxy pour surveiller l'état primaire et secondaire de MongoDB

Question de suivi concernant le bilan de santé de MongoDB avec HAProxy

Comment construire un bilan de santé de MongoDB dans HAProxy ?

La solution actuelle fonctionne bien lorsque l'objectif est de déterminer si Mongo répond, mais j'essaie d'étendre la fonctionnalité pour effectuer un suivi basé sur le statut de la base de données, primaire ou secondaire. J'ai essayé des variations de isMaster sans succès. Du côté de MongoDB, avec mongosniff ou wireshark, les résultats se présentent comme une erreur d'analyse de la requête et aucune réponse n'est renvoyée à l'hôte HAProxy.

En utilisant le protocole Mongo wire, existe-t-il une requête permettant d'obtenir l'état d'un serveur MongoDB donné au lieu de la solution actuelle qui ne permet de suivre que la réponse de la base de données ?

0 votes

L'autre option est d'écrire un xinetd script qui écoute sur un autre port, qui exécute une commande Mongo et renvoie le statut. J'ai fait cela en utilisant github.com/olafz/percona-clustercheck pas pour mongo, mais pour mysql. l'idée de base devrait être la même.

0 votes

J'ai écrit la réponse originale et si je devais essayer de le faire, j'utiliserais la commande isMaster - c'est ce que les pilotes utilisent, cela ne nécessite pas d'authentification, ni de verrouillage, etc. Vous devriez chercher à ce que le booléen situé ici soit vrai pour les écritures, faux pour les lectures secondaires : docs.mongodb.org/manual/reference/command/isMaster/ Je ne suis pas sûr que cela soit vraiment utile, étant donné la manière dont les pilotes fonctionnent.

2voto

karacs Points 21

J'ai créé ce contrôle tcp en suivant le guide de la question sur le contrôle de santé de MongoDB ( Comment construire un bilan de santé de MongoDB dans HAProxy ? ) et en utilisant la commande isMaster ( https://docs.mongodb.com/manual/reference/command/isMaster/#isMaster.ismaster ) dans mongodb comme mentionné par Adam C dans un commentaire ci-dessus :

tcp-check send-binary 3d00000001000000ffffffffd407000000000000746573742e24636d640000000000ffffffff170000000169734d617374657200000000000000f03f00
tcp-check expect binary 0869736d61737465720001

Le binaire envoyé est cette commande :

mongo --host <IP> --port <port> --eval 'db.isMaster().ismaster'

Le binaire attendu est l'élément "ismaster" du document de réponse. La partie importante est la valeur finale qui est 01 s'il s'agit d'une base de données primaire et 00 s'il s'agit d'une base de données secondaire.

J'ai utilisé MongodDB 3.4.4 et HAproxy 1.5.18 .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X