Viurtualisation chez ovh avec kvm

Il peut être intéressant et économique de monter des machines virtuelles sur un serveur. Le réseau ovh étant un peu particulier voici la procédure pour monter des vm rapidement.

  • Installation des paquets nécessaires
# yum install kvm python-virtinst libvirt.x86_64 virt-top kernel
  • Modification du grub.conf

On y ajoute le nouveau kernel

# cat /boot/grub/grub.conf
default=0
timeout=5

title linux centos6_64_kvm
 kernel /boot/vmlinuz-2.6.32-279.11.1.el6.x86_64 root=/dev/md1 ro
 initrd /boot/initramfs-2.6.32-279.11.1.el6.x86_64.img
 root (hd0,0)
title linux centos6_64
 kernel /boot/bzImage-3.2.13-xxxx-grs-ipv6-64 root=/dev/md1 ro
 root (hd0,0)
  • Ajout du repot epel
# rpm -Uvh http://mir01.syntis.net/epel/6/x86_64/epel-release-6-8.noarch.rpm
  • Redemarrage sur le nouveau noyau
# reboot
  • Démarrage des services kvm
# service libvirtd start
# chkconfig --level 345 ksm on
# chkconfig --level 345 ksmtuned on
  • Configuration réseau
# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
 DEVICE=eth0
 BRIDGE=br0
 ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
 TYPE=Bridge
 BOOTPROTO=static
 IPADDR=MYIPADRESS
 NETMASK=255.255.255.0
 ONBOOT=yes
 GATEWAY=MYGATEWAY
  • Création d’une machine virtuelle
# /usr/bin/qemu-img create -f qcow2 -o preallocation=metadata /home/vm/myimage.img 50G
# virt-install --name=mymachine --ram=4096 --vcpus=1 --os-variant=rhel6 --disk=path=/home/vm/myimage.img --network=bridge=br0,type=virtio,mac=[MACOVH] --location=ftp://mir1.ovh.net/ftp.centos.org/6.5/os/x86_64 --accelerate -x "console=ttyS0"

Lors de l’installation, au moment du paramétrage réseau, il faut mettre ces informations :

ip : IP FAILOVER  / 32 
gateway : MONKVMSERVEUR mais avec 254 à la fin (la même gateway que notre kvm serveur)
nameserver : 213.186.33.99
  • Après l’installation

Sur ma Centos, j’ai besoin de paramétrer la route par défaut

# cat /etc/sysconfig/network-scripts/route-eth0
 KVMSERVER .254 dev eth0
 default via KVMSERVER .254 dev eth0

Have Fun !!

Purge qmail queue

purge qmail queue

Deux solutions sans avoir à  installer de softs supplémentaires :

  • methode bourrain
/etc/init.d/qmail stop
find /var/qmail/queue/mess -type f -delete
find /var/qmail/queue/info -type f -delete
find /var/qmail/queue/local -type f -delete
find /var/qmail/queue/intd -type f -delete
find /var/qmail/queue/todo -type f -delete
find /var/qmail/queue/remote -type f -delete
/etc/init.d/qmail start
  • methode plus douce
# edit /var/qmail/control/queuelifetime file et mettre 1 seconde 
# /etc/init.d/qmail restart
# vérifier que la queue est proche /var/qmail/bin/qmail-qstat
# un fois que tout est bon remettre le bon queuelifetime (chez nous 259200) et redemarrer qmail

 

Mise à jour dns automatique avec dhcp

Comment mettre à jour son dns à partir des noms de machine (hostname) de son réseau perso ? A quelles choses près reproduire le dns à la sauce Microsoft… Attention tout ceci ne doit pas être reproduit dans un environnement d’exploitation où l’on préfère rester maitre de sa configuration

Prenons le cas où vous n’avez aucun de ces services installé sur votre serveur. Nous allons utiliser comme serveur DNS bind et le serveur dhcp de linux.

  • Installation du DNS et du DHCP

Il faut les paquets bind et dhcpd sur debian les voici :

 root~# aptitude install bind9 dhcp3-server
  •  Configuration du serveur dhcp

Voici la conf auque vous devez arriver :

 root~# cat dhcpd.conf
 # ip de votre serveur
server-identifier 192.168.1.1;
authoritative;
 #Spécifie la méthode pour se connecter au serveur dns
ddns-update-style interim;
 #secret key la même qui sera mis dans le named.conf
key mykey {
algorithm hmac-md5;
secret "secret_md5_hash";
};
# Cette section quelle clé utilisé pour chaque zone
zone example.com. {
primary 192.168.1.1;
key mykey;
}
zone 1.168.192.in-addr.arpa. {
primary 192.168.1.1;
key mykey;
}
#Paramètres de la zone dhcp
subnet 192.168.1.1 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.100;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option domain-name "blog.minitux.fr";
one-lease-per-client on;
default-lease-time 14400;
option routers 192.168.1.1;
option domain-name-servers 192.168.1.1;
}
  •  Configuration du serveur dns
root~# cat named.conf
// La même clé que celle du dhcpd.conf
key mykey {
algorithm hmac-md5;
secret "secret_md5_hash";
};
//Quelques options pour notre serveur
options {
forwarders {208.67.222.222;208.67.222.220; };
};
//Autoriser la communication entre dhcp et dns
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; 192.168.1.1; } keys { "mykey";};
};
//Les zones
zone "blog.minitux.fr" {
type master;
notify no;
file "/etc/bind/mintux.conf";
allow-update { key mykey; };
};
zone "1.168.192.in-addr.arpa"{
type master;
notify no;
file "/etc/bind/minitux.conf.rev";
allow-update { key mykey; };
};
  • Reload des différentes conf
root~# /etc/init.d/bind restart
root~# /etc/init.d/dhcpd restart
  • Configuration des clients

Pour les postes Windows aucune configuration particulière…

Attention, par défaut le client dhcp de Linux n’envoie pas son hostname. Il faut pour decommenter une option dans le fichier du dhclient

send host-name "hostname"

Reset mysql root password

Ou comment pouvoir se connecter en root à mysql quand on ne connait pas le mot de passe :

Voici les différentes étapes à suivre :

! Attention toutes les commandes devront être excécuter en tant que root système

  •   Arrêt du service mysql
 # /etc/init.d/mysql stop
Stopping MySQL database server: mysqld.
  •  Lancer mysql sans mot de passe
 # mysqld_safe --skip-grant-tables &
[1] 4388
Starting mysqld daemon with databases from /var/lib/mysql
mysqld_safe[605]: started
  •  Connexion à mysql server à l’aide du client
 # mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 5.0.13-Debian_1-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql>
  •  Mise en place du nouveau mot de passe root
mysql> use mysql;
mysql> UPDATE user SET Password=PASSWORD('LE-MOT-DE-PASSE') WHERE user='root';
mysql> flush privileges;
mysql> quit;
  • Restart de MySQL Server:
 # /etc/init.d/mysql stop
Stopping MySQL database server: mysqld
STOPPING server from pid file /var/run/mysqld/mysqld.pid
mysqld_safe[6186]: ended
[1]+ Done mysqld_safe --skip-grant-tables
 # /etc/init.d/mysql start
# mysql -u root -p

Les explications de mysql

Synchronisation d’un rep local vers un ftp distant

Voici le problème : Je souhaite sauvegarder mon répertoire local sur un ftp (par exemple free).

Le plus pratique aurait été rsync me direz vous ! mais il faut que rsync soit installé sur le serveur distant

J’ai trouvé un script perl, voici le lien du script :

mirror.pl

Vous l’enregistez sur le disque dur à l’endroit de votre choix, ensuite cela s’utilise comme cela :

lftp -e "open ftpperso.free.fr ; user minitux ; 
mirror -n -R ton_dossier_local1 ton_dossier_distant1 ; bye"

Si vous voulez optimisez cela avec un script bash, voici un exemple :

# Script Bash # 
#!/bin/sh 
mirror='CHEMIN OU SE TROUVE LE SCRIPT MIRROR '

syncFTP () { 
lftp << EOF
open -u 'minitux.password' ftpperso.free.fr 
mirror -n -R $1 $2; 
bye;
EOF
}
syncFTP REP_LOCAL REP_DISTANT

Vous enregistrez ceci sous un fichier .sh avec un chmod +x et vous pourrez synchronisez votre répertoire aussi souvent que vous le souhaitez avec les fichiers qui ont changés.

Yum update par email

Il peut être très intéressant de recevoir un email lorsque des mise à jour sont disponibles. Sur cet article nous partons du principe que l’envoi de mail fonctionne déjà.

  • Installation 

Nous allons utiliser le package yum-cron.

# yum install yum-cron
  • Configuration

Il faut pour cela éditer le fichier /etc/sysconfig/yum-cron et ajouter l’adresse email à MAILTO

MAILTO=email@address.com

Regardez le reste du fichier et soyez sur d’avoir désactivé les mises à jour automatique

  • Démarrage 

On choisit de l’activer automatiquement et on démarre le service

chkconfig yum-cron on
service yum-cron start

C'est tout !

Sudo sans mot de passe

Juste une petite astuce qui peut s’avérer bien pratique si vous avez souvent à taper votre mot de passe pour le sudo.

Grâce à ceci vous n’aurez plus à rentrer de mot de passe.

root~# sudoedit /etc/sudoers

Ajoutez ensuite ceci :

monuser ALL = NOPASSWD: ALL

Remplacer juste l’utilisateur monuser par le votre.
Enregistrez puis quittez !

Petite précision car ceci ne respecte aucune norme de sécurité … Si vous devez le faire sur des serveurs il faut choisir un programme :

monuser ALL = NOPASSWD: /usr/bin/shutdown  par ex

Si vous souhaitez en savoir plus sur la commande sudo :

sudo sur wikipedia

Réplication de données avec mysql

Voici le résultat d’un projet tout simple à mettre en place….

Le principe est simple ! Lorsque que notre base de données est modifié, les données sont reproduites sur un deuxième serveur de manière automatique.

Pour cela imaginons tout d’abord qu’une base de données soit en exploitation sur un serveur.

Ce dit « serveur » sera appelé serveur maitre.
Notre base de données sera répliqué sur un second serveur appellé serveur esclave.

Voici les étapes pour mettre en place cette réplication :

  •  Configuration du serveur maître :

Création d’un utilisateur Mysql pour que le serveur esclave puisse accéder à la base de notre serveur maitre.

user@master:$ mysql -u root -p
mysql -> GRANT REPLICATION SLAVE ON *.* TO rep_slave@192.168.1.100
-> IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql -> FLUSH PRIVILEGES;
mysql -> quit;

Ensuite on édite le fichier de configuration de Mysql (my.cnf dans /etc/ normalement…)
avec les paramètres suivants :

server-id = 1 # à décommenter
log_bin = /var/log/mysql/mysql-bin.log # où stocker les logs binaires
binlog-do-db = entrepot # base que l'on souhaite répliquer
binlog-ignore-db =  mysql  #base que l'on ne souhaite pas répliquer

Pour prendre en compte ces modifications, le service doit être redémarré.

root@master:# /etc/init.d/mysql restart

On vérrouille les tables de la base « entrepot » en mode lecture seule pour éviter les modifications éventuelles.

user@master:$ mysql -u root -p
mysql -> USE entrepôt ;
mysql -> FLUSH TABLES WITH READ LOCK ;

Les informations du serveur maître s’affichent telles que :

mysql -> SHOW MASTER STATUS;
File          Position   Binlog_Do_DB   Binlog_Ignore_DB
mysql-bin.000012 98         entrepot       mysql

Les informations File et Position seront nécessaires à la configuration du serveur esclave.
La base entrepot du serveur maître est exportée grâce à la commande suivante :

user@master:$ mysqldump -u root -p entrepot > entrepot.sql
  • Configuration du serveur esclave :

Considérons que Mysql est installé sur le serveur esclave.

Voici les options à prendre en compte pour la configuration de ce service (dans my.cnf du serveur esclave) :
server-id = 2 # numéro différent du master
#log_bin = /var/log/mysql/mysql-bin.log # à commenter__

Création et importation de la base « entrepot » sur le serveur esclave.

user@slave:$ mysql -u root -p
mysql -> CREATE DATABASE entrepot;
mysql -> quit;
user@slave:$ mysql-u root -p entrepot < entrepot.sql

Redémarrage du service Mysql pour prendre en compte les modifications de configuration.

root@slave:# /etc/init.d/mysql restart

Puis dans un shell Mysql :

mysql -> SLAVE STOP;
mysql -> CHANGE MASTER TO MASTER_HOST='192.168.1.50',
 -> MASTER_USER='rep_slave', MASTER_PASSWORD='password',
-> MASTER_LOG_FILE='MySQL-bin.000012', MASTER_LOG_POS=98;
mysql -> SLAVE START;

Les tables du serveur maître doivent être déverrouillées :

mysql -> USE entrepot ;
mysql -> UNLOCK TABLES ;

Le fichier de journalisation permet de savoir si la connexion s’est effectuée.

root@slave:# tail -f /var/log/mysql.log

Des informations de connexion en direction de la base maître doivent apparaître, cependant aucune erreur ne doit être présente.

Voilà c’est fini !

Pour plus d’infos il vous reste la doc mysql !

documentation mysql