PrettyPrint

samedi 13 septembre 2014

Install KVM in 5 steps

The distribution use for this tutorial is Fedora 18, and can be applied on Centos/Rhel 6+

Step 1: Check if your processor have hardware virtualization extension

[root@localhost ~]# egrep -q "(vmx|svm)" /proc/cpuinfo && echo OK || NOK
If "OK" you can continue, else "sorry try another virtualization solution".

Step 2: Install KVM itself with it's tools

[root@localhost ~]# yum groupinstall virtualization


Step 3: Check if all the required modules are loaded

[root@localhost ~]# lsmod | grep kvm
kvm_intel 138567 0
kvm 429349 1 kvm_intel


if you have no results, manually load:
[root@localhost ~]# modprobe kvm

If at this step, kvm_intel not appear, this means that you have to enable the CPU virtualization extension in the BIOS (Intel VT-x or AMD-V).
You can see this on kernel messages:
[root@localhost ~]# grep kvm /var/log/messages
kernel: [ 15.331262] kvm: disabled by bios


Step 4: Start and enable the libvirtd daemon

[root@localhost ~]# systemctl start libvirtd.service
[root@localhost ~]# service libvirtd start      #on Centos/Rhel6

[root@localhost ~]# systemctl enable libvirtd.service
[root@localhost ~]# chkconfig libvirtd on      #on Centos/Rhel6

Step 5: Play with GUI virtual manager

[root@localhost ~]# virt-manager


jeudi 11 septembre 2014

Mount a LVM snapshot of a XFS filesystem

Lors de mes tests, j'ai été confronté a un problème de montage d'un instantané (snapshot) d'un LV en XFS; le problème, les snapshots ayant le meme uuid que leur LV d'origine et XFS empechant, par defaut, le double montage d'un fs (se basant sur l'uuid), il refusera de le monter.

Je vous donne ici une solution, en reproduisant l'erreur.

Creation d'un LV
[root@tnjulius ~]# vgcreate vg_test /dev/md0
[root@tnjulius ~]# lvcreate -n lv_test -l50%FREE vg_test
[root@tnjulius ~]# mkfs.xfs /dev/vg_test/lv_test
[root@tnjulius ~]# mkdir /test
[root@tnjulius ~]# mount /dev/vg_test/lv_test /test/

Création du snapshot
[root@tnjulius ~]# lvcreate -s -n lv_test_snap01 -l1%ORIGIN /dev/vg_test/lv_test

montage du snapshot
[root@tnjulius ~]# mkdir /test_snap
[root@tnjulius ~]# mount /dev/vg_test/lv_test_snap01 /test_snap/
mount: wrong fs type, bad option, bad superblock on /dev/mapper/vg_test-lv_test_snap01,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail or so

Verification dans les logs
[root@tnjulius ~]# tail -1 /var/log/messages
Sep 11 14:30:58 tnjulius kernel: [11175.220536] XFS (dm-14): Filesystem has duplicate UUID ed8f9114-8471-4d87-8a51-4a4f27eeb239 - can't mount

Solution: en cherchant dans man mount
Mount options for xfs
(...)
nouuid Don't check for double mounted filesystems using the filesystem uuid.  This is useful to mount LVM snapshot volumes.
(...)

[root@tnjulius ~]# mount -o nouuid /dev/vg_test/lv_test_snap01 /test_snap/
[root@tnjulius ~]# tail -3 /var/log/messages
Sep 11 14:37:18 tnjulius kernel: [11555.401702] XFS (dm-14): Mounting Filesystem
Sep 11 14:37:18 tnjulius kernel: [11555.928120] XFS (dm-14): Starting recovery (logdev: internal)
Sep 11 14:37:18 tnjulius kernel: [11556.068293] XFS (dm-14): Ending recovery (logdev: internal)


vendredi 23 mai 2014

PySphere, play with vSphere via it's webservices.

Le quotidien d'un SysAdmin est de mettre en place des scripts pour automatiser les actions répétitives, lui permettant ainsi d'avoir du temps libre le vendredi pour prendre une ou quelques bières.
Une des tâches les plus énervante est la production des rapports. N+1 m'a demandé un certains nombres d'états sur les machines virtuelles, à fournir après une certaines périodes; la galère; solution --> scripter.

VMware vSphere fournit un grand nombre de webservices, permettant d'interagir avec sa plateforme de virtualisation; malheureusement pas très comestible. Il fournit donc un SDK plus digest, mais pour les amoureux de Java.
PySphere est un module python; projet opensource permettant de jouer avec les webservices vSphere et très facile d'utilisation. Il permet de :
  • d'interroger et se connecter sur les hôtes VMWare's ESX, ESXi, Virtual Center, VMs
  • d'effectuer les actions: d'alimentation (Activer, arrêt, ...),  rétablir un instantané, cloner, migrer, mettre à jour les outils vmwares, obtenir les propriétés, envoyer un signal (start/stop/list) aux processus, et les statistiques d'une VM. 

Installation: (test sur centos6)

#pip install -U pysphere
ou
#wget https://pysphere.googlecode.com/files/pysphere-0.1.8.zip
#unzip pysphere-0.1.8.zip
#python setup.py install

Utilisation:

Petit exemple sur l'affichage de la liste des VMs d'une infrastructure, avec quelques propriétés; nom de la vm, adresse ip, mémoire en ko, nombre cpu, OS de la vm.

>>> from pysphere import *
>>> server = VIServer()
>>> server.connect("vcenter.intra.local","test","motDePasse")
>>> vms = server.get_registered_vms()
>>> for vm in vms:
...     vmi = server.get_vm_by_path(vm)
...     print vmi.get_property("name")
...     print vmi.get_property("ip_address")
...     print vmi.get_property("memory_mb")
...     print vmi.get_property("num_cpu")
...     print vmi.get_property("guest_full_name")




lundi 21 avril 2014

Online logical volume resizing in one command

Logical volume resizing in one command, when the volume group have enough spaces.

AIX:
chfs  -a size=+20G /data
Linux:
lvresize -L+20G /dev/vg_data/lvdata -r

The difference?
On AIX the resizing is done directly on the file system; but on Linux the resizing is done on the logical volume. The volume group have to be specified on Linux's LVM

lundi 31 mars 2014

Load balancing & Failover script

La répartition des charges (load balancing en anglais) est un mécanisme permettant à plusieurs éléments actifs d'un réseau de partager une charge du travail; les éléments actifs étant généralement identique.
Le basculement (failover en anglais) est un mécanisme permettant à un élément actif de basculer vers un élément alternatif en cas de non réponse du primaire.

Dans ce billet, je présente un script que j'ai écris, mettant en oeuvre les 2 mécanismes; load balancing et failover.

Supposons que nous ayons n serveurs identiques (d'un point de vue fonctionnel), et que nous voulons répartir la charge sur ces serveurs et implémenter le mécanisme de basculement (failover) en cas de panne d'un d'entre eux; le script suivant choisira de façon aléatoire l'IP d'un nœud actif. Chaque nœud actif a donc une probabilité de 1/n d'être choisie.

lbfo.sh: nom du script;
nodes.txt: liste des différentes IP de chaque nœud;

n.b: L'utilitaire fping doit être installé.

lbfo.sh
#!/bin/bash
#lbfo.sh
loadBalance() {
    count=0
    while read node
    do
        fping -qt1 -c1 $node &>/dev/null && count=$(($count+1)) && TEST[$count]=$node
    done < ./nodes.txt
    JETON=$(( RANDOM%$count + 1))
    echo ${TEST[$JETON]}
}
loadBalance

nodes.txt
192.168.5.1
192.168.5.3
192.168.5.4

Pour des raisons de latences, le test d'un nœud est positif si son temps de réponse < 1ms en une seule requête.
Temps d'exécution:
  Pour 3 noeuds dont 1 non actif:            real    0m0.042s
  Pour 254 noeuds dont 76 non actifs:      real    0m3.264s

vendredi 31 janvier 2014

Faire l'inventaire de l'ensemble de ces équipements via SSH

Il arrive parfois que le n+1 ou le RSSI nous demande l'inventaire de nos équipements, qui d'habitude n'est pas toujours à jour.
Une petite commande bash, pour le faire sans froncer les sourcils:
Récupération de l'IP et du nom d'hôte:
>for ip in {1..254}; 
>do
>ping -c1 -t3 X.Y.Z.$ip && echo "X.Y.Z.$ip --> `ssh X.Y.Z.$ip 'hostname'`" >> inventaire.txt;
>done

Résultat:
   W.X.Y.Z --> name.intra.domain

Pous pouvez faire varier le ttl en fonction de votre configuration réseau.

jeudi 16 janvier 2014

Howto compare 2 remotes files

diff est un outil permettant d'afficher la différence entre 2 fichiers ligne par ligne.
L'outil devient  très intéressant pour vérifier une configuration commune sur un ensemble de serveur; ceci est rendu possible par la possibilité que diff a, à utiliser les flux de l'entrée standart (STDIN).

Utilisation:
diff entre un fichier local et un fichier distant :
#ssh -q $remoteHost "cat $remoteFile" | diff - $localFile

diff entre 2 fichiers distants:
#ssh -q $HOST1 "cat $file1" | diff - <(ssh -q $HOST2 "cat $file2")
"attention! pas d'espace entre le caractère < et )"

Si vous avez une autre façon d'écrire ceci, merci de partager ;-).

samedi 11 janvier 2014

Paralléliser la compression des gros fichiers


En environnement de production, on est généralement confronté a un problème d'espace lors des sauvegardes. On veut un temps de rétention assez long, sans avoir les ressources disques adéquates. La seule solution est la compression des données sauvegardées (bien qu'elle augmente le temps de sauvegarde et de restauration).
La compression sur des gros fichiers (>80Go), dépasse généralement les 45min avec l'outil gzip. Ce dernier n'utilise pas toutes les ressources cpu de la machine; en cherchant un outil qui parallélise la compression, je suis tombé sur une implémentation de gzip, http://zlib.net/pigz/ qui le fait.
Il fonctionne de la même manière que gzip, il suffit juste d'appeler la commande "pigz".

Installation de pigz sur CentOS 6
- Via le dépôt Epel
#rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#yum install pigz

Lancez la compression, et vérifier la parallélisation grâce à votre outils de supervision ( nmon ;-) )