Mot-clef: Performance
mars 4th, 2009
Avec des bases de données Mysql et des tables contenant plusieurs millions d’enregistrements, les sauvegardes deviennent assez lourdes. Si un serveur tombe, cela peut entrainer plusieurs heures perdues, le temps de mettre en place un nouveau serveur, de réimporter les données depuis la backup. Nous ne parlons même pas des pertes financières potentielles due à cette période. On peut parvenir à une meilleure stabilité avec Mysql soit grâce à un cluster ou une réplication. Nous allons nous concentrer sur la réplication dans cet article. Quoiqu’il en soit, ceci est un rapide tutorial pour mettre une réplication en place; Faîtes un tour dans la documentation Mysql pour en savoir plus.
Le master peut répliquer ses données vers plusieurs esclaves, auxquels des clients web différents peuvent envoyer leurs requêtes. Les écritures doivent toujours être envoyées au master. Si elles sont envoyées à un esclave, elles ne seraient pas répliquées sur les autres serveurs.
Note La réplication est asynchrone puisque l’esclave a besoin d’un petit délai pour être mis à jour. C’est particulièrement adapté pour les applications comme les datawarehouses.
Fail-over
La réplication ne fournit pas d’auto-failover car elle requiert une intervention manuelle. Un autre article est disponible sur l’implementation du failover avec Heartbeat. Cela donne la possibilité de basculer le trafic automatiquement vers le serveur esclave en quelques secondes.
Démarrage
Nous assumerons avoir un serveur seul contenant déjà les informations précieuses, et où l’on veut implémenter un système de redondance. Procédez de la manière suivante pour que votre serveur soit prêt à la réplication:
- Activatez le log binaire sur le serveur maître. C’est absolument nécessaire, l’esclave doit lire ces fichiers binaires pour se synchroniser. my.cnf contient log-bin=mysql-bin dans la section [mysqld] dans mon cas
- Ajoutez server-id=1 dans my.cnf.
Cet id doit être unique pour chaque serveur (L’esclave sera 2). Redémarrez le service si ces options n’étaient pas activées.
- Créez un compte pour l’esclave sur le master pour qu’il soit autorisé à répliquer:
GRANT REPLICATION SLAVE ON *.*
TO 'slave'@'192.168.0.3' IDENTIFIED BY 'mypassword';
où ’slave’ est le nom d’utilisateur avec lequel le serveur esclave va se connecter, 192.168.0.3 l’adresse IP de l’esclave.
- Mettez en place une nouvelle machine pour le serveur esclave et installez Mysql. my.cnf doit contenir ceci:
[mysqld]
server-id=2. Ne démarrez pas le service maintenant!
Transfer des données vers l’esclave
- Bloquez tout d’abord les opérations d’écriture sur le master et enregistrez les dernières valeurs depuis le log binaire:
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
Vous devriez obtenir quelque chose de similaire à ceci:
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| my-db1-bin.000002 | 239 | | |
+-------------------+----------+--------------+------------------+
Soyez sûrs d’enregistrer ces valeurs, elles seront nécessaires pour la suite.
- Arrétez le processus Mysql sur le maître et faîtes une copie du répertoire de données avec tar par exemple. Après avoir exécuté tar, redémarrez le service. C’est la seule fois que le master sera arrété.
- Copiez le fichier tar sur l’esclave dans le répertoire temp par exemple, décompressez le et copiez les fichiers vers le répertoire de données. Ne copiez pas les fichiers de log.
Vérifiez que les droits sont corrects (Ils doivent être identiques aux fichiers originaux). Vous avez maintenant les données du master sur l’esclave.
Activation de la réplication sur l’esclave
Démarrez l’esclave avec l’option suivante:
–skip-slave-start
Vous pouvez aussi logguer les warnings dans le log d’erreurs pour avoir une meilleure idée de se qui se passe
–log-warnings
Maintenant que le serveur est démarré, connectez-vous dessus avec un client Mysql, et ajoutez les détails du master:
mysql> CHANGE MASTER TO
mysql> MASTER_HOST='192.168.0.2',
mysql> MASTER_USER='slave',
mysql> MASTER_PASSWORD='mypassword',
mysql> MASTER_LOG_FILE='my-db1-bin.000002',
mysql> MASTER_LOG_POS=239;
Les 2 dernières lignes contiennent bien sûr les valeurs récupérées sur le master.
mysql> START SLAVE;
La réplication peut commencer!
Le status de l’esclave peut être vérifiée via la commande suivante:
mysql> show slave status;
+---------------------+-------------+-------------+-///-+---------------+-------------------+
| Slave_IO_State | Master_Host | Master_User | | Connect_Retry | Master_Log_File |
+---------------------+-------------+-------------+-///-+---------------+-------------------+
| Waitin...send event | 192.168.0.2 | slave | | 60 | my-db1-bin.000006 |
+---------------------+-------------+-------------+-///-+---------------+-------------------+
+---------------------+---------------+---------------+-----------------------+-----------------+
| Read_Master_Log_Pos | Relay_Log_File| Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running|
+---------------------+---------------+---------------+-----------------------+-----------------+
| 514457737 | s...in.000007 | 26082745 | my-db1-bin.000006 | Yes |
+---------------------+---------------+---------------+-----------------------+-----------------+
+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+
| Slave_SQL_Running | | Exec_Master_Log_Pos | Relay_Log_Space | | Seconds_Behind_Master |
+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+
| Yes | | 514457737 | 26082745 | | 0 |
+-------------------+-///-+---------------------+-----------------+-///-+-----------------------+
Si la réplication arrête de fonctionner pour quelque raison que ce soit, la dernière erreur sera affichée ici. Vous pouvez aussi les trouver dans le fichier de log d’erreurs mysql.
Désactivez l’option –skip-slave-start du script de démarrage pour que la réplication soit activée après le redémarrage du serveur.
David Roze
Source: http://www.netexpertise.eu/fr/mysql/replication-haute-disponibilite.html
Plus d’infos sur : http://www.dbnewz.com/tag/replication/
Tags: MySQL, Performance
Posted in App | No Comments »
janvier 26th, 2009

Mesures de puissance:
eee box (seul): 12W
eee box (+clef usb): 12,5W
eee box (+disque dur autoalimenté 160G): 14,5W
Finalement la consommation (réelle) n’est pas de 20W.
Cout électricité:
mensuel
- 2€ pour une eee box seul alimenté 24h/24 7j/7
- 2,5€ pour une eee box seul alimenté 24h/24 7j/7 + clef usb + disque dur 160G autoalimenté
annuel
- 24€ pour une eee box seul alimenté 24h/24 7j/7
- 30€ pour une eee box seul alimenté 24h/24 7j/7 + clef usb + disque dur 160G autoalimenté
Pour information une eee box consomme moins que le boitier HD Freebox !

FreeBox HD (veille): 14W
FreeBox HD (lecture TV): 15,5W
Tags: Eee Box, Linux, Performance
Posted in Stuff | 2 Comments »
septembre 29th, 2008
Il y a un petit moment que je me demandais à quoi servait ce bouton Turbo dans le panel d’admnistration de WordPress.

En cliquant sur le lien Turbo il est possible d’installer Google Gears.
Google Gears améliore les temps d’accés à des pages webs. Il est utilisé par des produits comme Google Docs, Google Reader. Zoho l’intègre déjà dans sa suite bureautique en ligne.

Une fois installé l’application va accélérer l’accès aux sites compatibles Gears.
Tous les sites ne permettent pas à leur internautes de profiter de Google Gears.
Activons Gears pour www.benjaminbaudouin.com

En réalité Gears stocke en local (cache) tous le site :

Le résultat est tout simplement HALLUCINANT !
Normal me diriez vous: tous le site est en local.
Gears est disponible sous Linux, Mac et Windows, Windows Mobile.
Firefox et Safari (Chrome ?) sont supportés.
Je pense que cela peut ouvrir des portes (meilleurs performances en temps d’accès) notamment pour
- les blogs souvent gourmands en images et javascript.
- applications web pour mobiles
- (autres ?)
Tags: Blog, Google, Performance
Posted in Web | No Comments »
septembre 23rd, 2008
Le contexte
Un salon est un endroit ou l’on aime lire et se détendre: il ne doit donc pas y avoir de bruit.
Un serveur placé à cet endroit doit être suffisamment silencieux pour ne pas troubler cet espace harmonieux.
A la recherche du silence et d’une faible consommation

L’Eee Box consommerait très peu d’énergie (20 Watts en moyenne), serait peu bruyante (26 dB) et démarrerait en moins de temps qu’il ne faut pour le dire (7 secondes selon ASUS).
Fiche technique
- 250 – 300 €
- Intel Atom 1,6 GHz (N270)
- 1 Go de DDR2 (PC5300)
- lecteur de cartes-mémoire (SD/SDHC/MS/MS Pro)
- un disque dur S-ATA 80 Go 5400
- carte réseau Ethernet Gigabit + Wi-Fi 802.11 b/g/n
- 4 ports USB 2.0
- 1 prise casque
- 1 port DVI
- Windows XP Édition Familiale
Linux
- Garantie 2 ans
- 1,3 kg
- 223 x 178 x 26 mm

Si l’on refait le calcul:
P=20 W au lieu de P=89W
Cela représente un besoin en énergie inférieure de 88 % que la solution mise en place.
On en déduit les couts mensuel et annuel en calculant 22 % de 15 €:
Cout mensuel électrique: 3 €
Cout annuel électrique: 40 €
Conclusion
Les économies d’énergies et financières sont réelles: 40€ annuelle au lieu de 147€ pour un serveur classique.
Près de 100€ d’économie.
Il est donc important de s’y attarder. En choisissant cette solution le serveur peut être amorti en 2 ans.
En ce qui concerne le bruit (26dB) j’avoue ne pas vraiment me rendre compte de ce que cela représente.
Cette solution est intéressante dans la mesure ou l’on ne possède pas encore de serveur chez soi.
Qu’en pensez-vous ?
Tags: Blog, eee, Eee Box, Hardware, Linux, Performance
Posted in Stuff | 19 Comments »
septembre 22nd, 2008
Disclaimer
Attention cette procédure est fournit telle quelle. En aucun cas l’auteur ne pourra être tenu responsable en cas de pannes logicielles et/ou matérielles. Aucun support n’est fournit.
Introduction
Cet article vise à mettre en place un solution logicielle de mirroring.
Le RAID 1 logiciel sous Linux permet d’avoir un niveau de redondance de vos données.
Le RAID 1 nécessitent 2 disques physiques de même tailles.

Avantages:
- les données accepte une défaillance de n-1
Lors de la défaillance de l’un des disques, le contrôleur RAID logicielle désactive, de manière transparente pour l’accès aux données, le disque incriminé. Une fois le disque défectueux remplacé, le contrôleur RAID logicielle reconstitue, soit automatiquement, soit sur intervention manuelle, le miroir. Une fois la synchronisation effectuée, le RAID retrouve son niveau initial de redondance.
Inconvénients:
Informations Systèmes
- OS: Debian Etch
- /dev/hda et /dev/hdb de 160 Go
Procédure: environ 3h
Installer mdam
apt-get install mdadm
Configuration des modules Noyau
Charger les modules au démarrage:
echo raid1 >> /etc/modules
echo md >> /etc/modules
Charger les modules au Noyau:
On peut vérifier si les modules raid1 et md sont chargés dans le Noyau:
lsmod | grep raid1
cat /proc/mdstat
Pour les charger:
modprobe raid1
modprobe md
Préparer le second disque dur (hdb) pour le RAID
A cette étape nous avons besoin d’ajouter notre second disque hdb dans le RAID 1.
La première étape consiste à copier la table de partition de hda -> hdb.
Nous utiliserons pour cela la commande sfdisk.
!! ATTENTION !!
sfdisk écrasera toutes les données contenues dans /dev/hdb
sfdisk -d /dev/hda | sfdisk /dev/hdb
Notre second disque hdb est presque prêt.
Afin de terminer notre préparation nous devons changer les Identifiants de partions (ID) en fd (Linux raid autodetect):
for partition in 1 2; do sfdisk --change-id /dev/hdb $partition fd; done
Configurer les Volumes RAID 1
Création des Volumes RAID 1:
for partition in 1 2; do mdadm --create /dev/md$partition --level=1 \
--raid-disks=2 missing /dev/hdb$partition; done
Création des Systèmes de fichiers:
for partition in 1 2; do mkfs.ext3 /dev/md$partition; done
Modifier le fichier de configuration mdadm.conf
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Modifier la table de partionnement /etc/fstab
La table de partitionnement doit être de cette forme au final:
proc /proc proc defaults 0 0
/dev/md1 / ext3 defaults,errors=remount-ro 0 1
/dev/hda5 none swap sw 0 0
Configuration du Boot Manager (GRUB)
On fait d’abord une sauvegarde:
cp /boot/grub/menu.lst /boot/grub/menu.lst_orig
On remplace ensuite toute les occurrence de hda1 en md1:
sed 's/hda1/md1/' < /boot/grub/menu.lst_orig > /boot/grub/menu.lst
On mets à jour GRUB:
update-grub
Copier les données de hda -> hdb
(Re)démmarrage en single mode:
NB: tous les services vont « tomber » et resteront inaccessibles.
init 1
Copie de la partition /:
mount /dev/md1 /media
rsync -aqxP / /media
umount /media
Mise en place du nouveau Boot Manager (GRUB)
grub
Les commandes permettant de démarrer (boot) correctement:
device (hd0) /dev/sdb
root (hd0,0)
setup (hd0)
quit
Redémarrage
mount
doit donner:
/dev/md1 on / type ext3 (rw,errors=remount-ro)
Ajout du premier disque dur (hda) au Volume RAID 1
Changer les ID des partitions avec sfdisk
Comme nous l’avons précédemment effectué il nous faut changer les ID des partitions:
for partition in 1 2 ; do sfdisk --change-id /dev/hda $partition fd; done
Ajouter les partitions avec mdadm au Volume RAID 1
for partition in 1 2 ; do mdadm --add /dev/md$partition /dev/hda$partition; done
A partir de cette dernière commande le RAID 1 doit être actif et commence à reconstruire chaque /dev/md*.
On suivra cette opération avec la commande watch:
watch cat /proc/mdstat
Finaliser la configuration /etc/mdadm/mdadm.conf
cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig1
cp /etc/mdadm/mdadm.conf_orig /etc/mdadm/mdadm.conf
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
Fin
Tout est à présent en ordre. La machine doit être redémarrer afin de s’assurer du bon fonctionnement du RAID 1.
A tout moment l’état du raid1 sera donné par:
cat /proc/mdstat
La sortie d’un RAID 1 en mode nominal est de cette forme:
md1 : active raid1 hda1[0] hdb1[1]
153637504 blocks [2/2] [UU]
Tags: Linux, Mirorring, Performance, Raid, Raid 1
Posted in System | 1 Comment »
Page suivante
Page précédente