Săriți la conținut

Blog ·

Nicăieri este un loc: mutări între centre de date

A duce o mașină în alt sit înseamnă că o vreme nu se află în niciun centru de date. Cincisprezece stări și trei feluri de ieșire din necunoaștere.

De Provibr

A muta un server dintr-un rack în altul în aceeași clădire este un singur act fizic cu o singură nesiguranță: este acolo sau nu. Asta am modelat acum ceva vreme, iar partea interesantă s-a dovedit a fi clipa în care destinația nu este nici rezervată, nici ocupată.

A duce un server în alt oraș nu este aceeași problemă într-o haină mai mare. Este o succesiune de acte în două locuri, cu un interval între ele în care mașina nu se află în niciun centru de date, plus o latură de rețea, o latură de adrese și o latură de agenți care trebuie să redevină adevărate la celălalt capăt. Ispita este să refolosim mutarea existentă și să renunțăm la verificarea care obligă originea și destinația să fie același sit. Nu am făcut-o, iar motivul este acesta.

De ce este un al doilea obiect și nu un indicator

Mutarea existentă are deja o origine, o destinație, o verificare prealabilă înghețată, o rezervare la destinație, un contor de comparare și o urmă care doar adaugă. Ceea ce pare să lipsească este o singură verificare în baza de date.

Adăugarea unui indicator ar contopi două mașini de stări într-una care nu se potrivește niciuneia. O mutare în interiorul unui sit are nouă stări; o mutare între situri are cincisprezece. Prima are două ieșiri din „nu știm”, a doua are trei, iar a treia este că mașina s-a pierdut pe drum, ceea ce între două rackuri din aceeași sală nu are cum să se întâmple. Iar scoaterea verificării ar lăsa orice mutare existentă, inclusiv una planificată săptămâna trecută, să treacă în tăcere granița dintre situri.

Se împarte tot ceea ce este cu adevărat la fel: aceeași primitivă de ocupare cu indexul ei unic parțial, același istoric de amplasare care doar adaugă și aceeași cusătură de operație formată din pornire, avansare și încheiere. Felurile de rând ale urmei sunt separate, ca peste un an un cititor să poată vedea dacă o mașină a alunecat într-o sală sau dacă a petrecut o după-amiază într-o dubă. Un rând comun „mutată” ar șterge acea deosebire pentru totdeauna.

Cincisprezece stări, iar una dintre ele este nicăieri

Trei stări administrative înainte să se întâmple ceva fizic (ciornă, planificată, aprobată), nouă faze de muncă adevărată și trei stări finale. Fazele sunt: oprire, demontare, transport, sosire la destinație, montare, recablare, măsurare din nou, confirmare și starea în care nimeni nu știe.

Starea care ține întregul proiect este in_transit. Este singura stare în desfășurare în care situl mașinii este cu adevărat gol, iar codul scrie acel gol în loc să îl descrie: coloana sitului rămâne într-adevăr goală. Pe un sit, gol înseamnă de obicei „nestabilit”, iar aici înseamnă ceva mai puternic și mai literal. Nu există niciun centru de date în care să se afle. Este pe drum.

Vecinele ei nu sunt asta, și în mod intenționat. unracked înseamnă scoasă din rack, dar încă în clădire, pe un cărucior, așa că situl rămâne originea. destination_claimed înseamnă ajunsă la celălalt capăt, dar încă nu într-un rack, iar de acolo încolo aparține administrativ sitului de destinație. Două granițe la o oră distanță, iar contopirea lor ar face greșit, pentru una dintre ele, răspunsul la „unde se află acum mașina 41”.

De la oprire nu mai există cale înapoi

Tranzițiile stau ca tabel peste toate cele cincisprezece stări și nu ca o ramificație, din același motiv ca peste tot în acest cod: o ramificație cu ramură implicită transformă o stare nou adăugată într-una permisă, iar o stare pe care cineva o adaugă fiindcă se petrece ceva neobișnuit ar fi prima căreia i s-ar permite totul.

Rândul care contează pleacă din approved. Până acolo inclusiv, o mutare se poate anula și nimănui nu i s-a întâmplat nimic. De la shutting_down încolo, anularea dispare. Cineva a început să dezafecteze un serviciu în funcțiune al unui client; o actualizare în baza de date nu desface asta, iar a pretinde altceva este o afirmație despre lumea fizică pe care nimeni nu a verificat-o.

Ce rămâne din fiecare fază fizică este faza următoare, „nu știm” și „a mers prost”. Orice fază fizică poate ajunge la necunoaștere, iar asta diferă de mutarea din interiorul unui sit, unde se ajunge acolo doar dintr-o singură stare. Motivul este întinderea: într-un sit există o clipă în care nimeni nu este sigur, iar la o mutare între situri sunt șase. Mai este în rackul vechi. Este pe cărucior. Este în dubă. Este pe pardoseala nouă. Este în rack. Este conectată.

Patru lucruri pe care le observă și nu le repară niciodată

O mutare scrie exact două lucruri: situl și amplasarea mașinii, plus revendicarea de rack. Nicio adresă, nicio apartenență de agent, niciun VLAN, nicio țesătură, nicio muchie de topologie.

Această reținere este cerința adevărată, și tocmai acolo răspunsul greșit pare de la sine înțeles. Mașina a plecat la celălalt sit, deci sigur prefixul ei de adrese ar trebui să o urmeze. Nu ar trebui. O adresă dintr-un prefix rutat în situl de origine nu funcționează în cel de destinație, iar ce adresă ar trebui să fie acolo în locul ei platforma nu știe. Ce agent deservește sala nouă este hotărârea unui om. Doar dovada confirmată poate face din topologie un adevăr.

Fiecare dintre aceste lucruri devine astfel o verificare deschisă: măsurată, consemnată și arătată, niciodată executată.

VerificareDe unde vine răspunsul
Realocarea adreselorLegături de serviciu spre servere, spre alocări, spre prefix și situl lui
Apartenența de agentExistă în general un agent care să acopere situl de destinație
Repunere în funcțiuneMereu deschisă: echipamentul care schimbă clădirea invalidează pregătirea, iar azi nimic nu produce acel verdict
RecablareMereu deschisă: nu există o evidență a cablurilor pe unitate față de care să se măsoare

Ultimele două sunt oneste în privința deschiderii lor permanente, în loc să stea tăcute pe „în regulă”. A spune că ceva este în regulă este o afirmație, iar nimeni nu a făcut-o.

Această reținere este păzită prin formă și nu prin disciplină. Un test parcurge arborele sintactic al celor șase fișiere ale acestui flux și eșuează la orice inserare sau actualizare într-un tabel de adrese, agenți, rețea, țesătură, serviciu sau servere. A fost mai întâi dovedit roșu cu o scriere plantată. Un al doilea test, mai vechi, pune altă întrebare, anume dacă o valoare de sit provine dintr-un calcul, și ar aproba fără ezitare o mutare care transmite corect un sit de destinație. Două întrebări, două teste, și doar împreună acoperă regula.

Trei ieșiri din necunoaștere

Când rezultatul fizic este nesigur, cineva trebuie să meargă și să se uite. Toate cele trei răspunsuri sunt consemnate ca observație și nu ca revenire.

Văzută la destinație. Mutarea se încheie, iar urma poartă „observată la destinație” în loc de „încheiată”, ca să rămână lizibil că a existat o îndoială.

Văzută la origine. Rezervarea de la celălalt capăt este eliberată, iar mutarea se încheie ca eșuată și nu ca anulată, fiindcă cineva a făcut muncă fizică, iar deplasarea nu a avut loc. Amplasarea veche nu este redeschisă, și este intenționat. Dacă mașina ieșise deja din rack, acele unități au fost eliberate și între timp acolo poate atârna altceva; revendicarea lor din nou ar putea pune două mașini pe o unitate, exact greșeala pentru care există indexul unic parțial. Mașina aparține sitului de origine și nu se află în niciun rack, iar acesta este adevărul: stă pe un cărucior. A o pune la loc este o amplasare nouă și deci un act de sine stătător.

Negăsită nicăieri. Rezervarea de la destinație este eliberată, fiindcă a ține spațiu de rack pentru echipament care nu vine blochează degeaba pe altcineva. Mașina rămâne în transport fără sit, iar operația se încheie eșuată cu un blocaj propriu. Nu este nicidecum casată sau pusă în carantină. Acelea sunt hotărâri despre mașină, iar „pierdută” este o observație. Un echipament care apare săptămâna viitoare nu ar trebui să fi dispărut între timp din toate listele.

Ordinea verificării prealabile și un lucru despre situri

Planificarea refuză într-o ordine fixă: echipamentul există, nu este în curs nici o deplasare, nici o a doua mutare (două tabele cu doi indecși parțiali care nu știu nimic unul despre altul), este într-adevăr amplasat undeva, cele două situri diferă, situl de destinație este activ, niciun serviciu nu stă în cale, iar spațiul încape.

Doar destinația trebuie să fie activă. O origine care se dezafectează nu este o piedică, ci tocmai motivul pentru care oamenii mută echipamente. Inversarea ar bloca exact migrarea pentru care există funcția.

Verificarea serviciului refuză și pe reserved și pe provisioning, nu doar pe activ, ceea ce ne-a surprins la început și apoi nu ne-a mai surprins. O mașină pe care apasă o rezervare este promisă; acolo se anulează comanda, nu călătoria mașinii.

Ce am nota

  1. O formă diferită merită un obiect diferit. Dacă noul caz are cu șase stări mai mult, cu o ieșire mai mult și o perioadă de a nu fi nicăieri, un indicator pe cel vechi produce o mașină care nu descrie niciunul dintre cele două cazuri.
  2. Scrieți „nicăieri” la propriu. O valoare goală care înseamnă „într-o dubă” este mai utilă decât o stare care se preface că mașina mai este undeva.
  3. După o muncă fizică raportată, nu reveniți niciodată. Adăugați o stare care înseamnă „necunoscut” și dați-i ieșiri documentate, toate observații.
  4. Nu redeschideți un loc eliberat. Spațiul pe care l-ați lăsat poate fi ocupat. Întoarcerea este o amplasare nouă, cu aceeași verificare de coliziune ca oricare alta.
  5. A observa fără a repara. O verificare deschisă pe care o rezolvă un om bate o presupunere automată despre adrese, VLAN și cablare.
  6. Păziți reținerea cu un test asupra formei. „Acest flux nu scrie niciodată în acele tabele” se poate verifica; „ne vom aminti să nu o facem” nu.
  7. Verificați sensul regulii voastre despre situri. A cere ca originea să fie sănătoasă ar interzice tocmai mutarea de care toată lumea are nevoie.

Pentru claritate despre ce este vorba: munca de logistică a centrului de date se află în spatele unui comutator de lansare oprit implicit, cu o setare per organizație deasupra, deci nimic din toate acestea nu se poate cumpăra astăzi. Patru lucruri nu sunt dovedite. Migrarea a fost aplicată manual pe baza de date de dezvoltare și apoi retrasă, niciodată prin migrator. Fișa de reconciliere și butonul de anulare nu au fost conduse într-un navigator. Nu a fost măsurată o cerere brută către acțiuni cu comutatorul închis. Iar o rezervare la destinație nu a fost niciodată văzută expirând cu adevărat.

Din munca de platformă a Provibr. Versiunea din interiorul unui singur sit, și de ce o rezervare devine amplasarea în loc să fie eliberată și rescrisă, se află în reținerea devine amplasarea. De ce unitățile libere dintr-un rack nu înseamnă capacitate se află în spațiul din rack nu înseamnă capacitate.

Începeți cu o gazdă și un agent

Creați un cont, instalați agentul cu o singură comandă și conectați primul dumneavoastră host Proxmox. Perioada de probă durează 14 zile și nu cere date de plată.