„MongoDB“ tvarko duomenų migraciją tarp skiautelių, pirmiausia per procesą, vadinamą „Chunk Migration“, kuri yra neatsiejama skardos architektūros dalis, skirta duomenims tolygiai paskirstyti keliose klasterio skiautelėse. „MongoDB“ šluokis yra metodas, naudojamas horizontaliai išplėsti duomenų bazę, padalijant duomenis keliuose serveriuose ar skiautelėse. Ši sistema panaudoja „Shard“ raktą, kuris yra laukų ar laukų rinkinys dokumente, kuris nustato duomenų pasiskirstymą. Duomenų perkėlimui iš skardų valdyti „MongoDB“ naudoja foninį procesą, vadinamą balansatoriumi, kuris optimizuoja duomenų pasiskirstymą perkeliant duomenų diapazonus (arba gabaliukus), jei reikia.
„Sharded Cluster“ ir „Chunk“ migracijos apžvalga
„MongoDB“ padalija skaldytos kolekcijas į gabaliukus, kurie yra gretimi „Shard“ pagrindinių verčių diapazonai. Kiekvienas gabalas priklauso konkrečiam skiautelei, ir šie gabaliukai kartu laiko visą duomenų rinkinį. Balanceris stebi gabaliukų pasiskirstymą per skiauteles ir perkelia gabaliukus tarp skiautelių, kad išlaikytų pusiausvyrą. Šis migracijos mechanizmas padeda išvengti taškų, pagerinti užklausų atlikimą ir optimizuoti išteklių panaudojimą.
Rekmetražo migracija yra naudinga scenarijuose, tokiuose kaip kai į klasterį pridedami naujos skiautelės, kai duomenys netolygiai sukelia disbalansą arba kai zonas reikia iš naujo apibrėžti atsižvelgiant į duomenų vietą ar reguliavimo reikalavimus. Migracija veikia gabaliuko lygyje, perkeliant visą šarnyro raktų verčių diapazoną iš vieno skiautelės į kitą.
Migracijos proceso informacija
„MongoDB“ gabenimo migracija veikia keliais etapais:
1. „Concunk“ pasirinkimas judėti: balansatorius ar administratorius pasirenka gabalą, kurį reikia pakeisti kitam skiautelei, kad būtų galima subalansuoti klasterį.
2. Klono fazė: „Donor Shard“ (tas, kuris šiuo metu laiko gabalą) nukopijuoja visus dokumentus, esančius gabenime gavėjui. Per tą laiką taip pat stebimi „New“ rašo „The Chunk on Donor Shard“.
3. Sugavimo etapas: Gavėjas „Shard“ taiko visus raštus, kurie nutiko klono etape, kad užtikrintų, jog jis turi naujausius duomenis.
4. Kritinis skyrius ir įsipareigojimas: donoras Shard'as patenka į kritinį skyrių, kuriame trumpai užblokuojamos rašymo operacijos, o gabaliukų nuosavybė atomiškai perjungiama į gavėją.
5. Ištrinti fazę: donoras Shardas asinchroniškai pašalina dokumentus, priklausančius perkeltai gabenimui, kai patvirtins, kad gavėjas sėkmingai įvykdė dalį.
Balanceris užtikrina, kad vienu metu įvyktų tik viena migracija vienam skandalui, kad būtų sumažintas poveikis „Shard“ našumui. Tai gali atlikti daugybę migracijų lygiagrečiai skirtingose „Shard“ porose, jei jos yra nepriklausomos.
Automatinis balanseris
„Balancer“ veikia kaip fono gija „Config Server“ pirminiame mazge ir nuolat stebi „Shard“ duomenų balansą. Jis seka duomenų dydį vienoje dalyje, kad nustatytų, ar reikia migracijų pagal konfigūruojamą balanso slenkstį. Kai duomenų dydžio skirtumai tarp skiautelių viršija šią ribą, balansavimo priemonė inicijuoja migraciją.
Balanceris dažniausiai veikia programas, tačiau jis gali būti laikinai išjungtas priežiūros ar derinimo tikslais. Tai taip pat gerbia zonas, sukonfigūruotas klasteryje, užtikrinant, kad gabaliukai perkeliami į atitinkamas zonos ribas.
rankinės perkėlimo komandos
Nors „Balancer“ automatizuoja gabaliukų perkėlimą, „MongoDB“ taip pat leidžia rankiniu būdu valdyti, naudojant tokias komandas kaip „movechunk“ ir „moverange“. Šios komandos verčia perkelti specifinius gabaliukus ar gabaliukus nuo vieno skiautelės į kitą.
- „MoveChunk“ naudojamas perkelti gabaliuką, kuriame yra konkreti šarnyrinio rakto vertė nurodytam skardui. Tai naudinga tikslinėms migracijoms, susijusioms su apkrovos balansavimu ar duomenų vietove.
- „Moverange“ leidžia perkelti gretimą šarnyro klavišų diapazoną, naudingą sudėtingesnėms duomenų balansavimo strategijoms.
Administratoriai gali naudoti šias komandas išankstinėms dalims, kad būtų galima tolygiai paskirstyti duomenis prieš didelius prarijus arba išspręsti migracijos gedimus, kuriuos sukelia balansavimo langų apribojimai.
našlaičių tvarkymas ir nuoseklumas
Per migraciją ir po jo, našlaičių dokumentai (dokumentai, kurie nebepriklauso donoro Shardo priskirtos dalies diapazonams), laikinai gali egzistuoti „Donor Shard“, kol jie nebus išvalyti.
„MongoDB“ užtikrina nuoseklumą visos migracijos metu, taikydamas operacijas iš eilės ir naudodamas koordinavimo mechanizmą, kuris blokuoja raštus kritinio skyriaus metu. Po migracijos „Orphan“ valymas veikia asinchroniškai, vengiant trukdyti vykstančioms užklausoms.
Pradedant „MongoDB 5.3“, keitimo srautai negeneruoja įvykių, skirtų perduoti našlaičių dokumentus migracijos metu, kad būtų išlaikytas įvykių srauto tikslumas.
Poveikis našumui ir operacijoms
„Chunk Migrations“ perduoda pridėtines išlaidas, įskaitant tinklo pralaidumo suvartojimą, CPU ir disko I/O, kurie gali paveikti klasterio našumą. „MongoDB“ sumažina šį poveikį:
- Apribojant skiautelės dalyvavimą vienoje migracijoje vienu metu.
- Eilės migracijos ir leidžiant ištrinti fazes sutampa, kad būtų galima greičiau iškrauti.
- Naudojant droselio parinktis, kad būtų galima sureguliuoti migracijos suderinamumą ir parašyti susirūpinimą migracijos metu.
Migruojantys duomenys taip pat laikinai paveikia antrinius skaitymus, kurie gali praleisti dokumentus našlaičių valymo etape, todėl programoms reikia atsižvelgti kuriant savo užklausas.
Migracija konkrečiais scenarijais
Tokiais atvejais, kaip perkelti duomenis tarp zonų su žymų diapazonais, arba nuo nenutrūkstamų iki skiautinių sąrankų, „MongoDB“ po pertvarkymo perkelia duomenis palaipsniui remdamasis atnaujintais „Shard“ raktų diapazonais ar zonomis. Pvz., Pašalinus senus žymų diapazonus ir kurti naujus, sukeliančius balansavimo priemonių migraciją, kad būtų atitinkamai perkelti duomenis.
Kai migruojantys „MongoDB“ klasteriai į debesies valdomus sprendimus arba tarp skaldytų klasterių, migracijos įrankiai dažnai atlieka migraciją iš skiautelės, o skardos duomenis nukopijuoja atskirai, išlaikydami „Shard“ raktų pasiskirstymą.
Migracijos įrankiai ir komunalinės paslaugos
Duomenų perdavimo paslaugos (DTS) ir kiti trečiųjų šalių įrankiai padeda perkelti duomenis tarp „MongoDB“ egzempliorių ar grupių, tvarkant skiautelių žemėlapius, duomenų nuoseklumą ir papildomus atnaujinimus. Šios priemonės dažnai palaiko migraciją iš nesukramdytos prie sparnuotų klasterių, priskirdami numatytosios „Shard“ raktų vertes į šaltinio duomenis, neturinčius „Shard“ raktų.
Pagrindinių taškų santrauka
- „MongoDB“ skaidiniai duomenys į gabalus, paskirstytus per skiauteles, naudojant „Shard Keys“.
- Balanceris automatiškai perkelia gabalus, kad išlaikytų subalansuotą duomenų paskirstymą.
- Migracija apima klonavimo duomenis, pasivijimo rašymo, atominio perdavimo ir asinchroninio valymo.
- Migracijos yra ribojamos iki vienos skiautelės, kad būtų sumažintas sistemos poveikis.
- Rankinės perkėlimo komandos suteikia administracinę kontrolę gabenimo paskirstymui.
- Našlaičių dokumentai išvalomi asinchroniškai po migracijos.
- Migracija laikinai veikia našumą ir antrinį skaitymo nuoseklumą.
- Migracija tarp zonų ar „Shard“ raktų diapazonų pokyčiai tvarko perkonfigūraciją, sukeliančią migraciją.
- Migracijos įrankiai padeda judėti duomenimis tarp klasterių ar architektūros.
Šis migracijos mechanizmas užtikrina, kad „MongoDB“ klasteriai išliks subalansuoti, keičiami ir veikiami, augant duomenims, o klasterių konfigūracijos vystosi, todėl nuolat prieinama prie minimalaus programų sutrikimo.