O mai mare disponibilitate a algoritmului MySQL Cluster și arbitraj - articolul pe

MySQL Cluster - decizia de a construi sisteme de tolerant la erori. În introducere, o scurtă descriere a conceptelor de bază, mai multe informații detaliate în documentație. Descrise mai jos este valabil pentru versiunea de MySQL Cluster 5.1, situat la momentul eliberării de articole în etapa de eliberare candidat.

Noda va fi numit serverul logic ce constituie cluster. Dar un singur server fizic poate fi plasat mai multe noduri. În clusterul de trei tipuri principale de noduri:

  1. nod de date (NDB-nod) - executabil proces ndbd, responsabil pentru stocarea datelor de fragment din cluster. parametru important NoOfReplicas mănunchi (numărul de replici) - numărul de noduri de date în care sunt stocate fiecare fragment în parte. Numărul total de noduri de date trebuie să fie un multiplu al numărului de replici. noduri de grup - numărul de nod (numărul de noduri din grup este numărul de replici), care stochează aceleași informații. De exemplu, NoOfReplicas = 2, numărul de noduri - 6. Fiecare tabel este împărțit în 6 bucăți (hash a cheii primare), enumera lor F1, F2, F3, F4, F5, F6. 6 noduri (D1, D2, D3, D4, D5, D6) 3 grupuri - fiecare grup de primul nod (D1, D2) stochează fragmentele F1, F2; nodurile din al doilea grup D3, D4 stocate fragmente F3, F4; nodurile treilea grup D5, fragmentele stocate D6 F5, F6. Nerespectarea tuturor nodurilor unui grup duce la eșec al cluster-ului.
  2. SQL-nod (sau API-nod) - executabil proces mysqld. SQL-nod acceptă conexiuni client și accesează datele pentru nodurile la date. În plus, fiecare SQL-nod poate stoca propriile lor de masă nu-NDB (MyISAM, InnoDB.), Ca și cum nu a făcut parte din cluster.
  3. nod de management (management de-nod) - executabil proces ndbmgmd. Responsabil pentru configurația de cluster, fiecare nod accesează nodul de administrare, atunci când conexiunea la cluster. Aceasta nu controlează tranzacțiile și alte afaceri curente, și se concentrează exclusiv pe configurația. Se consumă puține resurse de sistem, astfel încât este adesea plasat pe un server fizic la un alt fel de nod. În caz de eșec al nodurilor de control, clusterul va continua funcționarea normală, dar nu va fi capabil de a reporni nodul. Configurația poate cuprinde unul sau mai multe noduri de control.

Judecator si arbitraj algortimy

Un nod de cluster este întotdeauna arbitrul. Arbitrului numit de pornire al cluster-ului și poate fi modificată în cadrul procedurii de schimbare arbitru. Cu privire la numirea unui arbitru, iar schimbarea poate fi găsită în jurnalele de cluster. În configurația implicită, arbitrul este un nod de management, dar acest lucru nu este neapărat atât. Un arbitru poate fi orice gestionare sau SQL-nod. Aceste noduri în configurația poate fi specificat parametrul ArbitrationRank (rang arbitru); valorile parametrilor sunt: ​​0 - nodul nu va fi niciodată arbitreze, 1 - nodul va fi arbitrarea prioritate ridicată; 2 - Noda va deveni arbitrul numai dacă nu există candidați cu priritetom ridicată. La fiecare moment într-un cluster de un singur arbitru.

Dezactivarea unui grup de noduri, split-creier

Arbitrul este necesară într-o situație în care clusterul deconectat de mai multe noduri. Să cluster sunt împărțite fizic în 2 bucăți (de exemplu, datorită rețelei eșec marshrutirizatora). Este posibil ca fiecare piesa va stoca toate datele de dispersie (de exemplu, cel puțin un nod în fiecare grup). Fiecare piesă va acționa ca un cluster plin, ceea ce duce la o perturbare a integrității datelor (de exemplu, unii clienți vor fi de lucru cu o felie, iar unii - la alta). Această situație este potențial periculoasă și se numește split-creier.

algoritmul de arbitraj

Algoritmul de arbitraj este destul de simplu. El începe să lucreze imediat după detectarea de fragmentare pe fiecare fragmente de lucru cu dispersie nod de date.

  1. Eu văd cel puțin un nod de date de la fiecare grup (cu alte cuvinte - dacă partea vizibilă a clusterului toate datele)? Dacă nu - opriți. Dacă da, continuați algoritmul
  2. Există oricare dintre noduri de date de abandon pe un nod în fiecare grup (cu alte cuvinte - fie a doua parte a tuturor datelor)? Dacă nu - atunci se stinge partea a doua a articolului 1, pot continua. Dacă da, în continuare algoritmul.
  3. Întreabă-arbitru. Dacă arbitrul nu poate - opri. În cazul în care un arbitru este disponibil pentru a afla dacă sunt prezente în configurația actuală - în cazul în care nu închide, și dacă da, - pentru a continua activitatea

Schimbare arbitru

În cazul în care, ca urmare a fragmentării dispărut arbitru, după algoritmul de arbitraj, noduri alege un nou arbitru. Algoritmul de selecție este acum simplu - nodul selectează numărul cel mai mic (nodeid), având printre ArbitrationRank senior.

De ce este configurația celor două persoane nu este okazoustoychivoy?

Luați în considerare următoarea configurație, postoennuyu pe două mașini fizice:

  • Primul server - nod de date 1, SQL nodul-1, nodul de control 1
  • Al doilea server - nod de date 2, SQL nod-2 (de asemenea, posibil, pentru a controla nodul 2)

Semnificație NoOfReplicas = 2 furnizează redundanța datelor; ambele noduri fac parte din același grup. La prima vedere se pare că otkzoustoychiva de configurare, dar, în practică, nu este. La pornirea unui arbitru de cluster va controla primul nod. Luați în considerare o situație în care primul server defect (de exemplu, închide, ars o placă de rețea sau un port defect în marshrutirizatore). În al doilea nod de date lucrări algoritmul de arbitraj:

  1. A se vedea, în cazul în care un nod în fiecare grup? Da, doar un grup de acest nod - I.
  2. Face otklyuchivashayasya parte dintr-un set complet de date? Da, nodul de date 1 conține o copie a datelor.
  3. Întreabă-arbitru. Arbitrul nu este disponibil. Închidere.

Vedem că eșecul un server dezactivează grup întreg. Același lucru se va produce în configurație cu trei servere si NoOfReplicas = 3 când serverul este oprit, cuprinzând arbitrul.

Un exemplu simplu de o configurație tolerantă la erori

Lăsați cititorul să se asigure că următoarea configurație este stabilă în raport cu eșecul oricăreia dintre cele trei servere fizice:

  • Primul server - nod de date 1, SQL-1 nod (ArbitrationRank = 0), (NoOfReplicas = 2)
  • Al doilea server - nod de date 2, SQL-nodul 2 (ArbitrationRank = 0), (NoOfReplicas = 2)
  • În al treilea rând de server - nodul de gestionare (ArbitrationRank = 2)

redundanța datelor nu este o garanție failover. pretest întotdeauna configurație folosind agloritma descrisă mai sus sau prin serverele de deconectare fizic.