Un serveur, deux onduleurs APC sur alimentations redondantes: comment déclencher l'arrêt?

10

J'ai un serveur en rack et ses alimentations redondantes branchées sur deux APC Smart-UPS 3000 XLM. Chaque onduleur est connecté à deux sources d'alimentation secteur différentes.

Deux instances d'apcupsd sont en cours d'exécution, chacune étant connectée à son propre onduleur. Ils peuvent tous deux détecter lorsqu'un onduleur est sur batterie, et chaque onduleur peut ensuite déclencher un arrêt sur le serveur.

La question est: comment NE PAS arrêter si UNE SEULE UPS manque de batterie?

Remarque: Smart-UPS 3000 XLM a une fonction "Power Sync" qui est capable de se connecter à son homologue et de détecter son état. Mais quand j'ai débranché l'un d'eux, la commande d'arrêt a quand même été envoyée. Je pense à modifier les scripts d'arrêt pour vérifier avec "apcaccess" si les autres ups sont en panne. Toute expérience à ce sujet serait appréciée!

Falken
la source

Réponses:

13

Actuellement, lorsque l'un des deux onduleurs meurt, l' événement doshutdown est déclenché et exécute le script par défaut via apccontrol . Le script doshutdown ignore le deuxième onduleur, car ils ne sont pas connectés aux événements, et procède normalement à l'arrêt.

Pour que les événements doshutdown soient quelque peu connectés, les deux instances d'apcupsd ont besoin d'un fichier de configuration spécifiquement personnalisé. La différence réside dans le répertoire à partir duquel les scripts d'événements doivent être exécutés.

Principales propriétés des premières, en /etc/apcupsd/apcupsd.ups0.conf

SCRIPTDIR /etc/apcupsd/ups0
UPSNAME ups0
DEVICE /dev/ups0
PWRFAILDIR /etc/apcupsd/ups0
NOLOGINDIR /etc/apcupsd/ups0
NISPORT 3551
EVENTSFILE /var/log/apcupsd.0.events

Et pour les ups1, dans /etc/apcupsd/apcupsd.ups1.conf

SCRIPTDIR /etc/apcupsd/ups1
UPSNAME ups1
DEVICE /dev/ups1
PWRFAILDIR /etc/apcupsd/ups1
NOLOGINDIR /etc/apcupsd/ups1
NISPORT 3552
EVENTSFILE /var/log/apcupsd.1.events

Chaque scriptdir doit obtenir une copie des scripts par défaut.
Nous voulons personnaliser le script doshutdown , qui n'arrêtera pas directement la machine, mais doit vérifier si l'autre onduleur est toujours allumé ou en mode d'arrêt.

En haut du script doshutdown , nous pourrions ajouter quelque chose comme

pour ups0

if [ ! -f /tmp/ups1.is.down ]
then
  touch /tmp/ups0.is.down
  exit 99
fi

pour ups1

if [ ! -f /tmp/ups0.is.down ]
then
  touch /tmp/ups1.is.down
  exit 99
fi

l'état 99 a une signification spéciale, qui indique à apccontrol d'arrêter l'action en cours. Les cinq lignes vérifient si l'autre fichier UPS-down a été créé; si pas , vers le bas-fichier est créé pour les hauts étant en bas, et les sorties. Si oui , ce qui signifie que l'autre onduleur est en panne, celui-ci est également en panne, donc le script devrait continuer et arrêter la machine.

Les fichiers /tmp/usp[01].is.downindiquent si le ups [01] est actuellement en panne.

Important: le script init.d start de apcupsd doit supprimer ces fichiers, s'ils ont été créés lors d'une session précédente:

rm -f /tmp/usp[01].is.down

Enfin, les répertoires créés ci-dessus, / etc / apcupsd / ups [01] doivent avoir accès à l' utilisateur apcupsd (ou à l'utilisateur pertinent exécutant les instances).

chown -R apcupsd /etc/apcupsd/ups[01]

Veuillez consulter la documentation détaillée .

edit a corrigé les /tmp/ups[01].is.downnoms, .isil manquait.

Ø bague
la source
1
et les utilisateurs réguliers peuvent arrêter votre serveur avec touch /tmp/ups1.is.down; touch /tmp/ups0.is.down: D Il serait donc préférable d'utiliser / var / run par exemple. Btw. si quelqu'un coupe et colle la solution, le fichier rm -f /tmp/usp}01.02.is.down est une faute de frappe. Et soit dit en passant, vous devez supprimer le /tmp/ups}01.02.is.down du boîtier hors batterie de l'apccontrol, lorsque le courant revient.
Harka Gyozo du
1
Je suggérerais de toucher votre propre fichier is.down AVANT de vérifier l'autre - tel qu'il est maintenant, je pense qu'il y a une petite fenêtre de condition de course si les deux ups s'éteignent exactement en même temps.
Michael Kohne
4

Regardez NUT. Il gère bien cela. Définissez le nombre de blocs d'alimentation de chaque onduleur et le nombre de blocs d'alimentation requis. L'arrêt ne sera pas déclenché tant qu'il n'y aura pas suffisamment d'alimentations hors UPS.

BillThor
la source