Bonjour,

peux tu gérer ce cas au niveau applicatif ? Si oui, lors d'une écriture sur
le master, tu peux récupérer sa position (unique) avec "SHOW MASTER
STATUS", et la stocker dans une variable du batch ou dans un Redis par
exemple.
Puis, quand tu veux lire sur le slave, tu peux lui demander d'attendre que
cette position soit répliqués sur lui-même, avant de lire:
https://mariadb.com/kb/en/mariadb/master_pos_wait/

SELECT MASTER_POS_WAIT(log_name,log_pos[,timeout);

Dans le même genre mais moins sûr et plus facile, avec SHOW SLAVE STATUS
sur le slave tu peux vérifier la colonne Seconds_Behind_Master, si elle est
à zéro c'est que tu es (surement) synchro avec le master.

Tu as aussi le plugin de réplication semi-synchrone
https://mariadb.com/kb/en/mariadb/semisynchronous-replication/ mais il ne
résoudra pas du tout le problème. Mais il peut t'être utile quand même.


Greg


Le 27 mai 2015 13:18, Alexandre <in...@opendoc.net> a écrit :

> Idéalement, la données fraiche on a besoin tout le temps, ce qui est
> impactant c'est d'avoir des sorties de traitements différents car à un
> moment T on a des données différentes en entrée.
>
> On 27/05/15 11:54, Aurélien Bras wrote:
>
>> Salut,
>>
>> Sinon tout simplement deux comptes de lectures, un pouvant être
>> désynchro et l'autre pour les lectures qui ont besoin de données
>> fraiches à tout prix et donc qui tape le master directement.
>>
>> Aurélien
>>
>> Le 27 mai 2015 11:07, Alexandre <in...@opendoc.net
>> <mailto:in...@opendoc.net>> a écrit :
>>
>>
>>     J'y avais pensé, en plus c'est pas compliqué, mais on perd la notion
>>     de disponibilité. Si pendant un décalage, on perd le master, on a
>>     une coupure de service et non un service dégradé.
>>
>>     Alex.
>>
>>
>>     On 27/05/15 10:51, Thomas Pedoussaut wrote:
>>
>>
>>         On 2015-05-27 10:18, Nicolas Steinmetz wrote:
>>
>>                 Ma question :
>>                 nous sommes passé par un cluster SQL pour plus de
>>                 disponibilité, mais
>>                 nous avons perdu en "cohérence" des données. Dans notre
>>                 contexte, ce
>>                 n'est pas forcément grave qu'il y est un décalage, mais
>>                 c'est impactant
>>                 qu'il y a une "incohérence" des données. A un moment T,
>>                 le master est à
>>                 jour et pas les slaves, on a 1 chance sur 3, d'avoir une
>>                 données
>>                 différentes. Ma solution serait de retirer le master des
>>                 backend de
>>                 lecture.
>>
>>
>>             A l'inverse, est-ce que ton load balancer ne saurait pas
>>             évaluer la
>>             fraicheur et ou la cohérence (mécanisme de quorum?) des
>>             données et du
>>             coup renvoyer vers le(s) bon(s) serveur(s) ? Le risque étant
>>             qu'il
>>             renvoie tout et tout le temps vers le master et donc les
>>             slaves ne
>>             servent plus à grand chose :-/
>>
>>
>>         L'Etat de l'Art dans ces situation est d'avoir une limite de
>>         fraicheur
>>         sur tes slaves.
>>         Si ils sont plus de X secondes en retard, le LB les retire du
>>         pool, ils
>>         n'ont plus a servire de requetes, et donc ont plus de temps pour
>>         recuperer et rattraper le train. Une fois a jour, ils sont
>>         reintégrés
>>         dans le pool.
>>
>>         A toi de voir ce que tu considere comme acceptable pour X : 3s,
>>         10s, 30s
>>         ...
>>
>>     _______________________________________________
>>     Liste de diffusion du FRsAG
>>     http://www.frsag.org/
>>
>>
>>  _______________________________________________
> Liste de diffusion du FRsAG
> http://www.frsag.org/
>



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

Répondre à