Virtualisation de serveur

L'arrivée du nouveau serveur m'a permis de passer avec l'aide de Stéphanie Glèlè (Stagiaire au CNF de Cotonou), à la mise en place d'OpenVZ ainsi qu'à l'automatisation de certaines tâches (le plus possible). Les avancées sont à suivre ici à la semaine près :-D.

Initialisation

Plan d'adressage

Changement d'adresses

nfs-cotonou passe de 81.91.236.4 à 81.91.236.14

OpenVZ devient 81.91.236.3

Nouvelles entrées

Service

Ancien FQDN

Ancien IP hôte

Nouveau FQDN

Nouvel IP

Remarques ???

DNS

ns.bj.refer.org

81.91.236.2 (sur mail-cotonou)

ns.bj.refer.org

81.91.236.2

Reste sur son serveur actuel en attendant

Proxy squid

cnfc.bj.refer.org

81.91.236.4 (sur nfs-cotonou)

proxy.bj.refer.org

81.91.236.4

Openvz

mail

mx.bj.refer.org

81.91.236.2 (sur mail-cotonou)

mail-cotonou.bj.refer.org

81.91.236.2

Reste sur son serveur actuel en attendant

Hébergement cnfc

bj.refer.org

81.91.236.2 (sur mail-cotonou)

web.bj.refer.org

81.91.236.6

Openvz FAIT!! :-)

Hébergement partenaire

*.bj.refer.org

81.91.236.2 (sur mail-cotonou)

friends.bj.refer.org

81.91.236.7

Openvz

Hébergement temporaire

temporaire.bj.refer.org

81.91.236.2 (sur mail-cotonou)

temp.bj.refer.org

81.91.236.8

Openvz

Mysql

bj.refer.org

81.91.236.2 (sur mail-cotonou)

mysql.bj.refer.org

81.91.236.9

Openvz FAIT!! :-)

Mysql friends

bj.refer.org

81.91.236.2 (sur mail-cotonou)

mysql-friends.bj.refer.org

81.91.236.10

Finalement, je sépare les serveurs mysql

Voip

voip.bj.refer.org

81.91.236.1 (nat sur le serveur interne)

voip.bj.refer.org

81.91.236.11

Openvz

Mirroir débian/Ubuntu

debian/ubuntu.bj.refer.org

81.91.236.4 (sur nfs-cotonou)

debian/ubuntu.bj.refer.org

81.91.236.13

Openvz

Outils de monitoring

admin.bj.refer.org

Nouveau

admin.bj.refer.org

81.91.236.14

Openvz FAIT :-)

Spécificités du CNFC

Espace disque

On a décidé de créer un volume logique pour chaque VE. Ensuite; cela permet de contrôler l'espace en plus des options internes d'OpenVZ.Donc pour ce faire on a du lvm sur du raid1 (question de redondance imédiate) sur les deux disques durs de la machine. On crée tous les lv dans le VG sys en attendant d'avoir les nouveaux disques pour séparer plus finement la configuration.

A la date du 04/02/2009 on avait :

openvz:~# vgdisplay
  --- Volume group ---
  VG Name               sys
  System ID
  Format                lvm2
...
  Alloc PE / Size       7584 / 29,62 GB
  Free  PE / Size       111528 / 435,66 GB

dans lequel on loge les Volumes Logiques (VL) des VEs.

Adressage Mac

On utilise une racine commune pour toutes les interfaces des VEs. Avec une base de la forme "00:E1:00:01:" et un numéro de VE de la forme XXX, cela donne : "00:E1:00:01:XX:XA" pour l'interface eth0 de la VE et "00:E1:00:01:XX:XB" pour la VETHXXX de l'hôte.

Le template

Ben, c'est un template etch standard avec installé par défaut des outils comme vim, wget, nscd, logcheck, logrotate, ssh, etc. On y ajoute le resolver par defaut à 81.91.236.2.

Script de création

# Définition de la fonction de génération des adresses macs à partir du numéro du VE 

mac () { 
# La racine commune de l'adresse MAC est fixee 
mac="00:E1:00:01:"                             

# faire un controle sur la variable name (VEID du serveur) 
if [ $1 -gt 100 ]                                          
then                                                       
        {                                                  
        # Formater la variable name pour l'ajouter au reste de l'adresse MAC 
        mac0=$(echo $1 | sed 's/./&:/g');                                    
        mac0=$(echo $mac0 | sed 's/^\(.\{1\}\).\(.*\)$/\1\2/');              
        mac0=$(echo $mac0 | sed 's/^\(.\{4\}\).\(.*\)$/\1\2/');              

        # Ajouter le résultat obtenu a la racine de l'adresse MAC pour obtenir des adresses MAC completes 
        mac1=$(echo "$mac""$mac0""A");                                                                    
        mac2=$(echo "$mac""$mac0""B");                                                                    
        }                                                                                                 
else                                                                                                      
        {                                                                                                 
echo "Le nombre entre doit etre supérieur à 100";                                                         
return 0;                                                                                                 
        }                                                                                                 
fi                                                                                                        
};                                                                                                        

# recuperation des variables a utiliser dans le script
echo "Entrer le numero de la machine virtuelle a creer s'il vous plait"
read name                                                              
echo "Entrer la taille de la machine virtuelle a creer s'il vous plait"
read taille                                                            
echo "Entrer le nom du groupe de volumes a utiliser s'il vous plait"   
read grvol                                                             
echo "Entrer le nom de l'hote de la machine virtuelle a créer s'il vous plait"
read hostname                                                                 
echo "Entrer l'adresse IP de la machine virtuelle a créer s'il vous plait"    
read ipadd                                                                    
echo "Entrer le nom du pont auquel la machine virtuelle sera ajoutée s'il vous plait"
read bridge                                                                          

# verifier que le numéro entré est supérieur à 100
if [ $name -lt 100 ]                              
then                                              
        {                                         
        echo "le numero du serveur doit être supérieur a 100";
        exit 0;                                               
        }                                                     
fi                                                            

# verifier que le volume logique a creer n'existe pas encore
if [ -e /dev/mapper/$grvol-$name ]                          
then                                                        
         {                                                  
            echo "le point de montage existe déja";         
            exit 0;                                         
        }                                                   
fi                                                          

# Creation d'un volume logique
echo "creation du volume logique" 
lvcreate --size $taille --name $name $grvol 

# Creation du système de fichier
echo "création du système de fichier"
mkfs.ext3 /dev/$grvol/$name          

# Ecriture des bonnes lignes dans le fstab
echo "écriture des bonnes lignes dans le fstab"
echo ''/dev/mapper/$grvol-$name /var/lib/vz/vz_list/$name     ext3    defaults,errors=remount-ro      0       2 '' >> /etc/fstab

# Creation du repertoire de montage
echo "creation du repertoire de montage"
mkdir /var/lib/vz/vz_list/$name

# Montage des volumes logiques créés
echo "montage"
mount -a

# Création de l'environnement virtuel
vzctl create $name --ostemplate debian-4.0-i386-minimal

# Specification du nom du serveur virtuel
echo  "Specification du nom du serveur virtuel"
vzctl set $name --hostname $hostname --save

# Specification de l'adresse IP du serveur virtuel
echo  "Specification de l'adresse IP du serveur virtuel"

# Specification de la bonne addresse IP dans le fichier /etc/network/interfaces
sed -i 's/address 81.91.236.7/address '$ipadd'/g' /var/lib/vz/vz_list/$name/private/etc/network/interfaces

# creation de l'interface veth de la machine virtuelle

# appel de la fonction de creation des adresses MACs et passage de paramètre
mac $name

# Attribution d'une adresse veth au VE
vzctl set $name --netif_add "eth0,$mac1,veth$name.0,$mac2,$bridge" --save

# demarrage de la machine virtuelle
vzctl start $name

Script de suppression

demontage () {
# Retrait de la ligne de montage du fichier fstab 
echo "Retrait de la ligne de montage du répertoire de la machine virtuelle du fichier fstab " 
sed -ie '/'$1'/d' /etc/fstab 
# suppression de tous les processus tournant sur le répertoire de montage 
rep=$(lsof /var/lib/vz/vz_list/$1) 
if [ -n "$rep" ] 
then 
{ 
fuser -k /var/lib/vz/vz_list/$1/* 
} 
fi 
#démontage de la partition 
umount /var/lib/vz/vz_list/$1 
#Suppression du répertoire de montage 
echo "Suppression du répertoire de montage de la machine virtuelle" 
rmdir /var/lib/vz/vz_list/$1 
#récupération du nom du volume logique
vol=$(lvdisplay | grep $1 | cut -c 26-40 )
#Suppression du volume logique 
echo "Suppression du volume logique de la machine virtuelle" 
lvremove -f $vol
} ;

# Récupération de la variable de suppression 
echo "Entrer le numero de la machine virtuelle a supprimer s'il vous plait" 
read name 
#Controle de l'existence de la VE 
ve=$(vzlist | grep $name) 
if [ -z "$ve" ] 
then 
{ 
echo "La machine virtuelle $name n'existe pas" 
exit 0 
} 
fi 
# Demande de confirmation 
echo "Etes vous sur de bien vouloir supprimer la machine virtuelle $name [oui/non]?" 
read conf 
# Confirmation positive 
if [ "$conf" = "oui" ] 
then 
{ 
# Arrêt de la ve 
vzctl stop $name 
#Suppression de la machine virtuelle 
echo "Suppression de la machine virtuelle" 
vzctl destroy $name 
#Suppression de son fichier de configuration 
echo ""Suppression du fichier de configuration 
rm /etc/vz/conf/$name.conf.destroyed 
#Appel de la fonction demontage
demontage $name
#Message final
echo "La machine virtuelle" $name "a ete complètement purgée" 
} 
#confirmation négative 
else 
{ 
exit 0 
} 
fi

Todo list