Resynchroniser réplication MySQL Master-Slave

On 22 septembre 2010, in MySQL, by benjamin

Se connecter au serveur esclave (slave) en ssh et arrêter la réplication :

root@~# mysql -u root -p 

mysql> STOP SLAVE;

Sur une autre console, se connecter au serveur maître et exécuter les commandes MySQL suivantes :

Faites un dump de la base, et copier le fichier sur votre esclave.
root@~ # mysqldump -u root -p nom_base > dump.sql
root@~ # scp dump.sql root@serveur_slave:~/dump.sql
mysql> SHOW MASTER STATUS; //pour empêcher que des données soient écrites
Il faut repérer le nom du fichier de log actuel et la position

Retournons à la console sur le serveur esclave .

root@~ # mysql -u root -p nom_base < dump.sql

root@~ # mysql - u root -p

mysql >
CHANGE MASTER TO
  MASTER_LOG_FILE='[File]',
  MASTER_LOG_POS=[Position];
START SLAVE;

Voilà c’est assez simple et rapide comme procédure, le seul problème c’est que ça peut prendre du avec de grosses bases de données, entre le dump, la copie et l’import…

Je conseille toujours d’attendre les périodes calmes de la journée pour faire une resync.

A+

Ben

Load Balancing avec HAProxy

On 25 août 2010, in Debian, Linux, by benjamin

Je n’ai à ce jour jamais trouver un reverse proxy /load balancer aussi bien que HA Proxy.

Installer HA Proxy est très simple, le configurer aussi néanmoins de nombreuses options sont possibles.

Sur une debian c’est très simple, c’est un package standard :

apt-get update; apt-get install haproxy

Quelques secondes plus tard ça y est HA Proxy est installé.

La documentation est asssez longue vous la trouverez sur le site d’HA Proxy

Le fichier de conf se trouve dans /etc/haproxy/haproxy.cfg

il y a 2 parties importantes + 1 / frontend +1 / backend

global
 log localhost   local1 notice
 log localhost   local0 info
 maxconn 4096
 user haproxy
 group haproxy
 daemon
defaults
 log     global
 mode    http
 option  httplog
 option  dontlognull
 option  httpclose
 retries 3
 option redispatch
 maxconn 2000
 contimeout      5000
 clitimeout      50000
 srvtimeout      50000
frontend httpd-in
 bind *:80

 acl is_dsivolant hdr_end(host) -i dsivolant.com
 use_backend demo if is_dsivolant
 default_backend demo
backend demo
balance roundrobin
 cookie SERVERID insert  indirect
 option httpchk HEAD /check.txt HTTP/1.0
 option httpclose
 option forwardfor
 server  srv1 a.b.c.d1:80 cookie srv1 check inter 2000
 server  srv2 a.b.c.d2:80 cookie srv2 check inter 2000

 stats uri /my_stats
 stats realm Statistics\ for\ DEMO
 stats auth dsivolant:monmotdepasse
 stats scope .

enfin pour appliquer les changements

/etc/init.d/haproxy reload

Voila comment configurer de façon extrement simple et rapide un load-balancer avec des fonctions essentielles :

  • Detection du backend à utiliser en fonction du domaine demandé.
  • aiguillage par cookie
  • configuration de deux serveurs backend
  • Mise en place du service de statistique de HA Proxy pour suivre en temps réel les perfs.

a+

Ben

MySQL Réplication Master-Slave

On 24 août 2010, in MySQL, by benjamin

Pré-requis :

  • 1 base de données
  • Avoir 2 serveurs avec MySQL installé. (cf debian : apt-get install mysql-server-5.0)

Pour quelles raisons configurer MySQL avec 1 serveur Maître et 1 ou plusieurs esclaves :

  • Si votre serveur MySQL est sous une charge importante, avoir des esclaves sur lesquels répartir la charge est une excellente chose dans la mesure où de 80% à 95% des queries sont des SELECT (lecture)
  • Avoir une base de données de secours pour pouvoir relancer un système rapidement en cas de crash du serveur maître.

Ce qui nous conduit maintenant dans le vif du sujet : 2 grandes étapes :

  1. La configuration du Maître
  2. La configuration de l’esclave.

La configuration du Maître

Depuis un terminal editer le fichier de configuration du serveur MySQL :

vi /etc/mysql/my.cnf

#bind-address            = 127.0.0.1
#bind-address            = 192.168.0.1
#le slave doit pouvoir se connecter à cette IP.
server-id               = 1
log-bin                 = /var/log/mysql/mysql-bin.log
expire-logs-days        = 20
max_binlog_size         = 104857600
binlog-do-db            = maBaseDeDonnees
binlog-ignore-db        = mysql,test

redemarrer MySQL :

/etc/init.d/mysql restart

Connexion à la bdd

mysql -u root -p

Création de l’utilisateur qui va nous servir à la replication

GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'IPMachineSlave'
IDENTIFIED BY 'motdepasse';

FLUSH PRIVILEGES ;

Création de la base à répliquer.

create database maBaseDeDonnees;
USE maBaseDeDonnees;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+------------------+----------+---------------------------+--
| File             | Position | Binlog_Do_DB              | B
+------------------+----------+---------------------------+--
| mysql-bin.000007 |      197 | maBaseDeDonnees,maBaseDeDonnees
+------------------+----------+---------------------------+--

La position est importante, elle va nous servir pour la configuration du slave

La configuration de l’esclave

Connexion à la bdd

mysql -u root -p

Edition du fichier my.cnf sur le serveur slave :

server-id=2
master-host=192.168.0.1
master-user=slaveuser
master-password=motdepasse
master-connect-retry=60
replicate-do-db=maBaseDeDonnees

Redémarrage du serveur slave :

/etc/init.d/mysql restart

Connexion à mysql :

mysql - u root -p
SLAVE STOP ;
CHANGE MASTER TO MASTER_HOST='192.168.0.1', MASTER_USER='slaveuser',
MASTER_PASSWORD='motdepasse',
MASTER_LOG_FILE='mysql-bin.000007',MASTER_LOG_POS=197;
START SLAVE;

Voila vous pouvez remplir votre BDD comme bon vous semble (création de table, insertion etc…) Tout ce qui sera fait sur le master sera aussi fait sur le slave.

Si vous avez des questions n’hésitez pas.

Configurer MySQL Proxy

On 22 juillet 2010, in MySQL, by benjamin

Pré-requis : Avoir 2 serveurs MySQL configurés en Master Slave (voir notre article)

Voila comment j’ai procédé pour installer et configurer simplement mysql proxy.

En root depuis une debian 5.0 :

apt-get install mysql-proxy

Sur debian il y a fichier principal de configuration : /etc/default/mysql-proxy

Le contenu de ce fichier est simple :

ENABLED="true"
OPTIONS="--proxy-lua-script=/etc/mysql/rw-splitting.lua --proxy-address=192.168.0.1:3307 --proxy-read-only-backend-addresses=192.168.0.2:3306 --proxy-backend-addresses=192.168.0.1:3306"

  • ENABLED="true" : permet de lancer mysql proxy par sysinit ou à la main.
  • –proxy-lua-script=/etc/mysql/rw-splitting.lua : c’est la ligne qui permet d’ajouter le script pour le Splitting.
  • –proxy-address=192.168.0.1:3307 : adresse du proxy
  • –proxy-read-only-backend-addresses=192.168.0.2:3306 : adresse du slave (il ne faut pas écrire sur le slave sinon il va se désynchroniser du master
  • –proxy-backend-addresses=192.168.0.1:3306 : adresse du master

Il ne reste plus qu’à copier le fichier rw-splitting.lua dans /etc/mysql comme nous l’avons paramétrer.  Vous pouvez le télécharger à partir d’ici

Pour que ça fonctionne bien et sans problème voici quelques petits conseils précieux :

  1. Utiliser qu’un seul codage de caractère : utf-8 ou ou latin1 (par défaut) les CMS actuels ou même phpmyadmin a tendance à initialiser la connexion en utf-8, alors le mieux c’est que par défaut tout soit en utf8 dans le my.cnf (article à venir)
  2. Il faut que l’utilisateur de la bdd soit autorisé à se connecter à distance sur chacun des serveurs mysql
  3. Enfin penser à débinder les serveurs mysql de localhost.

Voila a+

Ouverture du blog Eureka!

On 22 juillet 2010, in Général, by benjamin

DSI Volant vous souhaite la bienvenue sur son blog Eureka.

Nous espérons que vous y trouverez les solutions que vous chercher et bien évidement vos commentaires sont les bienvenus.

Les articles auront pour principales thématiques :

  • Linux
  • Hébergement
  • Sécurité
  • Virtualisation
  • Tests de solutions commerciales.

a+