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

Le 9 sept. 2013 à 15:10, Thomas Pedoussaut <tho...@pedoussaut.com> a écrit :

> 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
>> 
>> Pour tout ça MySQL Proxy semblait tout faire sur le papier, à l'aide de 
>> scripts LUA : http://dev.mysql.com/doc/relnotes/mysql-proxy/en/index.html
>> 
>> 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.
Le Rayon UX – http://t37.net

_______________________________________________
Liste de diffusion du FRsAG
http://www.frsag.org/

Répondre à