Mot-clef: Performance

MySQL Haut Disponibilité (Réplication)

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.

replication

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: ,
Posted in App | No Comments »

Consommation réelle et cout d’une eee box sous Linux

janvier 26th, 2009

eee-box-consommation

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

FreeBox HD (veille): 14W
FreeBox HD (lecture TV): 15,5W

Tags: , ,
Posted in Stuff | 2 Comments »

Accélérer les performances de votre blog ou de vos applications Web pour mobile

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 :

  • css
  • js
  • images 
  • html
  • php 

 

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: , ,
Posted in Web | No Comments »

Eee Box, le serveur Linux parfait pour héberger un blog chez soi

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: , , , , ,
Posted in Stuff | 19 Comments »

Raid 1 logicielle sous Linux – Comment mettre en place une solution de mirroring

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:

  • cout de stockage élevé

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: , , , ,
Posted in System | 1 Comment »

Page suivante Page précédente