Hardware/Perc/MegaCli/DisableAutolearn
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.