Bonjour,
Pour la répartition de charge sur MySQL, nous sommes partis sur plusieurs choses :
Côté applicatif, séparation des requêtes lecture / écriture au niveau de notre framework de connexion à la base de données avec deux handlers, un pour les écritures et un pour les lectures.
Côté infrastructure :
- Un master avec une VIP de réplication, du heartbeat et un script de bascule de la réplication en cas de crash du master.
- Un load balancer avec une VIP pour la lecture, avec heartbeat + haproxy
* des slaves derrière le haproxy
* un script qui check le seconds_behind_master du show slave status et retire les slaves de la grappe en cas de seconds_behind_master > 0
* le master en backup si aucun slave n'est disponible
Comme nous sommes tributaires d'un délai de réplication de l'ordre de la seconde, nous gérons en plus les retards de réplication au niveau applicatif quand celui-ci tente d'accéder à un objet qui n'existe pas encore sur le slave, en postposant la requête d'une seconde.
Hope it helps
Pour la partie repartition de charge
entre les slaves, j'utilise depuis des années (2006) du LVS géré
par keepalived.
En particulier une partie intéressante:
MISC_CHECK { # MISC healthchecker
misc_path <STRING>|<QUOTED-STRING> #
External system script or program
misc_timeout <INTEGER> # Script execution
timeout
# If set, exit code from healthchecker is used
# to dynamically adjust the weight as follows:
# exit status 0: svc check success, weight
# unchanged.
# exit status 1: svc check failed.
# exit status 2-255: svc check success, weight
# changed to 2 less than exit status.
# (for example: exit status of 255 would set
# weight to 253)
misc_dynamic
Donc en jouant bien sur ton script de monitoring, tu peux ejecter
les serveurs trop en retard, et alterer le poids de chaque serveur
en fonction de la charge.
En faisant du lvs-dr ca depotte pas mal, meme avec une dizaine de
slaves, sans SPOF.
On 2013-09-09 09:45, Greg wrote:
Bonjour,
pour l'instant je n'ai pas trouvé mieux qu'une gestion coté
applicatif pour répartir les requêtes de lecture (SELECT...)
sur les slaves MySQL, et les requêtes d'écritures sur le
master, avec gestion un peu plus intelligente qu'un simple
load-balancer :
- regex sur la requête pour pouvoir l'orienter
- gestion des slaves down, spares
- exclusion des slaves ayant trop de délais de réplication
Avez vous des retours sur cet outil ? Où sur d'autres
outils ?
Greg
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/
_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/
--
Frédéric de Villamil / @fdevillamil
I'm not strange, weird, off, nor crazy, my reality is just different from yours.