Détection lorsqu'un serveur fonctionne sur batterie UPS

24

J'ai un serveur domestique (HP Proliant ML310 G4) que j'ai acheté à mon employeur il y a environ un mois. Le serveur exécute Debian Linux et je l'utilise pour à peu près tout. Je peux m'en tirer car mes besoins ne sont pas si exigeants, donc le serveur est rarement sous de lourdes charges à un moment donné. Ce serveur possède une baie RAID1 de 2 To (avec un disque de secours) gérée par mdadm que j'utilise pour le partage de fichiers sur mon réseau via Samba. J'exécute le système d'exploitation sur un disque dur plus petit qui ne fait pas partie de la matrice.

J'ai le serveur alimenté par un petit onduleur de 255 watts parce que j'en ai besoin pour résister à des fluctuations de puissance mineures sans tomber. Ceci est très important car un arrêt brutal impur (provoqué par une coupure de courant ou une panne de courant) peut gâcher la matrice RAID, ce qui s'est déjà produit à une occasion.

En cas de panne de courant, j'estime que l'onduleur ne dispose que de 10 à 15 minutes d'alimentation. Il peut y en avoir plus, mais je ne veux pas supposer automatiquement qu'il y en a. Cela suffit pour surmonter les pannes d'électricité qui durent quelques minutes ou moins. Cependant, si l'alimentation est coupée pendant plusieurs heures, j'ai besoin que le serveur se ferme correctement automatiquement avant que l'alimentation de l'onduleur ne tombe en panne. Nous espérons que cela empêchera l'intégrité du RAID d'être arrosée dans ces situations.

Ce genre de chose est facile sur un ordinateur portable car il dispose de capteurs intégrés pour déterminer quand il fonctionne sur batterie, mais ce serveur ne fonctionne pas (pour autant que je sache). J'ai une configuration réseau inhabituelle où mon modem DSL est séparé de mon routeur. Le routeur est également sur l'onduleur, ce qui me permet de me connecter via mon ordinateur portable et d'arrêter le serveur en cas de panne de courant. Malheureusement, cela ne fonctionne que si je suis là au moment de le faire. J'ai besoin d'une solution qui fonctionne toujours, que je sois là pour intervenir ou non.

Étant donné que mon modem DSL n'est pas sur l'onduleur, il tomberait avec tout le reste en cas de panne de courant. Je l'ai installé comme ça délibérément parce que j'ai une idée sur la façon de résoudre ce problème: je pensais à écrire un script qui pingerait google.com ou un autre site à fort trafic / haute disponibilité. Si le ping se termine avec succès, le serveur continuera de fonctionner. Si le ping échoue (parce que le modem est éteint), le script penserait que l'alimentation est coupée et dirait au serveur de s'arrêter. Je voudrais ajouter le script à Cron et l'exécuter toutes les 5 minutes. Nous espérons que cela donnerait au serveur suffisamment de temps pour s'arrêter avant que l'onduleur ne soit à court d'alimentation.

Avant de me donner la peine d'écrire le script, j'aimerais savoir s'il existe une meilleure façon de faire ce dont j'ai besoin. Merci d'avance pour votre aide.

Will Kraft
la source
15
Vous ne devez pas envoyer de requête ping à un site externe, mais envoyer une requête ping à l'adresse IP de votre modem DSL.
LawrenceC
1
@ultrasawblade ... sonne comme une réponse, sent comme une réponse ... c'est une réponse!
Pureferret
1
Comme le mentionne @ultrasawblade, NE JAMAIS compter sur des sources externes pour une configuration interne. Par exemple, si votre connexion Internet échoue soudainement, vous perdez la connectivité et votre serveur tombe en panne. Si Google.com décide de changer son nom pour une raison quelconque, votre serveur tombe en panne. Si vous leur envoyez une requête ping en utilisant IP et que cette batterie de serveurs particulière tombe en panne, votre serveur tombe également en panne. c'est le cas de toute source extérieure. À moins que vous ne soyez sûr à 100% que votre serveur DOIT SEULEMENT être allumé lorsque cet autre serveur est disponible, vous ne voulez pas compter sur cet autre serveur pour une raison quelconque.
Nzall
Aucune de ces réponses ne vous convient?
Dave

Réponses:

34

Il existe une méthode ancienne mais éprouvée: utilisez un ancien modem analogique. Voici comment

  • Connectez le modem au serveur via le port série (par exemple ttyS0)
  • Branchez l'alimentation du modem non pas sur l'onduleur, mais directement sur le secteur
  • Ne branchez rien sur la ligne téléphonique du modem

Interrogez maintenant le modem toutes les quelques secondes ATZ[Enter]et attendez OK[Enter]- si le modem ne répond pas, vous pouvez supposer qu'il n'a pas d'alimentation, ce qui signifie que l'onduleur est sur batterie.

modifier

Le point principal est que si votre connexion Internet tombe pour une autre raison, le serveur ne s'arrêtera pas comme il se doit.

Modifier 2

D'après les commentaires:

  • Bien sûr, vous devez conserver un état d'un contrôle à l'autre, ne s'éteignant qu'après l'échec de N contrôles. Je n'ai pas mentionné cela, car cela est vrai pour toutes les vérifications possibles, non seulement le modem
  • La différence entre l'utilisation du modem et l'utilisation de tout ce qui a à voir avec le réseau est qu'une perte transitoire de connectivité réseau se produira: vous ne voulez pas être dérangé par "Connexion désactivée, serveur sur USV", si vous redémarrez un commutateur ou reconfigurez un VLAN. D'après mon expérience, la ligne série est aussi robuste que possible.
Eugen Rieck
la source
1
Bonne réponse, mais je suggère d'ajouter une sécurité où il vérifie plusieurs fois avant de s'arrêter. (vous n'aurez donc pas à vous arrêter pendant un arrêt de 5 minutes) Et je pense que cingler un swich suffirait également (juste rien en dehors de votre réseau).
HTDutchy
@HTDutchy Voir ma modification!
Eugen Rieck
Je sais, mais comme il n'a peut-être pas de connexion série ou qu'un vieux modem traîne dans le matériel de la maison, ce serait la meilleure chose à faire. et si le commutateur cessait de fonctionner, le serveur apparaîtrait de toute façon.
HTDutchy
22

Un ups est généralement livré avec un connecteur USB ou COM1. Lorsque vous vous connectez à votre serveur, vous pouvez alors commencer à surveiller l'onduleur.

Dans un environnement Windows, sans installer le logiciel, les messages sont déjà enregistrés et cela arrêtera le serveur pour vous. Je ne sais pas comment cela fonctionne sur Linux, mais je parie qu'il existe des packages logiciels disponibles pour l'interface avec votre onduleur.

LPChip
la source
Je viens de vérifier mon UPS et malheureusement il n'a rien de tel. Il ne possède que 8 fiches d'alimentation (4 sur batterie et 4 sans) et des prises d'entrée et de sortie de ligne pour les cordons téléphoniques.
Will Kraft
27
Procurez-vous ensuite un onduleur qui peut communiquer avec l'ordinateur.
Ramhound
@Ramhound Ce n'est peut-être pas une option, les onduleurs peuvent être assez chers et il existe des moyens moins chers.
Vality
Je ne suis pas d'accord qu'il existe d'autres façons de détecter que vous utilisez une batterie d'ups que vous ne pouvez même pas détecter au niveau
is
1

Si vous utilisez Debian, essayez d'utiliser NUT (outils UPS réseau). J'utilise NUT pour faire exactement ce que vous décrivez sur mon Synology NAS (qui exécute busybox) et sur un serveur Web domestique exécutant Ubuntu 12.04 LTS. J'ai le NAS branché via USB à l'onduleur pour la même raison que vous, perte potentielle de tous mes fichiers.

Je crois que le démon Nut interroge l'onduleur à chaque seconde pour déterminer l'état. Lorsque l'onduleur est en mode batterie, il peut être configuré pour s'arrêter normalement ou attendre d'abord X minutes, etc. Vous pouvez également configurer plusieurs clients pour qu'ils soient connectés au démon nut que vous exécutez sur votre serveur. Ainsi, votre serveur peut également indiquer à plusieurs PC de votre réseau de s'arrêter correctement. Pour l'exécution de l'arrêt, vous pouvez fournir votre propre script aux services d'arrêt d'une manière spécifique, ou vous pouvez utiliser le script intégré qui appelle simplement shutdown -h, si je me souviens bien.

Site Web de NUT

Il y avait de meilleurs sites pour trouver des informations, mais je ne m'en souviens pas pour le moment. La configuration peut être pénible, mais si vous parlez de potentiellement perdre votre RAID, vérifiez-le! Selon vos besoins, vous n'aurez peut-être pas besoin de l'ensemble de la suite NUT, vous pourrez peut-être vous en sortir avec uniquement la partie UPSMON. Je pense que vous pouvez l'obtenir dans le paquet Ubuntu "nut-client".

Il existe également un client NUT pour Windows, mais sous Windows, il serait préférable d'utiliser quelque chose comme PowerChute ou quelque chose de similaire.

zako42
la source
Comme dit précédemment, il semble que l'onduleur de l'OP n'ait aucun moyen de communiquer avec l'ordinateur, ni USB ni réseau.