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.sqlroot@~ # scp dump.sql root@serveur_slave:~/dump.sql
mysql> SHOW MASTER STATUS; //pour empêcher que des données soient écritesIl 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
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
globallog localhost local1 notice log localhost local0 info maxconn 4096 user haproxy group haproxy daemondefaults log global mode http option httplog option dontlognull option httpclose retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000frontend httpd-in bind *:80 acl is_dsivolant hdr_end(host) -i dsivolant.com use_backend demo if is_dsivolant default_backend demobackend demobalance 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
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 :
- La configuration du Maître
- 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.
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 :
- 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)
- Il faut que l’utilisateur de la bdd soit autorisé à se connecter à distance sur chacun des serveurs mysql
- Enfin penser à débinder les serveurs mysql de localhost.
Voila a+
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+
