Replicarea în MySQL, linuxoid
În MySQL pentru a reproduce pus în aplicare „din cutie“ și o oportunitate de a extinde cu fiecare nouă versiune. Încercați să înțeleagă starea actuală.
Nevoia de replicare apare atunci când doriți pentru a asigura o fiabilitate ridicată și disponibilitatea serviciului:
- Panoramare vă permite să „iasă“ de limitările de lățime de bandă a unui sistem prin distribuirea de cereri la mai multe servere în cluster.
- rezervare - în cazul în care serverul principal, datele sunt luate replici.
- reducerea sarcinii la serverul de master - aplicațiile client pentru a prelua informațiile (read-only), cu oricare dintre replici.
- backup-uri simple, care sunt create pe orice replica.
Posibilități MySQL replicare
mysql> VARIABILE SHOW LIKE '% auto_inc';
Și într-adevăr funcționează, dar nu salvați în toate situațiile.
Apropo, atât în opțiunea de documentare pentru anumite motive, au semnat ca «este acceptată pentru utilizarea cu tabele NDB numai», iar pentru MySQL 5.7 «este destinat pentru a fi utilizat cu MySQL Cluster, care nu este acceptat în prezent în MySQL 5.7».

Un alt neajuns este faptul că MySQL nu oferă instrumente utile pentru monitorizarea replicare, serverul master este cunoscut, practic, nimic despre replici, și copii - unul de celălalt. De exemplu, o replică nu poate trece, indiferent de motiv, slave, comandantul acestei nici nu știe. În versiunea MySQL 5.5 sunt plecat chiar familiarizați DATE comenzi SARCINĂ DE LA MASTER și TABELUL DE SARCINĂ DE LA MASTER, elimină o serie de probleme, dar au lucrat doar cu MyISAM. Cu toate acestea, unele sarcini pot fi realizate utilizând instrumente terță parte care vine cu MySQL Workbench Utilities (în special script mysqlfailover), Multi-Master Replication Manager pentru MySQL și Percona Toolkit - MK-masă de control, mk-masă de sincronizare, mk-slave întârziere , MK-sclav-prefetch, mk-batai de inima, mk-slave-repornire, mk-slave-și găsi MK-slave-mutare.
Consiliu unic „ce să fac?“, Nu este și nu poate, de ieșire va fi în orice situație dată. După ce a lucrat în cluster este întotdeauna un compromis între performanță, disponibilitate și consistența datelor (grăsime).
De exemplu, pentru a reporni când nu a existat nici o problema cu replicare este recomandată utilizarea acestor parametri: flush_log_at_trx_commit = 1, sync_binlog = 1, sync_relay_log = 1, sync_relay_log_info = 1, sync_master_info = 1. Dar instalarea lor este un impact semnificativ asupra performanței. Poate că este motivul pentru care în prezent doar popular sistem de master-master (activ-pasiv) și de master - slave (una sau mai multe).
Identificatorii de tranzacții globale
Replicarea se realizează folosind jurnalul binar, ceea ce duce la master (parametrul log-bin) și transmise slave (releu-log). Inițial, informațiile sunt introduse fără nici aceasta legare. În caz de nevoie pentru a citi informații din tura de mijloc a fost utilizat (offset, cu MySQL 3.23.15+), care este unic pentru fiecare server slave. În această situație, afla rapid care dintre serverele slave cele mai apropiate ca să master nu este atât de simplu. Începând cu MySQL suport 5.6.5 replicare tranzacțională prin aplicarea unui identificator de tranzacție la nivel mondial (Global Identificatori Transaction, GTIDs), precum și toate informațiile de serviciu (despre master și forfeca) a fost transferat de la metadatele fișierului. Acest identificator este adăugat la fiecare replică, și permite pe serverele slave pentru a urmări rapid starea curentă. Utilizarea GTID vă permite să uitați despre necesitatea de a lucra direct cu fișierul jurnal și poziția lor (MASTER_LOG_FILE și MASTER_LOG_POS), care simplifică foarte mult multe dintre sarcinile de replicare. Sam GTIDs este identificator server_uuid (unic, generat în mod automat fișierul data_dir / auto.cnf) și numărul de tranzacție. Astfel, MySQL a abordat îndeaproape caracteristicile de replicare din mai multe surse, cel puțin în ceea ce privește mecanismul de lucru.
Modul de replicare vechi este încă acolo, toate inovațiile opționale și conectați la fișierul principal de configurare a serverului cu parametrii:
[Mysqld]. log-slave-update = true gtid-mode = privind punerea în aplicare-gtid-consistență = true master-info-depozit = TABLE releu-log-info-depozit = TABELUL
mysql> VARIABILE SHOW LIKE '%% gtid';
tipuri de replicare
replicare semi-sincron
Inițial, replicare asincron este utilizat în MySQL. Principiul de funcționare este foarte simplu, clientul face o schimbare (COMMIT), care deține server principal, rezultatul este stocat în jurnalul binar. Clientul, fără a aștepta sclavi (el pur și simplu nu supune controlului), primește imediat un mesaj despre finalizarea cu succes a procesului, care este doar la început să primească și să execute o replică. Acest lucru asigură o viteză maximă și permite chiar conexiuni cu comutație de replicare, dar are un dezavantaj semnificativ, în special relevante pentru clustere. Dacă după confirmarea serverului master tranzacții eșuează, și servere slave încă nu reușesc să obțină o replica, datele vor fi pierdute, dar clientul va fi sigur că totul este în ordine. În cazul de master - replicare maestru, problema va primi doar mai rău, pentru că serverul nu știe ce se întâmplă între ele, prin urmare, se sincronizează cu toate consecințele.
Randament în această situație poate fi replicarea sincron, atunci când clientul primește confirmare numai după solicitarea toate serverele slave. Am câștigat în fiabilitate, dar pierde imediat în viteză. Acest lucru este valabil mai ales în cazul în care serverul slave este conectat printr-o conexiune lentă sau un nici un răspuns.
În MySQL 5.5 adaugă suport pentru mecanismul de semi-sincron (semi-sincron) replicare bazată pe patch-uri pentru InnoDB de la Google. În acest caz, serverul de master-așteaptă confirmarea de la unul dintre sclav, care a raportat că a primit și a înregistrat pe disc replica. Nu este de așteptat atunci când slave va executa interogarea și nu există nici o garanție că va fi executat la toate (de exemplu, o eroare). Acesta este motivul pentru care mulți cred sursa numelui semi-sincron nu destul de corect. Apropo, această problemă este eliminată printr-un plasture special îmbunătățită SemiSync Replication, în acest caz, serverul master primește o confirmare numai după aplicarea replica slave. Proiectul este într-adevăr timp de 2 ani nu se dezvolta, dar se arată că nu există probleme de nerezolvat.
Pentru a nu depinde de disponibilitatea serverului slave, timeout-ul este furnizat pentru a comuta automat modul asincron dacă nu sclav nu a răspuns la o cerere. La restaurarea conexiunea va fi activat din nou semi-sincron.
De asemenea, a sprijinit replicare întârziată atunci când slave începe să efectueze cererea după o perioadă de timp specificată (setată folosind MASTER_DELAY, implicit: 0). Acest lucru poate fi util dacă aveți nevoie să se rostogolească înapoi expertul de tranzacție.

Dar, așa cum reiese din replicarea semi-sincron, există un mare minus, replica de transfer pe slave și confirmarea va avea nevoie de timp, aceasta va afecta viteza. În acest mod, tranzacția nu poate depăși suma de întârzieri ale rețelei, și, prin urmare, teoretic, este posibil să se obțină următoarea formulă:
1000 ms / latență de rețea (ms) = performanță semi-sincron
Practica și teoria nu diferă sau nu diferă mult. Replicarea în modul semi-sincron prin intermediul WAN va împiedica foarte mult procesul. Dar, în rețelele locale folosind servere de capacitate mică și medie, pierderi de replicare semi-sincrone, comparativ cu asincron să nu fie perceptibil. Dacă este, se potrivește complet în eroarea de măsurare. Și așa este destul de posibil să se activeze, prin urmare, creșterea probabilității de a salva datele cu prăbușirea serverul master.
În mod implicit, replicarea asincron, semi-sincron, trebuie să instalați și activați parametrul plugin-ul în my.cnf. Pe serverul principal: