Diagnostiquer un serveur relais Medulla
Les serveurs relais Medulla assurent l'intermédiaire entre le serveur Medulla principal et les machines clientes.
Ils sont notamment impliqués dans la distribution des ordres et des packages vers les machines qui leur sont associées.
Lorsqu'un relais rencontre un problème, les symptômes peuvent être :
- des machines qui ne peuvent plus recevoir de déploiements ;
- des packages qui ne sont pas disponibles sur certaines machines ;
- des erreurs
ABORT RELAY DOWN; - des erreurs
ABORT ALTERNATIVE RELAYS DOWN; - des erreurs
ABORT INFO RELAY MISSING; - des machines associées à un relais qui n'existe plus ;
- un problème de synchronisation des packages.
Information :
Un serveur relais Medulla contient notamment un serveur XMPP, un agent relais et un serveur Guacamole. Le diagnostic doit donc permettre de distinguer un problème d'accessibilité du serveur, d'enregistrement du relais, d'affectation des machines ou de distribution des packages.
1. Identifier le symptôme
Commencez par déterminer si le problème concerne :
| Symptôme | Diagnostic prioritaire |
|---|---|
ABORT RELAY DOWN |
Vérifier que le relais existe et qu'il est accessible |
ABORT ALTERNATIVE RELAYS DOWN |
Vérifier les relais alternatifs disponibles |
ABORT INFO RELAY MISSING |
Vérifier l'affectation du relais à la machine |
| Une seule machine ne fonctionne pas | Vérifier son champ groupdeploy et sa règle d'affectation |
| Toutes les machines d'un relais sont impactées | Vérifier en priorité le relais lui-même |
| Un package est absent sur un relais | Vérifier la distribution et la synchronisation du package |
2. Vérifier que le serveur relais est accessible
Lors d'une erreur :
ABORT RELAY DOWN
le document d'exploitation indique que le relais peut être éteint ou ne plus exister.
Commencez par tester son accessibilité réseau :
ping IP_DU_RELAIS
Puis, si l'accès SSH est autorisé :
ssh root@IP_DU_RELAIS
Remarque :
L'absence de réponse au ping ne permet pas à elle seule de conclure que le serveur est arrêté, certains environnements pouvant filtrer ICMP. Le test SSH permet de compléter le diagnostic.
Si le relais est inaccessible, vérifiez :
- qu'il est allumé ;
- que son adresse IP est correcte ;
- que le routage entre le serveur principal et le relais fonctionne ;
- que les flux nécessaires ne sont pas bloqués.
3. Vérifier le dernier état connu du relais
Si le relais ne répond pas, consultez son dernier état enregistré dans Medulla :
SELECT *
FROM uptime_machine
WHERE hostname = "NOM_DU_RELAIS"
ORDER BY id DESC
LIMIT 1\G;
Le champ status indique son dernier état connu :
1: considéré comme en ligne ;0: considéré comme hors ligne.
Le champ updowntime permet de connaître la durée pendant laquelle le relais est resté dans cet état.
4. Vérifier que le relais est toujours déclaré et activé
Pour afficher les relais connus par Medulla :
SELECT id, nameserver, enabled
FROM relayserver;
Vérifiez notamment :
- que le relais concerné apparaît dans la liste ;
- que son nom correspond bien au serveur attendu ;
- la valeur de son champ
enabled.
Lorsque :
enabled = 1
le document d'exploitation indique que ce relais peut être fourni aux machines par le substitut assessor.
Attention :
Un relais qui n'existe plus mais qui reste activé dans la configuration peut continuer à être proposé aux machines et provoquer des erreurs de déploiement.
5. Cas d'un relais qui n'existe plus
Si vous avez confirmé qu'un relais a été définitivement supprimé ou n'est plus utilisé, le document d'exploitation fournit la commande suivante pour le désactiver :
UPDATE relayserver
SET enabled = 0
WHERE id = <id_du_relais>;
Il indique également de vérifier l'entrée correspondante dans la table machines :
SELECT id, enabled
FROM machines
WHERE hostname = 'NOM_DU_RELAIS';
Puis, si le serveur est effectivement retiré :
UPDATE machines
SET enabled = 0
WHERE id = <id>;
Attention :
Ces commandes modifient directement la base Medulla. Elles doivent uniquement être utilisées lorsqu'il a été confirmé que le relais est définitivement retiré, après sauvegarde de la base de données.
6. Diagnostiquer ABORT RELAY DOWN
Le statut :
ABORT RELAY DOWN
indique que Medulla ne peut pas utiliser le relais prévu pour le déploiement.
Effectuez les contrôles suivants :
- tester le relais avec
ping; - tester son accès SSH ;
- vérifier son dernier état dans
uptime_machine; - vérifier sa présence dans
relayserver; - vérifier la valeur de
enabled; - si le relais a été supprimé, vérifier qu'il n'est plus proposé aux machines.
7. Diagnostiquer ABORT ALTERNATIVE RELAYS DOWN
Le statut :
ABORT ALTERNATIVE RELAYS DOWN
signifie qu'aucun des relais alternatifs utilisables n'est disponible.
Le document d'exploitation recommande dans ce cas de vérifier les relais.
Pour chacun des relais susceptibles d'être utilisés :
- vérifiez son accessibilité réseau ;
- vérifiez son dernier état connu ;
- vérifiez qu'il est toujours activé dans
relayserver.
Information :
Si plusieurs relais deviennent indisponibles simultanément, recherchez également un problème commun de réseau ou d'infrastructure plutôt qu'une panne individuelle de chaque relais.
8. Diagnostiquer ABORT INFO RELAY MISSING
Le statut :
ABORT INFO RELAY MISSING
indique que les informations concernant le relais associé à la machine sont absentes.
Le document d'exploitation donne notamment comme cas possible :
- un relais supprimé après avoir été attribué à la machine ;
- une machine dont le champ
groupdeployn'est pas renseigné.
Le champ :
groupdeploy
de la table machines contient le JID du relais associé à la machine.
Vérifiez donc que la machine possède bien une valeur groupdeploy.
Par exemple :
SELECT id, hostname, groupdeploy
FROM machines
WHERE hostname = 'NOM_DE_LA_MACHINE';
Si groupdeploy est vide, la machine n'est associée à aucun relais.
9. Vérifier que le relais indiqué dans groupdeploy existe
Une valeur présente dans groupdeploy n'est pas suffisante : elle doit correspondre à un relais qui existe toujours.
Affichez les relais disponibles :
SELECT id, nameserver, jid, enabled
FROM relayserver;
Comparez ensuite le JID du relais avec la valeur groupdeploy de la machine.
Attention :
Si groupdeploy référence un ancien relais qui a été supprimé, Medulla peut retourner ABORT INFO RELAY MISSING.
10. Corriger une machine sans relais associé
Après avoir identifié le relais correct, le document d'exploitation fournit comme exemple :
UPDATE machines
SET groupdeploy = 'agent@medulla-interne/mainrelay'
WHERE id = <id_machine>;
La valeur utilisée doit correspondre au JID du relais approprié présent dans la table relayserver.
Attention :
Cette requête modifie directement l'affectation d'une machine. Elle ne doit pas être appliquée sans avoir auparavant identifié la raison pour laquelle l'affectation automatique n'a pas fonctionné. Dans le cas contraire, le problème risque de se reproduire lors d'une prochaine reconfiguration.
11. Vérifier la règle d'attribution du relais
Medulla peut attribuer les machines à un relais en fonction de règles réseau.
Le document d'exploitation fournit un exemple permettant de tester si un subnet correspond à une expression régulière définie dans les règles d'attribution :
SELECT '10.10.19.0/24'
REGEXP '^10\.62\.19\.0\/24$';
Dans cet exemple :
10.10.19.0/24correspond au subnet de la machine ;^10\.62\.19\.0\/24$correspond à la règle à tester.
Le résultat permet de déterminer si le subnet correspond ou non à la règle.
Conseil :
Si plusieurs machines d'un même réseau sont affectées au mauvais relais, recherchez en priorité une erreur dans la règle d'attribution plutôt qu'une anomalie individuelle sur chaque machine.
12. Vérifier les informations réseau de la machine
Pour comprendre pourquoi une machine reçoit ou non un relais particulier, vous pouvez afficher ses informations réseau connues par Medulla :
SELECT
m.hostname,
m.ippublic,
m.ip_xmpp,
m.macaddress AS machine_mac,
n.ipaddress AS network_ip,
n.broadcast,
n.gateway,
n.mask,
n.mac AS network_mac
FROM xmppmaster.machines AS m
INNER JOIN xmppmaster.network AS n
ON n.machines_id = m.id
WHERE m.hostname = 'NOM_DE_LA_MACHINE';
Vérifiez notamment que le réseau remonté par la machine correspond au réseau attendu par la règle d'attribution du relais.
13. Identifier les relais sans aucune machine associée
Pour lister les relais qui n'ont aucun client associé, le document d'exploitation fournit la requête suivante :
SELECT nameserver
FROM relayserver
WHERE relayserver.jid NOT IN (
SELECT groupdeploy
FROM machines
WHERE agenttype = 'machine'
);
Cette requête permet d'identifier les relais actuellement déclarés mais qui ne sont utilisés par aucune machine.
Information :
Un relais sans client n'est pas nécessairement en erreur. Il peut avoir été installé en prévision d'un nouveau site ou être utilisé comme relais alternatif. Cette requête doit donc être interprétée dans le contexte de l'architecture.
14. Vérifier la disponibilité des packages sur le relais
Lorsqu'un relais est accessible mais qu'un package ne peut pas être déployé, vérifiez que le package est disponible sur le serveur utilisé pour sa distribution.
Une erreur telle que :
Transfer error: Package Server does not have this package
indique que le serveur de packages utilisé ne dispose pas du package demandé.
Dans cette situation, le problème ne signifie pas nécessairement que le relais lui-même est hors ligne.
Il faut distinguer :
| Erreur | Interprétation |
|---|---|
ABORT RELAY DOWN |
Le relais n'est pas disponible |
ERROR TRANSFER FAILED |
Le serveur utilisé ne dispose pas du package |
ABORT TRANSFER FAILED |
Le transfert du package a échoué |
15. Vérifier Syncthing en cas de problème de synchronisation
Le document d'exploitation Medulla documente un cas dans lequel Syncthing affiche une erreur liée à la taille du buffer UDP :
failed to sufficiently increase receive buffer size
(was: 208 kiB, wanted: 2048 kiB, got: 416 kiB)
Dans ce cas précis, il recommande d'augmenter les tailles maximales des buffers de lecture et d'écriture :
sysctl -w net.core.rmem_max=2500000
sysctl -w net.core.wmem_max=2500000
Attention :
Ces commandes correspondent à un problème Syncthing précis, identifiable par le message d'erreur ci-dessus. Elles ne doivent pas être appliquées systématiquement à tout problème de synchronisation.
16. Déterminer si le problème vient du relais ou de la machine
Avant d'intervenir sur le relais, déterminez l'étendue du problème.
| Constat | Orientation du diagnostic |
|---|---|
| Une seule machine est affectée | Vérifier la machine et son groupdeploy |
| Plusieurs machines du même relais sont affectées | Vérifier le relais |
| Toutes les machines d'un subnet sont mal affectées | Vérifier la règle d'attribution |
| Les machines communiquent mais certains packages sont absents | Vérifier la disponibilité et la synchronisation des packages |
| Le relais est inaccessible | Vérifier le serveur et les flux réseau |
17. Procédure de diagnostic rapide
Lorsqu'un serveur relais Medulla semble rencontrer un problème, effectuez les contrôles suivants dans cet ordre :
- identifier les machines et les fonctions impactées ;
- relever le statut exact du déploiement s'il existe ;
- tester l'accessibilité du relais avec
pinget SSH ; - vérifier son dernier état dans
uptime_machine; - vérifier sa présence et son état
enableddansrelayserver; - vérifier le champ
groupdeploydes machines concernées ; - vérifier que le JID de
groupdeploycorrespond à un relais existant ; - si l'affectation semble incorrecte, contrôler la règle d'attribution ;
- si seuls les packages sont affectés, vérifier leur disponibilité et leur synchronisation ;
- consulter les logs Syncthing si une erreur de synchronisation est suspectée.
18. Tableau de diagnostic rapide
| Symptôme | Cause possible | Premier contrôle |
|---|---|---|
ABORT RELAY DOWN |
Relais éteint ou supprimé | ping, SSH et uptime_machine |
ABORT ALTERNATIVE RELAYS DOWN |
Aucun relais alternatif disponible | Contrôler les différents relais |
ABORT INFO RELAY MISSING |
Relais absent ou groupdeploy vide |
Contrôler groupdeploy |
| Relais connu mais plus utilisé | Ancienne entrée toujours activée | Contrôler relayserver.enabled |
| Machine affectée au mauvais relais | Règle d'attribution incorrecte | Tester le subnet avec la règle REGEXP |
| Relais sans aucune machine | Relais inutilisé ou de secours | Requête sur groupdeploy |
| Package absent sur le relais | Problème de distribution ou synchronisation | Vérifier la disponibilité du package |
| Erreur de buffer Syncthing | Buffer UDP insuffisant | Rechercher le message exact dans les logs |
19. Informations à collecter si le problème persiste
Avant de poursuivre le diagnostic ou d'ouvrir un ticket support, collectez :
- le hostname du relais ;
- son adresse IP ;
- le résultat du test d'accessibilité ;
- son dernier état dans
uptime_machine; - son entrée dans
relayserver; - la valeur de
enabled; - le hostname d'une machine affectée ;
- la valeur
groupdeployde cette machine ; - le statut exact du déploiement ;
- le message complet de l'audit ;
- si le problème concerne les packages, le package et le relais concernés ;
- les éventuelles erreurs Syncthing observées.
Recommandation :
Pour diagnostiquer un relais Medulla, commencez par distinguer trois niveaux : le relais est-il accessible ?, la machine est-elle correctement associée à ce relais ? et le relais dispose-t-il des ressources nécessaires au déploiement ? Cette approche permet de distinguer rapidement une panne du serveur relais d'un problème d'affectation ou de synchronisation des packages.