Hardware/Perc/MegaCli/DisableAutolearn

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Ce document décrit le déroulement pas à pas de la désactivation de l'autolearn de la batterie du contrôleur RAID PERC sur les serveurs DELL.

En effet ce processus se lance tous les 90 jours, quelque soit la charge du serveur ( selon la loi de Murphy, au pire moment ). Cela induit un lag très important sur le service MySQL car le cache en écriture est by-passed durant la fin de la décharge de la batterie ( environ 1 heure ).

La solution consiste donc à supprimer le lancement automatique et de le lancer en tâche programmée ( crontab ) le dimanche.

Nous aurons besoin de deux outils :

  • MegaCLI qui est l'outil de management du-dit contrôleur.
  • Open Manage qui est la suite DELL pour gérer le hardware de ses serveurs.

Installation des outils

MegaCli

Cet utilitaire n'est pas Open-Source et seul le binaire est disponible. L'utilitaire peut être téléchargé ici :http://www.lsi.com/downloads/Public/MegaRAID%20Common%20Files/8.00.48_Linux_MegaCLI.zip

Cette archive contient une autre archive contenant 2 RPM. L'installation est triviale :

# yum install MegaCli-8.00.48-1.i386.rpm Lib_Utils-1.00-09.noarch.rpm

Toutefois un paquet RPM sera créer car le chemin ( /opt/lsi/3rdpartylibs ) n'est pas standard pour une bibliothèque et nécessite une post-installation via « ldconfig ».

OpenManage

L'installation est décrite à la page http://linux.dell.com/repo/hardware/latest

# wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash
# yum install srvadmin-all

Lancement de l'outil

# /opt/dell/srvadmin/sbin/srvadmin-services.sh enable
# /opt/dell/srvadmin/sbin/srvadmin-services.sh start

Configuration

Suppression du lancement automatique d'apprentissage

# TMPFILE=$(mktemp -p /tmp bbu.relearn.off.XXXXXXXXXX) && echo "autoLearnMode=1" > $TMPFILE && \
MegaCli64 -AdpBbuCmd -SetBbuProperties -f$TMPFILE -a0 ; rm -f $TMPFILE

Vérifier que l'autolearn est désactivé

# MegaCli64 -AdpBbuCmd -GetBbuProperties -a0

BBU Properties for Adapter: 0

Auto Learn Period: 7776000 Sec
Next Learn time: 383912427 Sec 
Learn Delay Interval:0 Hours
Auto-Learn Mode: Disabled

Exit Code: 0x00
Auto Learn Period Nombre de secondes entre chaque cycle d'autolearn
Next Learn time Nombre de secondes depuis le 01/01/2000 pour déterminer la date du prochain cycle.
Learn Delay Interval Nombre d'heure pour retarder l'exécution du cycle d'autolearn
Auto-Learn Mode Mode d'apprentissage

Exécution de l'apprentissage

La commande suivante lance l'apprentissage.

# /opt/dell/srvadmin/bin/omconfig storage battery action=startlearn controller=0 battery=0

Pour l'exécuter tous les trois mois ( janvier, avril, juillet, octobre ), le premier dimanche à 08H00, la ligne du « crontab » est :

0 8 */3 1-7 7 /opt/dell/srvadmin/bin/omconfig storage battery action=startlearn controller=0 battery=0

La même chose avec MegaCli

# MegaCli64 -AdpBbuCmd -BbuLearn -a0

Pour constater l'état de l'apprentissage lorsque on l'a lancé manuellement :

# MegaCli64 -AdpBbuCmd -GetBbuStatus -aAll
...
BBU Firmware Status:

  Charging Status              : Discharging
  Voltage                                 : OK
  Temperature                             : OK
  Learn Cycle Requested                   : Yes
  Learn Cycle Active                      : Yes
  Learn Cycle Status                      : OK
  Learn Cycle Timeout                     : No
  I2c Errors Detected                     : No
  Battery Pack Missing                    : No
  Battery Replacement required            : No
  Remaining Capacity Low                  : No
  Periodic Learn Required                 : No
  Transparent Learn                       : No
  No space to cache offload               : No
  Pack is about to fail & should be replaced : No
  Cache Offload premium feature required  : No
  Module microcode update required        : No

Battery state:

GasGuageStatus:
  Fully Discharged        : No
  Fully Charged           : No
  Discharging             : Yes
  Initialized             : Yes
  Remaining Time Alarm    : No
  Remaining Capacity Alarm: No
  Discharge Terminated    : No
  Over Temperature        : No
  Charging Terminated     : No
  Over Charged            : No

Relative State of Charge: 95 %
Charger Status: Off
Remaining Capacity: 805 mAh
Full Charge Capacity: 851 mAh
isSOHGood: Yes

Exit Code: 0x00

Firewall pour la WUI OpenManage

On va d'abord autoriser le port d'OpenManage ( 1311 ) sur les frontaux, puis ajouter quelques règles NAT pour accéder aux serveurs du réseau local.

Les ports sont la quatrième partie de l'adresse IP LAN sur trois digits préfixé du chiffre 13.

Injection des règles iptables à chaud avec la plateforme MIT.

ld1 et ld2

iptables -I INPUT -s 78.248.44.91 -p tcp --dport 1311 -j ACCEPT
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13070 -j DNAT --to 192.168.0.70:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13080 -j DNAT --to 192.168.0.80:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13100 -j DNAT --to 192.168.0.100:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13105 -j DNAT --to 192.168.0.105:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13110 -j DNAT --to 192.168.0.110:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13115 -j DNAT --to 192.168.0.115:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13120 -j DNAT --to 192.168.0.120:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13125 -j DNAT --to 192.168.0.125:1311

mail3 et mail4

iptables -I INPUT -s 78.248.44.91 -p tcp --dport 1311 -j ACCEPT

Injection des règles iptables à chaud avec la plateforme Cogent.

ld1-cogent et ld2-cogent

iptables -I INPUT -s 78.248.44.91 -p tcp --dport 1311 -j ACCEPT
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13071 -j DNAT --to 192.168.0.71:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13081 -j DNAT --to 192.168.0.81:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13101 -j DNAT --to 192.168.0.101:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13106 -j DNAT --to 192.168.0.106:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13111 -j DNAT --to 192.168.0.111:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13116 -j DNAT --to 192.168.0.116:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13121 -j DNAT --to 192.168.0.121:1311
iptables -t nat -A PREROUTING -i bond0 -s 78.248.44.91 -p tcp --dport 13126 -j DNAT --to 192.168.0.126:1311

mail3-cogent et mail4-cogent

iptables -I INPUT -s 78.248.44.91 -p tcp --dport 1311 -j ACCEPT

Résolutions des problèmes

Il existe une commande pour forcer le mode.

Forcer l'utilisation du cache ( Mode Write Back ) même si la batterie n'est pas présente ou presque déchargée, au lieu de le by-passer ( Mode Write Through ).

# omconfig storage vdisk action=changepolicy writepolicy=fwb controller=0 vdisk=0

Tests

Mise en place

Les tests suivants ont été effectués sur la plateforme Cogent.

Host Autolearn Commentaires
wsr1 Désactivé learn en cron après la date d'autolearn
wsr2 Désactivé learn en cron après la date d'autolearn
wsr3 Activé
wsr4 Désactivé Lancement du learn manuellement avant la date de l'autolearn (omsa)
wsr5 Désactivé Lancement du learn manuellement après la date d'autolearn (MegaCli)
wsr6 Activé Ajout d'un delay via OMSA ( 48h)
sql1 Activé
sql2 Activé Lancement du learn manuellement avant la date de l'autolearn
mail3 Activé
mail4 Activé

Résultats :

  • La date du prochain autolearn est mise à jour si et seulement si le status de l'autolearn est « Activé ».
  • Si l'autolearn est actif, c'est la date d'apprentissage réelle qui est pris pour référence et non la date théorique d'apprentissage.
  • L'autolearn n'est pas effectué dans le mode « Désactivé », même si la désactivation est postérieure à la mise en garde du lancement automatique dans les logs.
  • Le forçage du Mode Write Back n'a pas été possible pendant le cycle d'autolearn avec un niveau de batterie faible ( Une fois en mode Write Through ).
  • Les deux façons de lancer l'apprentissage sont opérationnelles :OMSA et MegaCli.
  • Le delay ne semble pas fonctionné ( exécuter à l'heure prévu malgré les 48H de délai ).
  • Seul les logs d'OpenManage ou le fichier /var/log/messages ( avec omsa démarré )contiennent des informations sur ce qui ce passe.
  • Après un reboot ( via la commande « reboot » ), l'autolearn désactivé reste désactivé.
  • Après un arrêt ( commande « halt », et l'iDrac envoie le statut « Hors Tension » ), l'autolearn désactivé reste désactivé.

Conclusions :

Le lancement de l'apprentissage doit être effectué régulièrement avec une période de 90 jours et la date de début doit être enregistrée quelque part. Ceci dans le but de monitorer la période séparant deux cycles.

#!/bin/bash

date '+%s' > /var/tmp/perc_battery_learn_time

/opt/dell/srvadmin/bin/omconfig storage battery action=startlearn controller=0 battery=0

L'autolearn ne peut être reporté ou annulé s'il est activé et surtout aucune action ne pourra interrompre le cycle d'apprentissage une fois démarré . Une action est donc nécessaire avant le lancement du cycle d'apprentissage :

  • Désactivation pure et simple
  • Lancer un cycle d'apprentissage anticipé à une date/heure hors-production.