Saltstack : renommer un minion

Il est parfois nécessaire de renommer votre minion.

Si vous ne forcer pas l’id du minion dans /etc/salt/minion, mais que vous laissez « socket.getfqdn() » le définir, vous devrez modifier les fichiers :

  • /etc/hostname
  • /etc/hosts

Puis, sur le minion :

  1. arrêter le service salt-minion
  2. supprimer le fichier /etc/salt/minion_id
  3. Relancer le service salt-minion

Sur le master :

  1. Supprimer la clef de l’ancien minion
  2. salt-key -d <old_minion_id>
    
  3. Afficher la nouvelle demande d’enregistrement
  4. salt-key -L
    
  5. Ajouter la clef du nouveau
  6. salt-key -a <new_minion_id>
    
Publié dans Uncategorized | Un commentaire

Saltstack

Logo SaltStack

En tant que « devops« , je suis amené à installer et surtout configurer un nombre important de serveurs / machines virtuelles. Bien souvent les systèmes installés sont identiques. Un serveur LAMP ressemble très souvent à son voisin. Surtout si celui-ci fait partie de la même ferme de serveur Web.

La gestion des fichiers de configuration peut s’avérer fastidieuse.

Sur un projet professionel récent, j’ai été amené à gérer une dizaine de serveur Docker (Wikipedia : Docker).
Tous configurés de la même manière au nom et à l’IP prêts.

Rapidement j’ai cherché un outils me facilitant le boulot.

Il existe différents outils qui permettent une gestion centralisée des fichiers de configuration d’un serveur.
Les plus connus sont :

  • Puppet,
  • Chef,
  • Cfengine.

Un petit (pas si) nouveau pointe le bout de son nez depuis 2011: SaltStack.

C’est ce dernier que j’ai décidé d’utiliser car j’ai eu un très bon retour de ma Grotte à Barbus francophones préférées, dont l’un des gourous acteurs et ami, avait écrit un article dans Linux Magazine.

De plus il est écrit en python ce qui ne gache rien, et la learning curve est compatible avec mes enjeux de mise en production ;-).

Vous trouverez ici quelques articles faisant écho de mon retour d’expérience sur SaltStack.

  1. Création d’un Minion
  2. Renommer un minion
Publié dans Mes docs, saltstack | Marqué avec , | Laisser un commentaire

noNoseOnTV part 3

Voici le dernier code source de l’appareil NoNoseOnTV.

Et voici le schéma :


Sensor_bb

// # Author  : Hugues Lepesant
// # Date    : 30/04/2014
// # Version : 0.3
 
// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
  
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
  
// # Connection:
// #       Pin 1 VCC (URM V3.2) -> VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -> GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -> Pin 6 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -> Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.


#include <IRremote.h>
#include <NewTone.h>


const int URPWM = 6;      // PWM Output 0-25000us,every 50us represent 1cm
const int URTRIG = 5;     // PWM trigger pin

const int greenLedPin = 2;
const int yellowLedPin = 4;
const int redLedPin = 7;
const int buzzerPin = 8;
 
const int distMinimum = 100; // 1 meter
const int distMedium  = 150; // 1 meter and half

const int duration = 800;
int alert = 0;
int tvPower = 1;
 
//boolean up=true;       // create a boolean variable
//unsigned long time;    // create a time variable
//unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
unsigned int Distance=0;

IRsend irsend;
 
uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
  
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600
 
    pinMode(greenLedPin, OUTPUT);
    digitalWrite(greenLedPin, LOW);
     
    pinMode(yellowLedPin, OUTPUT);
    digitalWrite(yellowLedPin, LOW);
     
    pinMode(redLedPin, OUTPUT);
    digitalWrite(redLedPin, LOW);
 
    PWM_Mode_Setup();
}
  
void loop() {
  Distance = PWM_Mode();

  
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
   
  if ( Distance > distMedium ) {
    digitalWrite(greenLedPin, HIGH);
    digitalWrite(yellowLedPin, LOW);
    digitalWrite(redLedPin, LOW);
    
    if ( tvPower == 0 ) {
      SendPowerCode(tvPower);
      tvPower = 1;
    }
    
    alert = 0;
  }
 
  if ( Distance > distMinimum && Distance < distMedium ) {
    digitalWrite(greenLedPin, LOW);
    digitalWrite(yellowLedPin, HIGH);
    digitalWrite(redLedPin, LOW);
  }
 
  if ( Distance < distMinimum ) {
    digitalWrite(greenLedPin, LOW);
    digitalWrite(yellowLedPin, LOW);
    digitalWrite(redLedPin, HIGH);
    
    alert++;

    NewTone(buzzerPin, 440, duration);


    if (alert > 2) {
      if ( tvPower == 1 ) {
        SendPowerCode(tvPower);
      }
      tvPower = 0;
    }
 }

  delay(1000);
  
  Serial.print("ALERT = ");
  Serial.println(alert);
}
 
  
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
  
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
     
    for (int i=0;i<4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
  
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
      
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
      
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

void SendPowerCode(int tvPower)
{
  for (int i = 0; i < 3; i++) {
    irsend.sendSony(0xa90, 12); // Sony TV power code
    delay(100);
  }
  
  if ( tvPower == 1 ) {
    Serial.print("Signal Off sent");
  } else {
    Serial.print("Signal On sent");
  }
}

Publié dans Mes Projets | Laisser un commentaire

NoNoseOnTV . part 2

Et hop voilà le code version 2.

// # Author  : Hugues Lepesant
// # Date    : 24/04/2014
// # Version : 0.2
 
// # URM Code based on Jiang's work from DFRobot
// # Product name:ultrasonic scanner Kit
// # Product SKU:SEN0001
  
// # Description:
// # The Sketch for scanning 180 degree area 4-500cm detecting range
  
// # Connection:
// #       Pin 1 VCC (URM V3.2) -&gt; VCC (Arduino)
// #       Pin 2 GND (URM V3.2) -&gt; GND (Arduino)
// #       Pin 4 PWM (URM V3.2) -&gt; Pin 3 (Arduino)
// #       Pin 6 COMP/TRIG (URM V3.2) -&gt; Pin 5 (Arduino)
// # Pin mode: PWM
// # Working Mode: PWM passive control mode.
// # If it is your first time to use it,please make sure the two jumpers to the right hand
// # side of the device are set to TTL mode. You'll also find a secondary jumper on
// # the left hand side, you must break this connection or you may damage your device.
  
int URPWM=3;        // PWM Output 0-25000us,every 50us represent 1cm
int URTRIG=5;       // PWM trigger pin
 
int pinGreen = 2;
int pinYellow = 6;
int pinRed = 7;

int duration = 1000;
 
int distMinimum = 100; // 100 cm
int distMedium = 150;  // 150 cm
 
boolean up=true;       // create a boolean variable
unsigned long time;    // create a time variable
unsigned long urmTimer = 0; // timer for managing the sensor reading flash rate
  
unsigned int Distance=0;
 
uint8_t EnPwmCmd[4]={0x44,0x22,0xbb,0x01}; // distance measure command
  
void setup() {             // Serial initialization
    Serial.begin(9600);    // Sets the baud rate to 9600
 
    pinMode(pinGreen, OUTPUT);
    digitalWrite(pinGreen, LOW);
     
    pinMode(pinYellow, OUTPUT);
    digitalWrite(pinYellow, LOW);
     
    pinMode(pinRed, OUTPUT);
    digitalWrite(pinRed, LOW);
 
    PWM_Mode_Setup();
}
  
void loop() {
  Distance = PWM_Mode();
  Serial.print("Distance = ");
  Serial.print(Distance);
  Serial.println(" cm");
   
  if ( Distance > distMedium ) {
    digitalWrite(pinGreen, HIGH);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, LOW);
  }
 
  if ( Distance > distMinimum && Distance < distMedium ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, HIGH);
    digitalWrite(pinRed, LOW);
  }
 
  if ( Distance < distMinimum ) {
    digitalWrite(pinGreen, LOW);
    digitalWrite(pinYellow, LOW);
    digitalWrite(pinRed, HIGH);
    
    tone(8, 330, duration);
//    noTone(8);
 }
   
  delay(2000);
}
 
  
void PWM_Mode_Setup(){
    pinMode(URTRIG,OUTPUT);       // A low pull on pin COMP/TRIG
    digitalWrite(URTRIG,HIGH);    // Set to HIGH
  
    pinMode(URPWM, INPUT);        // Sending Enable PWM mode command
     
    for (int i=0;i<4;i++) {
        Serial.write(EnPwmCmd[i]);
    }
}
  
int PWM_Mode(){                   // a low pull on pin COMP/TRIG  triggering a sensor reading
    digitalWrite(URTRIG, LOW);
    digitalWrite(URTRIG, HIGH);   // reading Pin PWM will output pulses
      
    unsigned long DistanceMeasured=pulseIn(URPWM,LOW);
      
    if (DistanceMeasured==50000) { // the reading is invalid.
      return 0;
    } else {
        return DistanceMeasured/50; // every 50us low level stands for 1cm
    }
}

Publié dans Mes Projets | Laisser un commentaire

Repo Ubuntu Cloudstack avec du VMware dedans

Rien que pour vous, voici les paquets générés avec la méthode décrite précédement :


deb http://cloudstack.lepesant.com/ubuntu precise 4.2

NB:
Compilé sur Ubuntu 12.04 LTS 64bits
A mettre dans : /etc/apt/sources.list.d/cloudstack.list

Publié dans Cloudstack | Laisser un commentaire

Cloudstack : Paquets Ubuntu et support VMware

Le Contexte

Dans le cadre d’un projet professionel, je désire fournir à mes clients une interface de gestion de machines virtuelles, leur permettant de créer et démarrer des VM à la demande. J’ai, par le passé, déjà eu l’occasion de fournir ce genre d’interface. Que ce soit une solution complètement développée en interne, ou achetée très cher chez un éditeur (VMware vCloud Director).

Cette fois-ci, pas question de réinventer la roue (nous sommes en 2014!), ni de payer des sommes folles (nous ne sommes plus en 2000!).

Mon choix, qui reste personnel, s’est tourné vers Cloudstack. De part son coté agnostique dans le choix de l’hyperviseur, sa communauté et les retours que j’en ai eu à travers les rencontres lors des journées Build A Cloud.

Le Problème

Je suis parti sur une infra full Ubuntu 12.04.3 LTS pour Cloudstack.
Jusque là rien d’anormale, sauf que je veux pouvoir gérer aussi bien des clusters KVM que des clusters VMware ESXi.

Les paquets Ubuntu ne sont pas construits avec le support de VMware. En effet une restriction de la licence Apache font que les librairies java nécessaires à la prise en charge de certains modules ne sont pas fournies dans les sources de Cloudstack, et donc encore moins compilées dans les paquets.

La Solution

Rien de plus simple *khof*, créer ses propres paquets.

Installer Maven3

sudo -i
apt-get update
apt-get install python-software-properties
add-apt-repository ppa:natecarlson/maven3
apt-get update
apt-get install ant debhelper openjdk-6-jdk tomcat6 libws-commons-util-java genisoimage python-mysqldb libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven3
ln -s /usr/bin/mvn3 /usr/bin/mvn

Récupération des sources

wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.asc
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.md5
wget http://www.eu.apache.org/dist/cloudstack/releases/4.2.1/apache-cloudstack-4.2.1-src.tar.bz2.sha

Vérifier les sources

wget http://www.eu.apache.org/dist/cloudstack/KEYS
gpg --import KEYS
gpg --verify apache-cloudstack-4.2.1-src.tar.bz2.asc
gpg --print-md MD5 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.md5
gpg --print-md SHA512 apache-cloudstack-4.2.1-src.tar.bz2 | diff - apache-cloudstack-4.2.1-src.tar.bz2.sha

Extraire les sources

tar -jxvf apache-cloudstack-4.2.1-src.tar.bz2

Résoudre les dépendances

cd apache-cloudstack-4.2.1-src/
mvn3 -P deps

Installer les dépendances non librement disponibles ou avec une licence incompatible (avec celle d’Apache)

Heureusement elles sont pour la plus part dans le repository Github vogxn/cloudstack-nonoss ou sur le site http://zooi.widodh.nl/cloudstack/build-dep/

cd deps
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-iControl.jar -O cloud-iControl.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-manageontap.jar -O manageontap.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim.jar -O vim.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-vim25.jar -O vim25_51.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/vmware-apputils.jar -O apputils.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler-sdx.jar -O cloud-netscaler-sdx.jar
wget http://zooi.widodh.nl/cloudstack/build-dep/cloud-netscaler.jar -O cloud-netscaler.jar
./install-non-oss.sh

Nota Bene
Vous pouvez devez récupérer les jar Netscaler et VMware chez leur éditeur respectif.

  • Vmware 5.1 SDK : https://my.vmware.com/group/vmware/get-download?downloadGroup=VSP510-WEBSDK-510
  • Citrix Netscaler : http://community.citrix.com/download/attachments/37847122/cloud-netscaler-jars.zip

Construction du paquet

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -us -uc

El là ça plante.

[INFO] Apache CloudStack Console Proxy Plugin ............ SUCCESS [1.490s]
[INFO] Apache CloudStack AWS API Bridge .................. FAILURE [3:22.968s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9:14.630s
[INFO] Finished at: Mon Jan 06 20:08:40 CET 2014
[INFO] Final Memory: 57M/269M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:compile (default-compile) on project cloud-awsapi: Compilation failure: Compilation failure:
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/org/opensaml/opensaml1/1.1/opensaml1-1.1.jar; error in opening zip file
[ERROR] error: error reading /home/hugues/.m2/repository/commons-lang/commons-lang/2.3/commons-lang-2.3.jar; error in opening zip file
[ERROR] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :cloud-awsapi
make: *** [build-indep-stamp] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2

En effet certaines dépendances pour la compilation de l’AWSAPI sont corrompues.
Une tentative de « unzip -l » d’un jar nous le montre.

unzip -l /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
Archive:  /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar or
        /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar.zip, and cannot find /home/hugues/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.
5.4.jar.ZIP, period.

Pour résoudre ce problème, voici un script bash.

cd ${HOME}/.m2/repository/org/apache/axis2/mex/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/mex/1.5.4/mex-1.5.4-impl.jar -O mex-1.5.4-impl.jar

cd ${HOME}/.m2/repository/org/apache/axis2/axis2-mtompolicy/1.5.4/ && \
wget http://repo1.maven.org/maven2/org/apache/axis2/axis2-mtompolicy/1.5.4/axis2-mtompolicy-1.5.4.jar -O axis2-mtompolicy-1.5.4.jar

cd ${HOME}/.m2/repository/org/apache/ws/commons/axiom/axiom-dom/1.2.10 && \
wget http://repo1.maven.org/maven2/org/apache/ws/commons/axiom/axiom-dom/1.2.10/axiom-dom-1.2.10.jar -O axiom-dom-1.2.10.jar

cd ${HOME}/.m2/repository/org/opensaml/opensaml1/1.1 && \
wget http://repo1.maven.org/maven2/org/opensaml/opensaml/1.1/opensaml-1.1.jar -O opensaml1-1.1.jar

cd ${HOME}/.m2/repository/commons-lang/commons-lang/2.3 && \
wget http://repo1.maven.org/maven2/commons-lang/commons-lang/2.3/commons-lang-2.3.jar -O commons-lang-2.3.jar

cd ${HOME}/.m2/repository/bouncycastle/bcprov-jdk14/140 && \
wget http://repo1.maven.org/maven2/bouncycastle/bcprov-jdk14/140/bcprov-jdk14-140.jar -O bcprov-jdk14-140.jar

Ensuite il est important de lancer la commande « dpkg-buildpackage » comme ceci :

mvn3 clean install -P deps -Dnonoss; export ACS_BUILD_OPTS="-Dnonoss"; dpkg-buildpackage -uc -us

Cela nous évite de modifier le fichier debian/rules.
C’est aussi pour cette raison que je crée un lien symbolique « ln -s /usr/bin/mvn3 /usr/bin/mvn ».

Le Finale

Quelques jolis paquets Cloudstack

ls -l *.deb
-rw-r--r-- 1 hugues hugues  40439660 Jan  7 09:43 cloudstack-agent_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  78176924 Jan  7 09:43 cloudstack-awsapi_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51964 Jan  7 09:43 cloudstack-cli_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  45586934 Jan  7 09:42 cloudstack-common_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues     51948 Jan  7 09:43 cloudstack-docs_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues 158098852 Jan  7 09:43 cloudstack-management_4.2.1-snapshot_all.deb
-rw-r--r-- 1 hugues hugues  40896288 Jan  7 09:43 cloudstack-usage_4.2.1-snapshot_all.deb
Publié dans Cloudstack, Mes docs | Laisser un commentaire

LSI mon amour

Dans un récent article je vous ai parlé de la création d’un SAN iSCSI à base de OmniOS sur un serveur Dell PowerEdge R515.
Et notamment de cette @#!@# de carte PERC H700 qui ne supporte pas le JBOD, ce qui complique la gestion à chaud du remplacement de disques défectueux de notre zpool.

Ces cartes sont des cartes LSI re-brandées Dell (et donc avec un firmware et un bios bridés).
Il est donc possible de gérer ces cartes avec les outils LSI.
Ce que je vais vous détailler tout de suite.

MegaRaid Storage Manager sous Solaris et dérivés

Téléchargement

La dernière version du logiciel est disponible chez LSI.

Il faut donc récupérer :

  1. 13.08.04.01_Solaris_11_MSM.tar.gz
  2. CSA1.5-MegaCli_REL80571.zip

Dans l’archive 13.08.04.01_Solaris_11_MSM.tar.gz il y a l’utilitaire storecli qui est le remplaçant de MegaCLI.
Cependant celui-ci nous remonte des erreurs avec les controlleurs PERC.

Nous installons donc MegaCLI, en lieu et place de storecli.

Installation

Ici sous OmniOS, mais fonctionne de la même manière sous Linux.

$ tar tvfz 13.08.04.01_Solaris_11_MSM.tar.gz

Cela vous donne en sortie :

drwxr-xr-x   0/0        0 May 13 05:10 2013 ./
-rw-r--r--   0/0    24088 Jul 25 07:18 2013 ./readme.txt
drwxr-xr-x   0/0        0 Jul 25 07:23 2013 ./disk/
-rw-r--r--   0/0   35738624 Jul 25 07:19 2013 ./disk/storcli.pkg
-rwxr-xr-x   0/0     5634 Jun  4 08:30 2013 ./disk/install.sh
-rwxr-xr-x   0/0     7086 May 13 05:10 2013 ./disk/license-agreement.txt
-rwxr--r--   0/0   684728 Jul 25 07:19 2013 ./disk/libstorelibir-2.so.17.00-0
-rwxr--r--   0/0   520324 Jul 25 07:19 2013 ./disk/libstorelibir-3.so.2.00-0
-rwxr-xr-x   0/0   147108 Jun 25 05:14 2013 ./disk/libstorelib.so.4.07-0
-rw-r--r--   0/0   1928704 Jul 25 07:20 2013 ./disk/sassnmp-SOL11X86-13.08-0401.pkg
-rwxr-xr-x   0/0   416104 Jun 25 05:14 2013 ./disk/libstorelibir.so.5.06-0
-rw-r--r--   0/0   266143232 Jul 25 07:24 2013 ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
-rw-r--r--   0/0   3421184 Jul 25 07:20 2013 ./disk/sasirsnmp-SOL11X86-13.08-0401.pkg

Les fichiers intéressants sont :

  1. MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
  2. readme.txt

Pour les extraires :

$ tar xvfz 13.08.04.01_Solaris_11_MSM.tar.gz ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg ./readme.txt
$ unzip CSA1.5-MegaCli_REL80571.zip

Puis installations des pkg

sudo pkgadd -d ./disk/MegaRaidStorageManager-SOL11X86-13.08.04.01.pkg
sudo pkgadd -d ./MegaCLI/MegaCli_Solaris/x86/MegaCli.pkg

Lancement du service MSMFramework

$ sudo svcadm disable -t MSMFramework
$ sudo svcadm enable MSMFramework
$ svcs -a | grep -i msm

Le service doit apparaitre online

online         10:00:48 svc:/application/network/vivaldiframework:MSMFramework

Si ce n’est pas le cas, lancer un clear des events

$ sudo svcadm clear MSMFramework

Maintenant avec le client (tous les OS sont supportés) MegaRAID Storage Manager vous devez pouvoir vous connecter sur le serveur pour gérer la carte.
Pour cela renseigner l’IP du serveur contenant la carte PERC, le compte « root » et son mot de passe.
Cet utilitaire vous permetra de gérer vos disques durs et les virtual disks en cas de défaillance d’un disque.

Nota Bene

  • Les ports d’écoute du service sont les suivants : 3071 et 5571 en TCP.
  • Lors de l’installation de la version Windows sur votre poste, n’installer que le client.
  • La version serveur est à réserver pour les serveurs !!

Test MegaCLI

Il y a plein de page sur Google qui vous donnerons une idée de la puissance de MegaCLI pour la gestion des carte LSI (et PERC).

$ sudo /opt/MegaRAID/CLI/MegaCli -adpCount

Retourne le nombre de controlleur PERC LSI.

Publié dans Mes docs, OpenSolaris | Laisser un commentaire

Activation des Jumbo Frame sous OmniOS

Pour faire suite à l’article sur la création d’un SAN ZFS sous OmniOS, voici comment activer les Jumbo Frame sous OmniOS

Je pars des hypothèses suivantes :

  • les cartes sont des Broadcom Gigabit Ethernet (Broadcom 5709C, driver bnx)
  • les carte bnx0 et bnx1 sont utilisées pour la partie iSCSI.

Activer le Jumbo Frame revient à passer le <a href="http://fr viagra en allemagne.wikipedia.org/wiki/Maximum_Transmission_Unit » title= »MTU »>MTU à 9000 en modifiant le fichier /kernel/drv/bnx.conf.
Ainsi la ligne :

#mtu=1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500;

Devient :

mtu=9000,9000,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500,1500;

Ici on ne modifie que les MTU des cartes bnx0 et bnx1.
Les autres cartes restent avec un MTU de 1500.

Un reboot et un ifconfig plus tard vous affiche :

bnx0: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 9000 index 3
        inet 10.10.2.4 netmask ffffff00 broadcast 10.10.2.255
bnx1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 9000 index 4
        inet 10.10.3.4 netmask ffffff00 broadcast 10.10.3.255
bnx2: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 10.10.1.21 netmask ffffff00 broadcast 10.10.1.255

On voit bien que les MTU des cartes bnx0 et bnx1 sont passés à 9000 et celui de la bnx2 est toujours à 1500.

Publié dans Mes docs, OpenSolaris | Laisser un commentaire

GNU/Linux et Multipath IO (MPIO)

Configuration des serveurs initiateurs

Rappel

Dans notre architecture, le service SAN est assuré par un serveur OmniOS, offrant un partage iSCSI d’un volume ZFS.

  • Les initiateurs (client iSCSI) sont des serveurs Linux (Host CloudStack)
  • Le volume ZFS constitue le « Primary Storage » du cluster CloudStack.

Schema


|-----------|                    |----------|                     |--------------|
|           |--10.10.12.1.2 -----| SWITCH 1 |-------10.10.12.1.1--|              |
|           |                    |----------|                     |              |
|  Host 1   |                                                     |   Primary    |
|           |                    |----------|                     |   Storage    |
|           |--10.10.12.2.2 -----| SWITCH 2 |-------10.10.12.2.1--|              |
|-----------|                    |----------|                     |--------------|

iSCSI

Installation des paquets

# apt-get install open-iscsi
# service open-iscsi restart

Découverte des targets

# iscsiadm  -m discovery -t st -p 10.12.1.1
10.12.1.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
10.12.2.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
# iscsiadm  -m discovery -t st -p 10.12.2.1
10.12.2.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b
10.12.1.1:3260,2 iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b

Ces commandes ont pour effet de créer les répertoires correspondant aux targets trouvés dans le répertoire « /etc/iscsi/nodes/ ».
C’est à partir des infos contenus que les targets pourront être montées automatiquement à chaque reboot.

Connexion aux targets

# iscsiadm -m node --targetname "iqn.2010-08.org.illumos:02:cc900a8d-1801-e829-9203-9beb8009934b" --portal "10.12.1.1:3260" --login

Configuration du Multipathing (MPIO)

Une fois vos disques iSCSI attachés, nous allons configurer le « multipath IO (MPIO).

Installation du paquet

# apt-get install multipath-tools
# service multipath-tools restart

Configuration du multipathing

Editer le fichier /etc/multipath.conf
En voici une configuration minimale

devices {
        device {
                vendor                  "SUN"
                product                 "COMSTAR"
                path_grouping_policy    multibus
        }
}

multipaths {
        multipath {
                wwid 3600144f0000000000000527263940001
                alias PrimaryStorage
        }
}

Pour connaitre les paramètres vendor, product et wwid de votre disque iSCSI, lancez la commande :

# multipath -ll
3600144f0000000000000527263940001 dm-0 SUN,COMSTAR
size=3.1T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:0:0 sdc 8:32 active ready running

L’instruction *alias* vous permet une utilisation human friendly du device.

Une fois cette configuration terminée, relancez le service multipath-tools.
Puis la commande :

# multipath -ll
PrimaryStorage (3600144f0000000000000527263940001) dm-0 SUN,COMSTAR
size=3.1T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 7:0:0:0 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 8:0:0:0 sdc 8:32 active ready running
root@host-kvm-01:~#

Utilisation du « disque »

Montage du disque et formatage

# dmesg
# cfdisk /dev/dm-0
# mkfs.ext4 /dev/dm-1
# mount /dev/dm-1 /opt/primary

Check devmapper

# ls -al /dev/mapper/
total 0
drwxr-xr-x  2 root root     100 Nov  7 17:43 .
drwxr-xr-x 13 root root    3220 Nov  7 17:43 ..
crw------T  1 root root 10, 236 Nov  7 17:42 control
lrwxrwxrwx  1 root root       7 Nov  7 17:43 PrimaryStorage -> ../dm-0
lrwxrwxrwx  1 root root       7 Nov  7 17:43 PrimaryStorage-part1 -> ../dm-1

On voit bien que notre disque iSCSI est présenté par son alias PrimaryStorage.
La partition créée est PrimaryStorage-part1.

Configuration automatique à chaque boot

Si tout ce passe bien, vous pouvez :

  1. Modifier la configuration de /etc/iscsi/iscsid.conf et mettre node.startup = automatic
  2. Modifier votre /etc/fstab en y ajoutant la ligne :
# iSCSI
/dev/mapper/PrimaryStorage-part1          /opt/primary    ext4    defaults,auto,_netdev 0 0
Publié dans linux, Mes docs | 2 commentaires

Monter un serveur de stocakge iSCSI rapidement (avec du MPIO)

Ici je détail la procédure pour installer très rapidement, et donc en laissant de coté la sécurité un serveur de stockage sous OmniOS (un autre dérivé de OpenSolaris)
Pour la sécurité allez voir ici

Configuration Matérielle :

  • Le serveur : Dell PowerEdge R515
  • Carte RAID : Perc H700, 512Mo de cache
  • Disques système : 2 disques 300G SAS 10K RPM
  • Disques zpool : 9 disques 3To SAS 6Gb/s 7.2K RPM et 2 SSD Crucial M500 120Gb

A propos de la carte Perc H700:
Ce n’est pas le meilleur choix. En effet elle ne permet pas de présenter les disques en JBOD. Il faut donc créer autant de « virtual disk » en RAID0 qu’il y a de disques. Donc à priori quelques pertes de performances.

Installation du serveur

Télécharger le CD d’installation sur le site d’OmniOS.
Une fois installé, loggez-vous en root (sans mot de passe) via une console.

Configuration des interface réseaux

Liste des interfaces réseaux

# dladm show-phys
Configuration de la première interface (réseau de management)
# ipadm create-if bnx2
# ipadm create-addr -T static -a 10.10.1.1/24 bnx2/v4static
Configuration de la route par défaut
# route -p add default 10.10.1.254
Modification de la configuration de SSH

Pour pouvoir faire le reste de la configuration à distance …

# vi /etc/ssh/sshd_config

Changez « PermitRootLogin no » to « PermitRootLogin yes ».
Relancer ssh

# svcadm restart ssh

Maintenant vous pouvez vous logger en ssh sur le serveur

  • Login : root
  • Passord : y’en a pas. Taper entrer.
Configuration de la deuxième interface (réseau SAN)
# ipadm create-if bnx0
# ipadm create-addr -T static -a 10.10.2.1/24 bnx0/v4static
Configuration de la troisième interface (réseau SAN)
# ipadm create-if bnx1
# ipadm create-addr -T static -a 10.10.3.1/24 bnx1/v4static
Configuration de la résolution DNS
# echo "nameserver 192.168.100.1" >> /etc/resolv.conf
# echo "nameserver 192.168.100.2" >> /etc/resolv.conf
# cp /etc/nsswitch.conf{,.bak}
# cp /etc/nsswitch.{dns,conf}
Création d’un utilisateur non root

Référence : OmniOS : Adding local users

# echo "* localhost:/export/home/&" > /etc/auto_home
# svcadm refresh autofs
# useradd -u 2000 -m -d /export/home/weldone weldone
# usermod -d /home/weldone weldone
# passwd weldone
Configuration sudo pour cet utilisateur
# grep ^root /etc/sudoers | sed -e 's/^root/weldone/' > /etc/sudoers.d/weldone
# chmod 0440 /etc/sudoers.d/weldone

Création du Zpool

Identification des disques
# format < /dev/null 
Création d’un zpool avec les disques disponibles
# zpool create -f vmpool raidz2 c1t1d0 c1t2d0 c1t3d0 c1t4d0 c1t5d0 c1t6d0 c1t7d0 c1t8d0 spare c1t9d0 log mirror c1t11d0 c1t12d0
# zpool status 
# zfs get available vmpool 
Création d’un zvolume
# zfs create -V 15T vmpool/datastore01

ou

# zfs create -V 15899G vmpool/datastore01

ou

# zfs create -V 16280995M vmpool/datastore01

En « M », vous perdez le moins d’espace…

C’est la commande suivante qui vous permet de vérifier l’espace disponible dans votre zpool, et donc d’affiner la taille du zvolume.

# zfs get available vmpool

Attention:
Ne pas donner une taille trop petite, sinon à la création du zvolume vous aurez un message d’erreur car les Metadata ne pourront pas être écrites.

Installation et lancement des services iSCSI et serveur de stockage

Avec la configuration d’un proxy si vous devez en utiliser un.

# echo "export http_proxy=\"http://192.168.100.10:8080/\"" >> /root/.profile
# . .profile
# pkg install storage-server
# svcadm enable stmf
# svcs stmf
# svcadm enable -r svc:/network/iscsi/target:default
# svcs -l iscsi/target
Création d’un Logic Unit (LU) pour notre « vmpool/datastore01 »
# stmfadm create-lu /dev/zvol/rdsk/vmpool/datastore01

En retour nous avons l’ID du LU, par exemple : 600144F0000000000000523AC3FA0001

# stmfadm list-lu
# stmfadm add-view 600144F0000000000000523AC3FA0001
# stmfadm list-view --lu-name 600144F0000000000000523AC3FA0001
# itadm create-target

En retour nous avons l’ID de la target, par exemple : iqn.2010-08.org.illumos:02:2303d8d3-75f9-c341-c389-ff982528211c

# itadm create-tpg tpg01 10.10.2.1:3260 10.10.3.1:3260

Et cerise sur le gâteau !!
Cette commande nous permet d’activer le MPIO

# itadm modify-target -t tpg01 iqn.2010-08.org.illumos:02:2303d8d3-75f9-c341-c389-ff982528211c

Et voilà, mettez un client iSCSI dans le même réseau, ça devrait marcher sans problème.

Publié dans Mes docs, OpenSolaris | Marqué avec , , , , | Laisser un commentaire