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 infos@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 <infos@opendoc.net mailto:infos@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/