File Tree Guardian: DFS implementeren. Dit zijn verschillende wortels. Interacties binnen het systeem

Tegenwoordig is het al moeilijk om iemand met vertakte netwerken te verrassen met complexe
topologie, de aanwezigheid van externe en mobiele kantoren. Voor beheerder
het organiseren van een dienst in dergelijke omstandigheden is niet eenvoudig. Maar niet nodig
vergeet onze gebruikers - in dit geval zullen ze moeten werken met een grote
het aantal verschillende apparaten en bronnen op verschillende
computers en netwerkservers, kan het zoeken naar de benodigde informatie
extreem moeilijk zijn. stelt u in staat om dit op te lossen
probleem. Laten we eens kijken hoe precies.

Doel en functies van DFS

DFS gedistribueerd bestandssysteem (Verdeeld Bestandssysteem ) verscheen als
een standaardcomponent terug in Win2k. Het doel is om het beheer, de toegang en
zoeken naar gegevens op het netwerk. Om dit te doen, bestandsbronnen die zich op verschillende
computers worden gecombineerd in één logische naamruimte. Gebruiker,
in plaats van de namen van alle netwerkshares te onthouden (Universal Naming
Convention, UNC) zoals \\ Server \ Folder zal verwijzen naar een enkele spatie
UNC-naam, die alle servers en gedeelde bronnen op het netwerk samenbrengt. En waarover?
het gevraagde bestand bevindt zich specifiek op de computer, het is al een punt van zorg DFS, gebruiker
u hoeft zich geen zorgen te maken over de werkelijke locatie van het bestand. Als een klant belt,
het wordt gewoon naar de map gegooid die het nodig heeft. In plaats van de bron waarnaar
geeft een link aan, kan elk besturingssysteem zijn waarnaar bronnen
is toegankelijk via UNC (Windows, Linux, xBSD, NetWare). Fysiek
objecten gekoppeld door links naar DFS worden doelwit genoemd voorwerpen(doelen) of
replica's(replica's).

Maar het gemak voor gebruikers en beheerders is ver weg niet de belangrijkste van
belangrijkste voordelen van DFS
... Het punt is dat er met één logische naam kan zijn:
er zijn verschillende gedeelde bronnen die identieke informatie opslaan.
Zo'n reeks alternatieve gedeelde bronnen die zijn gekoppeld aan een enkele logische naam
DFS wordt een replicaset genoemd. En als de gedeelde bronnen in één zijn
domein root ruimte DFS en bevinden zich op Win2k- of Win2k3-servers,
het is mogelijk om automatische synchronisatie van informatie tussen hen in te stellen.
De gebruiker die contact heeft opgenomen DFS, verwijst meestal naar de dichtstbijzijnde replica, en
als het niet beschikbaar is, wordt het doorgestuurd naar alternatieve hulpbron... Voor
serverbelasting verminderen DFS aan de clientzijde worden de gegevens in de cache opgeslagen, dus
met frequente toegang tot dezelfde bron, elk verzoek om DFS niet
geproduceerd. Dus de automatische een back-up maken van belangrijke informatie,
realiseerde in DFS, verhoogt ook de fouttolerantie van het hele systeem (output
een server of schijf apparaat heeft geen invloed op de gebruikerservaring).
Hoewel eraan moet worden herinnerd dat DFS is niet ontworpen om te werken met regelmatig bijgewerkte
gegevens, en vooral voor die gevallen waarin het bestand gelijktijdig kan worden bijgewerkt in
verschillende plaatsen (in DFS de versie van het bestand blijft waar de laatste
veranderingen).

in uitvoering DFS in Win2k slechts één naamruimte kon worden ondergebracht,
er kunnen er al meerdere zijn in Win2k3. Win2k3 R2 introduceert een nieuwe versie dit
systemen - DFS-naamruimten, waarin al veel problemen zijn opgelost. Voor replicatie
gegevens in Win2k3 SP1 en SP2 reageren FRS (Bestandsreplicatieserver), in Win2k3 R2 -
DFS-replicatie N. Hun belangrijkste verschil is dat in FRS het kleinste
het te repliceren object is een bestand in DFS-replicatie gebruikt door
meer geavanceerde technologie RDC (Differentiële compressie op afstand), welke kan
kopieer alleen de gewijzigde delen van het bestand en de functie voor meerdere bestanden RDC kleiner
laadt het kanaal bij het kopiëren van nieuwe bestanden. Dus met behulp van DFS
vermindert ook de belasting van het netwerk, wat vooral belangrijk is voor externe kantoren met
onvoldoende bandbreedte. In dienst DFS Nee
aanvullende veiligheidsmaatregelen. Bij het verwijzen naar doelen
alleen de machtigingen van het bestandssysteem worden gecontroleerd en de machtigingen die hiervoor zijn ingesteld
machtigingsobjecten in de map Active Directory.

Deze verschillende wortels

Startpunt voor alle boomnamen DFS dient als de wortel van de gedistribueerde
bestandssysteem. In feite is de root een gedeelde bron die zich op
server, alle anderen Logische namen van DFS-systeem zal verbinden als
het volgende hiërarchische niveau. Wortels in DFS kan van twee soorten zijn, elk
verschilt in methoden en mogelijkheden voor gegevensopslag. Geïsoleerd (op zichzelf staand)
wortel ( Standalone DFS) is niet gekoppeld aan Active Directory en alle koppelingen naar het netwerk
bronnen worden opgeslagen in het register van de server zelf DFS... Deze root gebruikt geen
DFS
replicatie
, dat wil zeggen, impliceert geen verdubbeling van informatie over andere bronnen,
en biedt daarom geen fouttolerantie. In geval van storing DFS-server
de hele hiërarchie wordt ontoegankelijk, hoewel gebruikers wel toegang hebben
middelen direct. Trouwens, verschillende zelfstandige DFS-servers in staat om te werken
in het cluster, zodat dit probleem kan worden opgelost. Als de server DFS is een
domeinlid, wordt de domeinroot gebruikt ( Op domeinen gebaseerde DFS). Hiermee
optie, u kunt meerdere replica's aansluiten en gebruiken DFS-replicatie voor
replicatie van zowel de root zelf als de links DFS... Als in Op domeinen gebaseerde DFS wortels
bevinden zich op computers met Win2k en Win2k3, dan is zo'n root
genaamd " Gemengde modus domein DFS".

Met domein DFS alle naamruimte-informatie staat in de controller
het domein waartoe de server periodiek toegang heeft DFS... Gezien de synchronisatie
tussen DFS in het domein, dat bij elke verandering complexer wordt
structuren, kunnen deze verzoeken een bottleneck in het systeem zijn, dus in dit geval
er zijn ook enkele beperkingen. Dus in Win2k was er een limiet van 16
wortels voor dezelfde naamruimte. In Win2k3 is deze beperking verwijderd, aangezien
server DFS heeft nu toegang tot elke DC, niet alleen tot de PDC-emulator.
De tweede beperking van domeinwortels is te wijten aan het feit dat de hele structuur is opgeslagen in
een speciaal object, dat ook op alle DC's moet worden gedupliceerd voor elke
de kleinste verandering in structuur DFS... De documentatie beveelt aan om te beperken
de maximale grootte van een object is 5 MB, wat ongeveer overeenkomt met 5000
links (mappen). Deze waarde is afhankelijk van veel parameters, de lengte van de naam
links, aanwezigheid en grootte van opmerkingen, die ook in dit object worden opgeslagen.
Maar gemiddeld DFS overschrijdt zelden 50-100 links, en na de eerste
instellingen, blijft het meestal statisch, wat betekent dat het vaak niet wordt gedupliceerd
zal zijn, en deze beperkingen zullen eenvoudigweg niet worden bereikt. Trouwens, in de toekomst
Windows 2008 de limiet van 5000 links is al verwijderd, maar hiervoor alle servers
zou Longhorn moeten runnen. Voor Standalone DFS aanbevolen
linklimiet
een orde van grootte hoger en is 50.000 links.

DFS-configuratie

Laten we bijvoorbeeld instellen: DFS op een computer met Win2k3 met SP2, allemaal
de instellingen in SP1 zijn vergelijkbaar. In instellingen DFS R2 en Win2k hebben wat
verschillen, maar niet zo globaal dat je er niet zelf achter kunt komen. Alles
het gedistribueerde bestandssysteem wordt centraal beheerd vanuit
helpen snap-in MMC "DFS gedistribueerd bestandssysteem"wat je kunt"
bel in het tabblad "Administrative Tools" van het Configuratiescherm van Windows. Met haar hulp
je kunt wortels maken en verwijderen, verbinding maken met elke wortels DFS... Handig, in
meerdere wortels kunnen in één tabblad worden weergegeven DFS... Als de root werkt in " Gemengd
modus domein DFS
", dat wil zeggen, wanneer signalen en wortels DFS bevindt zich op computers
beheerd door verschillende Windows-versies, beheer DFS moet gedaan worden met
computer met Win2k3. Als alternatief kunt u het pakket installeren: Win2k3 Beheertools Pakket(adminpak.msi), die gratis beschikbaar is op
website van het bedrijf. In dit geval zijn computers met
WinXP. Informatie over dit pakket is te vinden op:

support.microsoft.com/kb/304718. Daarnaast om mee te werken DFS je kan ook
gebruik de opdrachtregelhulpprogramma's dfscmd.exe en dfsutil.exe. De laatste heeft
meer functies, maar is niet standaard opgenomen in het besturingssysteem,
om het te gebruiken, moet u het Win2k3 Support Tools-pakket installeren. Achteruit
Houd er rekening mee dat u voor een succesvolle installatie van Support Tools twee bestanden moet downloaden:
suptools.msi en support.cab.

Om een ​​nieuwe root te maken, roept u de module aan, klikt u op de titel en in
contextmenu selecteer "Creëer root" (nieuwe root), als een optie, je kunt
selecteer een soortgelijk item in het menu "Actie". De wizard Nieuwe maken wordt weergegeven.
root (New Root Wizard), volg de aanwijzingen. Selecteer in de tweede stap het type
van de aangemaakte root (domein of geïsoleerd), specificeer het hostdomein en
server. Nadat u de verbinding met de geselecteerde server hebt gecontroleerd, voert u de naam van de root in. Achteruit
let op hoe het UNC-pad naar de nieuwe root eruit zal zien, standaard \\ server \ nameshare.
Sinds op dit moment algemene directory bestaat niet, in de volgende stap heb je nodig
selecteer een lokale map die als gedeelde map moet worden gebruikt. Dit
de map bevat geen echte gegevens, het zal links bevatten die wijzen
de fysieke locatie van de gegevens. De wizard maakt bronnen die lezen en
uitvoering aan leden van de groep Gebruikers. Corrigeer indien nodig
rechten. Nu drukken we op de knop Voltooien, de nieuwe root zal in het consolevenster verschijnen.
Als de server Win2k3 draait, maak dan op dezelfde manier en
andere wortels. Met behulp van de opdracht Status controleren aangeroepen vanuit
het consolemenu of het snelmenu, kunt u de status van de replica controleren. Staat
wordt aangegeven in de kolom met dezelfde naam en er verschijnt een cirkel met een markering naast de naam.
Als het groen is, is alles in orde. Om dit te controleren, gaat u naar
gespecificeerde UNC of gebruik op lokale computer het commando "netshare" of
"Net-view computernaam" op afstand. Dfsutil / Root: \\ server \ share / View-opdracht
zal tonen DFS-informatie.

> dfsutil /Root:\\server.com\first / View
DFS-hulpprogramma versie 5.2 (gebouwd op 5.2.3790.3959)
Domein root met 0 links
Rootnaam = "\\ SERVER \ first" Comment = "first Root" State = "1" Timeout = "300"
Doelserver = "GRINDERS" Map = "eerste" Status = "2"

Nadat de root is gemaakt, kan deze worden gepubliceerd naar Active Directory. voor dit in
selecteer Eigenschappen in het contextmenu, ga naar het tabblad Publiceren en
vink het vakje "Publiceer deze root in Active Directory" aan. Domein
de wortels worden automatisch en zonder mankeren gepubliceerd.

Verwijzingen verzamelen

Zodra de root is gemaakt, kunt u beginnen met het koppelen van shares. Waarom is
selecteer het item Nieuwe koppeling in het contextmenu. In het venster dat verschijnt
"Nieuwe link", voer in het veld "Linknaam" de naam van de link in waaronder deze zal zijn
beschikbaar in DFS, dan net onder het UNC-pad naar de doelmap (moet al
bestaan). Om gedeelde bronnen te zoeken, kunt u de knop Bladeren een beetje gebruiken
hieronder kun je de cachetijd van deze link voor klanten wijzigen DFS(standaard
1800 seconden). Als u klaar bent, drukt u op de knop OK. De opdracht dfsutil / view moet
toon de status van alle verbonden links en hun eigenschappen. Als het netwerk werkt
meerdere servers, is het mogelijk om een ​​replica toe te voegen die verwijst naar
alternatieve koppeling. Er wordt een replica naar de root of een apart object gemaakt
op dezelfde manier, alleen in het eerste geval, in het contextmenu, selecteer het item "Maken
root-doelmap ", en in de tweede -" Map maken ".

De gedeelde bronnen die worden gerepliceerd, moeten:
gelokaliseerd in partities met het NTFS-bestandssysteem op computers die draaien onder
draaiende serverversies van Windows vanaf 2000 (beter dan 2003). In het "Pad naar"
doel gedeelde map "van het venster dat verschijnt, typ of gebruik de knop Bladeren
we geven een gedeelde bron aan die zich op een andere computer bevindt. In het geval dat
om informatie tussen deze bronnen te synchroniseren, is het de bedoeling om te gebruiken
alternatieve programma's (of synchronisatie wordt handmatig gedaan),
schakel het selectievakje Deze doelmap toevoegen aan de replicatieset uit.
doel naar de replicatieset). Klik op OK en de installatiewizard verschijnt
replicatie (wizard Replicatie configureren), die u zal helpen kiezen
masterreplica en replicatietopologie. Bij de eerste stap specificeren we de map die:
zal worden gebruikt als het hoofddoel, alle informatie hiervan
map wordt dan naar een andere map gekopieerd. De laatste moet leeg zijn,
als het bestanden bevat, worden ze gekopieerd naar een tijdelijke map, en dan
VERWIJDERD. Als een share om de een of andere reden niet geschikt is voor replicatie
(bijvoorbeeld niet op een NTFS-partitie), wordt het gemarkeerd met een rood kruis,
wanneer u probeert door te gaan naar de volgende stap, zal de wizard u aanbieden om een ​​andere link op te geven of
Maak het werk af.

Met een druk op de knop Tussenopslag" (Staging-map) kan veranderen
de locatie van de map die moet worden gebruikt voor tijdelijke opslag
gerepliceerde gegevens. Standaard bevindt deze map zich in een andere sectie dan
van degene waarop het aandeel is gekoppeld aan DFS... verder meester
vraagt ​​u om een ​​replicatietopologie te selecteren. U moet een van de
de volgende opties:

  • Ring- alle replica's wisselen informatie uit met twee naburige;
  • Ster (naaf en sprak)- de hoofdlink wordt aangegeven, van waaruit ze zullen
    informatie uitwisselen alle andere replica's;
  • Volledig gaas- alle replica's worden met elkaar uitgewisseld;
  • Aangepast- later zal de beheerder de replicatie onafhankelijk configureren
    voor elk paar servers.

Ringtopologie is standaard ingesteld en is geschikt voor de meeste
gevallen. In het ideale geval moet de geselecteerde replicatietopologie overeenkomen met het schema
netwerken. Als er bijvoorbeeld een centraal kantoor is waar de belangrijkste middelen zich bevinden,
en talloze vertakkingen maken er verbinding mee als dat nodig is, dan in deze
In het geval dat de Zvezda-regeling meer geschikt is. Als geen van de voorinstellingen werkt,
u moet verwijzen naar het item Special.

Na het maken van een replica voor de link, verschijnt het bijbehorende pictogram in het snap-in-venster
zal veranderen. Er verschijnen ook twee nieuwe items in het contextmenu: Tonen / Verbergen
replicatiestatus en Stop replicatie. Het replicatiestatusveld kan zijn:
een van de drie resultaten. Als het replicatieproces normaal is voltooid, worden de pictogrammen
er zullen groene vlaggen zijn. Een rood kruis op een replicapictogram geeft aan dat het bezig is.
het moment is niet beschikbaar, in het veld Status verandert de handtekening in Offline. Als in
alleen enkele replica's zijn niet toegankelijk voor de aangevinkte link, er verschijnt een geel pictogram in het pictogram
Uitroepteken.

Voordat u een van de alternatieve replica's verwijdert, moet u eerst weigeren
replicatie. Wanneer de replicatie wordt hervat, wordt u begroet door dezelfde master. Indien
de server is samen een domeincontroller met alle DFS-gegevens zullen
repliceren ook de inhoud van het SYSVOL-volume. Daarom moet eraan worden herinnerd dat tot die tijd,
totdat alle replica's volledig zijn gerepliceerd, start u eventuele wijzigingen in
configuratie DFS zeer riskant, het kan de prestaties van iedereen verstoren
domein.

Als de geselecteerde optie voor replicatietopologie om de een of andere reden mislukt
benaderd, kan de replicatietopologie later gemakkelijk worden gewijzigd door het venster te selecteren
eigenschappen van de bijbehorende koppeling en klik op het tabblad Replicatie. Hier zijn
meerdere nog handige instellingen... Replicatie wordt standaard continu uitgevoerd,
door op de knop Planning te klikken, kunt u het replicatieschema voor iedereen wijzigen
verbindingen. Hieronder staan ​​de filters voor bestanden en submappen die dat niet zijn:
zal worden gerepliceerd. Klik hiervoor op Wijzigen en voer bestandssjablonen in of
submappen.

Om replicatie van informatie die op een specifieke server is opgeslagen te forceren,
u kunt het hulpprogramma NtfrsUtl.exe gebruiken, dat in het pakket is inbegrepen
Ondersteuningstools... De opdracht is eenvoudig: "ntfrsutl poll / now server.com". Zien
tijdsintervallen instellen voor replicatie,
voer "ntfrsutl poll" in. Alle instellingen zijn beschikbaar met het commando “ntfrsutl sets
server.com ".

In het eigenschappenvenster van een aandeel gepresenteerd in een service DFS, er zal meer zijn
een tabblad - DFS... Door het te openen, kan de gebruiker zien met welke gemeenschappelijke
mappen zijn gekoppeld aan deze link, controleer de status van de replica, selecteer de actieve
de replica waarnaar het eerst wordt omgeleid.

De beheerder zou het logboek vaker moeten controleren op controle.
"Beheer - Event Viewer - File Replication Service", waar u kunt
informatie vinden over alle gebeurtenissen die plaatsvinden met de FRS-service.

Momenteel zijn er, in de context van de groei van informatie, problemen met het opslaan en verwerken van zeer grote gegevens. Daarom worden deze gegevens op meerdere servers tegelijk verwerkt, die clusters vormen. Om het werken met data op clusters te vereenvoudigen, worden gedistribueerde bestandssystemen ontwikkeld. We zullen een voorbeeld van een gedistribueerd bestandssysteem nader bekijken. Google-bestandssysteem gebruikt door het bedrijf Google... (Het artikel is in feite een losse en ingekorte vertaling van het originele artikel).

GFS is waarschijnlijk het meest bekende gedistribueerde bestandssysteem. Betrouwbare, schaalbare gegevensopslag is essentieel voor elke toepassing die met zo'n grote hoeveelheid gegevens werkt als alle documenten op internet. GFS is het belangrijkste platform voor het opslaan van informatie in Google. GFS is een groot gedistribueerd bestandssysteem dat enorme hoeveelheden informatie kan opslaan en verwerken.
GFS werd gebouwd op basis van de volgende criteria:

  • Het systeem is opgebouwd uit een groot aantal veelvoorkomende goedkope apparatuur, die vaak niet goed werkt. Er moet toezicht zijn op storingen en de mogelijkheid om de werking van het systeem te herstellen in het geval van een storing van apparatuur.
  • Het systeem moet veel grote bestanden opslaan. Meestal enkele miljoenen bestanden, elk 100 MB of meer. Ook is het vaak nodig om met multi-gigabyte bestanden om te gaan, die ook nog eens efficiënt moeten worden opgeslagen. Er moeten ook kleine bestanden worden opgeslagen, maar het systeem is er niet voor geoptimaliseerd.
  • Doorgaans zijn er twee soorten lezen: het lezen van een groot opeenvolgend stuk gegevens en het lezen van een kleine hoeveelheid willekeurige gegevens. Bij het uitlezen van een grote datastroom is het gebruikelijk om een ​​chunk van 1 MB of groter aan te vragen. Dergelijke opeenvolgende bewerkingen van één client lezen vaak opeenvolgende delen van hetzelfde bestand. Lezen is niet grote maat gegevens hebben in de regel een volume van enkele kilobytes. Tijdkritische toepassingen moeten een bepaald aantal van dergelijke verzoeken verzamelen en ze sorteren op offset vanaf het begin van het bestand. Dit voorkomt heen-en-weer weergaven tijdens het lezen.
  • Vaak zijn er bewerkingen voor het schrijven van een groot opeenvolgend stuk gegevens, dat aan een bestand moet worden toegevoegd. Doorgaans is de hoeveelheid gegevens die moet worden geschreven in dezelfde volgorde als die om te lezen. Kleine schrijfacties, maar naar willekeurige locaties in het bestand, zijn meestal niet effectief.
  • Het systeem moet strikt gedefinieerde semantiek van parallelle werking van meerdere clients implementeren, als ze tegelijkertijd proberen gegevens aan hetzelfde bestand toe te voegen. In dit geval kan het voorkomen dat honderden verzoeken om naar één bestand te schrijven tegelijkertijd worden ontvangen. Om hiermee om te gaan, wordt de atomiciteit van de bewerkingen van het toevoegen van gegevens aan het bestand gebruikt, met enige synchronisatie. Dat wil zeggen, als een leesbewerking wordt ontvangen, zal deze worden uitgevoerd, hetzij vóór de volgende schrijfbewerking, hetzij daarna.
  • Hoge bandbreedte heeft de voorkeur boven lage latentie. De meeste applicaties op Google werken bijvoorbeeld het liefst met grote volumes gegevens met hoge snelheid, en de uitvoering van een enkele lees- en schrijfbewerking kan in het algemeen worden opgerekt.
Bestanden in GFS zijn hiërarchisch georganiseerd met behulp van mappen zoals elk ander bestandssysteem, en worden geïdentificeerd door hun eigen pad. U kunt de gebruikelijke bewerkingen op bestanden in GFS uitvoeren: maken, verwijderen, openen, sluiten, lezen en schrijven.
Bovendien ondersteunt GFS back-ups, of momentopnamen. Het is mogelijk om dergelijke back-ups voor bestanden of directorystructuren te maken, en tegen lage kosten.

GFS-architectuur

De tekening is overgenomen uit het originele artikel.

Er zijn masterservers en chunkservers in het systeem die daadwerkelijk gegevens opslaan. Gebruikelijk, GFS cluster bestaat uit één hoofdmachine masters en veel machines die chunk-bestanden chunkservers opslaan. Klanten hebben toegang tot al deze machines. Bestanden in GFS worden opgesplitst in brokken (brokken, je kunt een fragment zeggen). Chunk heeft vaste maat dat kan worden aangepast. Elk van deze chunks heeft een unieke en globale 64-bits sleutel, die door de master wordt uitgegeven bij het maken van een chunk. Chunk-servers slaan chunks op als normaal Linux-bestanden, op uw lokale harde schijf. Voor betrouwbaarheid kan elke chunk worden gerepliceerd naar andere chunk-servers. Drie replica's worden vaak gebruikt.
De master is verantwoordelijk voor het werken met metadata voor het gehele bestandssysteem. Metagegevens omvatten naamruimten,, het toewijzen van bestanden aan chunks en de huidige positie van chunks. De master bestuurt ook alle wereldwijde systeemactiviteiten, zoals het beheren van gratis chunks, het verzamelen van afval (meer onnodige chunks verzamelen) en het verplaatsen van chunks tussen chunk-servers. De master wisselt voortdurend berichten (HeartBeat-berichten) uit met chunk-servers om instructies te geven en hun status te bepalen (zoek uit of ze nog in leven zijn).
De client communiceert alleen met de wizard om metagegevensgerelateerde bewerkingen uit te voeren. Alle bewerkingen met de gegevens zelf worden rechtstreeks met chunk-servers uitgevoerd. GFS- het systeem ondersteunt geen POSIX API, dus ontwikkelaars hoefden niet te knoeien met VNode op Linux-niveau.
Ontwikkelaars gebruiken geen gegevenscaching, hoewel klanten metagegevens in de cache opslaan. Op chunk-servers slaat het Linux-besturingssysteem al de meest gebruikte blokken in het geheugen op. Over het algemeen stelt het afwijzen van caching u in staat om niet na te denken over het probleem van cache-validiteit (cache-coherentie).

Meester

Het gebruik van een enkele wizard vereenvoudigt de systeemarchitectuur aanzienlijk. Hiermee kunt u complexe bewegingen van chunks uitvoeren, replicatie organiseren met behulp van globale gegevens. Het lijkt erop dat het hebben van slechts één master de bottleneck van het systeem zou moeten zijn, maar dit is niet het geval. Klanten lezen of schrijven nooit gegevens via de wizard. In plaats daarvan vragen ze de master met welke chunk-server ze contact moeten opnemen, en dan communiceren ze rechtstreeks met de chunk-servers.
Laten we eens kijken hoe de klant gegevens leest. Ten eerste, de brokgrootte kennen,
bestandsnaam en offset ten opzichte van het begin van het bestand, bepaalt de client het stuknummer in het bestand. Vervolgens stuurt het een verzoek naar de master met daarin de bestandsnaam en het chunknummer in dat bestand. De master geeft chunk-servers uit, één in elke replica, die de chunk opslaan die we nodig hebben. De master geeft ook de chunk-ID aan de client.
Vervolgens beslist de client welke van de replica's hij het leukst vindt (in de regel degene die dichterbij is), en stuurt een verzoek dat bestaat uit een chunk en een offset ten opzichte van het begin van de chunk. Verdere gegevensuitlezing vereist geen tussenkomst van de wizard. In de praktijk neemt de client in de regel meerdere chunks op in één leesverzoek en geeft de master de coördinaten van elk van de chunks in één antwoord.
De grootte van de brok is een belangrijk kenmerk van het systeem. Meestal is het ingesteld op 64 megabytes, wat veel groter is dan de blokgrootte in een gewoon bestandssysteem. Het is duidelijk dat als u veel bestanden moet opslaan, waarvan de grootte kleiner stuk, dan zullen we veel uitgeven extra geheugen... Maar de keuze voor zo'n grote brok komt door de taken die Google op zijn clusters moet oplossen. In de regel moet er iets worden geteld voor alle documenten op internet en daarom zijn de bestanden in deze taken erg groot.

Metagegevens

De wizard slaat drie belangrijke typen metagegevens op: bestands- en chunk-naamruimten, toewijzing van bestanden naar chunks en de positie van chunk-replica's. Alle metadata wordt opgeslagen in het geheugen van de master. Doordat de metadata in het geheugen wordt opgeslagen, is de wizard snel. De master leert eenvoudig en efficiënt de stand van zaken in het systeem. Het scant chunk-servers op de achtergrond. Deze periodieke scans worden gebruikt voor het verzamelen van afval, extra replicaties, in het geval van detectie van een niet-beschikbare chunk-server en bewegende chunks, om de belasting en vrije ruimte op harde schijven van chunk-servers in evenwicht te brengen.
De master houdt de positie van de chunks bij. Wanneer een chunk-server start, onthoudt de master zijn chunks. Tijdens het werk controleert de master alle bewegingen van chunks en de status van chunk-servers. Zo heeft hij alle informatie over de positie van elk stuk.
Een belangrijk onderdeel van de metadata is het activiteitenlogboek. De wizard slaat een reeks bewerkingen op voor het doorbreken van wijzigingen in metagegevens. Aan de hand van deze markeringen in het bewerkingslogboek wordt de logische tijd van het systeem bepaald. Het is deze logische tijd die de versies van bestanden en chunks bepaalt.
Aangezien het activiteitenlogboek een belangrijk onderdeel is, moet het veilig worden opgeslagen en moeten alle wijzigingen erin alleen zichtbaar worden voor klanten als de metagegevens veranderen. Het bewerkingslogboek wordt gerepliceerd naar verschillende externe machines en het systeem reageert pas op de clientbewerking nadat dit logboek is opgeslagen op de hoofdschijf en de schijven van de externe machines.
De wizard herstelt de status van het systeem door een logboek met bewerkingen uit te voeren. Het bewerkingslogboek wordt relatief klein gehouden, waarbij alleen de laatste bewerkingen worden bewaard. Tijdens het werk maakt de wizard controle punten wanneer de grootte van het logboek een bepaalde waarde overschrijdt, en het systeem alleen kan worden hersteld naar het dichtstbijzijnde controlepunt. Verderop in het logboek kunt u enkele bewerkingen herhalen, zodat het systeem terug kan keren naar een punt tussen het laatste controlepunt en huidige tijd.

Interacties binnen het systeem

Hierboven werd de architectuur van het systeem beschreven, waardoor de tussenkomst van de wizard bij het uitvoeren van bewerkingen tot een minimum wordt beperkt. Laten we nu eens kijken hoe de client-, master- en chunkservers samenwerken om gegevens te verplaatsen, atomaire schrijfbewerkingen uit te voeren en een back-up te maken (snapshot).
Elke chunk-wijziging moet op alle replica's worden gedupliceerd en de metagegevens worden gewijzigd. V GFS de meester geeft een brok tijdens bezit(lease) een van de servers die deze chunk opslaat. Zo'n server wordt een primaire replica genoemd. De rest van de replica's wordt secundair verklaard. De primaire replica verzamelt opeenvolgende chunk-wijzigingen en alle replica's volgen die volgorde wanneer die wijzigingen optreden.
Mechanisme bezittingen chunk is zo ontworpen dat de belasting van de master wordt geminimaliseerd. Bij het toewijzen van geheugen wacht het eerst 60 seconden. En dan kan de primaire replica desgewenst de master verzoeken dit interval te verlengen en krijgt in de regel een positief antwoord. Tijdens deze wachttijd kan de master de wijzigingen ongedaan maken.
Laten we het gegevensregistratieproces eens nader bekijken. Het wordt stap voor stap getoond in de figuur, terwijl dunne lijnen controlestromen komen overeen en gegevensstromen zijn vetgedrukt.


Dit cijfer is ook overgenomen uit het oorspronkelijke artikel.
  1. De client vraagt ​​de master welke van de chunk-servers eigenaar is van de chunk, en waar deze chunk zich in andere replica's bevindt. Indien nodig geeft de meester de brok aan iemand die in het bezit is.
  2. De master reageert met de primaire replica en de overige (secundaire) replica's. De opdrachtgever bewaart deze gegevens voor: verdere actie... Nu hoeft de client mogelijk alleen met de master te communiceren als de primaire replica niet meer beschikbaar is.
  3. De client stuurt vervolgens gegevens naar alle replica's. Hij kan het in willekeurige volgorde doen. Elke chunk-server bewaart ze in een speciale buffer totdat ze nodig zijn of overbodig worden.
  4. Wanneer alle replica's deze gegevens hebben geaccepteerd, stuurt de client een schrijfverzoek naar de primaire replica. Dit verzoek bevat de identiteit van de gegevens die in stap 3 zijn verzonden. De primaire replica bepaalt nu de volgorde waarin eventuele wijzigingen moeten worden uitgevoerd, mogelijk van meerdere parallelle clients. En vervolgens voert het die wijzigingen lokaal in die specifieke volgorde uit.
  5. De primaire replica stuurt de schrijfaanvraag door naar alle secundaire replica's. Elke secundaire replica brengt deze wijzigingen aan in de volgorde die is opgegeven door de primaire replica.
  6. Secundaire replica's rapporteren het succes van deze bewerkingen.
  7. De primaire replica stuurt een reactie naar de client. Eventuele fouten die in een replica optreden, worden ook naar de client verzonden. Als er een fout optreedt tijdens het schrijven naar de primaire replica, vindt het schrijven naar de secundaire replica's niet plaats, anders vond het schrijven plaats naar de primaire replica en een subset van de secundaire replica's. In dit geval handelt de klant de fout af en beslist hij wat er vervolgens mee gedaan moet worden.
Uit het bovenstaande voorbeeld kunt u zien dat de makers een gescheiden gegevensstroom en controlestroom hebben. Als de besturingsstroom alleen naar de primaire replica gaat, gaat de gegevensstroom naar alle replica's. Dit wordt gedaan om te voorkomen dat er knelpunten in het netwerk ontstaan ​​en in plaats daarvan uitgebreid gebruik te maken van de bandbreedte van elke machine. Om knelpunten en overbelaste verbindingen te voorkomen, wordt ook een transmissieschema naar de naaste buur gebruikt. netwerk topologie... Laten we zeggen dat de client gegevens naar chunk-servers verzendt S1,..., S4... De client stuurt gegevens naar de dichtstbijzijnde server, laten we S1... Hij stuurt dan door naar de dichtstbijzijnde server, let it be S2... Verder S2 stuurt ze door naar de dichtstbijzijnde S3 of S4, enzovoort.
Ook wordt de latentie geminimaliseerd door gebruik te maken van pipelining van verzonden datapakketten over TCP... Dat wil zeggen, zodra de chunk-server een deel van de gegevens ontvangt, begint hij deze onmiddellijk te verzenden. Geen netwerkcongestie, ideale tijd om datavolume te verzenden B byte per R replica's zullen B / T + RL, waar t netwerkbandbreedte, en L- latentie bij de overdracht van één byte tussen twee machines.
GFS ondersteunt bewerkingen zoals het toevoegen van atomaire gegevens aan een bestand. Meestal geven we bij het schrijven van bepaalde gegevens naar een bestand deze gegevens en offset aan. Als meerdere klanten produceren: een soortgelijke operatie, dan kunnen deze bewerkingen niet worden herschikt (dit kan leiden tot een onjuiste bewerking). Als we alleen gegevens aan het bestand willen toevoegen, dan geven we in dit geval alleen de gegevens zelf aan. GFS zal ze toevoegen met een atomaire operatie. Over het algemeen geldt dat als een bewerking mislukt op een van de secundaire replica's, GFS, retourneert een fout en de gegevens zullen op verschillende replica's anders zijn.
Nog een interessant ding v GFS- dit zijn back-ups (je kunt ook een momentopname noemen) van een bestand of directorystructuur, die vrijwel onmiddellijk worden gemaakt, terwijl de lopende bewerkingen in het systeem bijna niet worden onderbroken. Dit wordt bereikt door technologie die vergelijkbaar is met: kopiëren op schrijven... Gebruikers gebruiken deze mogelijkheid om datatakken te creëren of als tussenpunt om wat experimenten te starten.

Bewerkingen uitgevoerd door de wizard

De master is een belangrijke schakel in het systeem. Het beheert chunk-replicatie: neemt beslissingen over plaatsing, maakt nieuwe chunks en coördineert verschillende activiteiten binnen het systeem om chunks volledig gerepliceerd te houden, de belasting van chunk-servers in evenwicht te brengen en ongebruikte bronnen opnieuw samen te stellen.
In tegenstelling tot de meeste bestandssystemen GFS slaat de samenstelling van bestanden niet op in de map. GFS vertegenwoordigt logischerwijs de naamruimte als een tabel die elk pad naar metagegevens toewijst. Zo'n tabel kan effectief in het geheugen worden opgeslagen als een boor (een woordenboek van deze paden). Elk knooppunt in deze boom (overeenkomend met een absoluut pad naar een bestand of naar een map) heeft corresponderende gegevens voor een lees-/schrijfvergrendeling. Elke bewerking van de wizard vereist het instellen van enkele sloten. Dit is waar lees-/schrijfvergrendelingen in het systeem worden gebruikt. Meestal, als de operatie werkt met: /d1/d2/.../dn/blad, dan stelt het leessloten in op / d1, / d1 / d2, ..., d1 / d2 /.../ dn en blokkeren, hetzij om te lezen of om op te schrijven d1 / d2 /.../ dn / blad... Waarin blad kan een map of een bestand zijn.
Laten we met een voorbeeld laten zien hoe het vergrendelingsmechanisme het aanmaken van een bestand kan voorkomen. / home / gebruiker / foo tijdens back-up / home / gebruiker v / opslaan / gebruiker... De back-upbewerking stelt leesvergrendelingen in op: / huis en / opslaan, evenals blokkering voor schrijven op / home / gebruiker en / opslaan / gebruiker... De bewerking voor het maken van bestanden vereist een leesvergrendeling / huis en / home / gebruiker, evenals blokkering voor schrijven op / home / gebruiker / foo... De tweede bewerking wordt dus pas uitgevoerd als de eerste is uitgevoerd, omdat er een conflicterend slot is ingeschakeld / home / gebruiker... Bij het aanmaken van een bestand is een schrijfblokkering van de bovenliggende map niet vereist, een leesblokkering is voldoende om het wissen van deze map te voorkomen.
Clusters GFS zijn sterk verspreid en gelaagd. Meestal heeft zo'n cluster honderden chunk-servers die zich op verschillende racks bevinden. Deze servers zijn over het algemeen beschikbaar voor een groot aantal clients die zich in hetzelfde of een ander rack bevinden. Verbindingen tussen twee machines uit verschillende racks kunnen via één of meerdere switches verlopen. Gelaagde distributie is erg moeilijke opdracht betrouwbare, schaalbare en betaalbare gegevensverspreiding.
Het beleid voor replicalay-out probeert aan de volgende eigenschappen te voldoen: de betrouwbaarheid en beschikbaarheid van gegevens maximaliseren en het netwerkgebruik maximaliseren. bandbreedte... Replica's moeten niet alleen op verschillende schijven of verschillende auto's, maar nog meer op verschillende rekken. Dit zorgt ervoor dat het stuk beschikbaar is, zelfs als het hele rek is beschadigd of losgekoppeld. Met deze opstelling kost het lezen ongeveer evenveel tijd als de netwerkbandbreedte, maar de datastroom tijdens het schrijven moet door verschillende racks gaan.
Wanneer de master een chunk maakt, kiest hij waar hij de replica plaatst. Het komt door verschillende factoren:
  • Het is wenselijk om een ​​nieuwe replica te plaatsen op een chunk-server met het laagste gemiddelde schijfgebruik. Dit zal na verloop van tijd de schijfbelasting gelijk maken verschillende servers.
  • Het is wenselijk om het aantal nieuw aangemaakte chunks op elke chunk-server te beperken. Ondanks het feit dat het maken van een chunk op zich al een snelle operatie is, impliceert dit het vervolgens schrijven van data naar deze chunk, wat al een moeilijke operatie is, en dit kan leiden tot een onbalans in het volume van het dataverkeer naar verschillende delen van de systeem.
  • Zoals hierboven vermeld, is het wenselijk om brokken over verschillende rekken te verdelen.
Zodra het aantal replica's onder een door de gebruiker opgegeven waarde komt, repliceert de master de chunk opnieuw. Dit kan verschillende redenen hebben: de chunk-server is niet meer beschikbaar, een van de schijven is defect of de waarde die het aantal replica's aangeeft, is verhoogd. Elk stuk dat moet worden gerepliceerd, krijgt een prioriteit toegewezen, die ook van verschillende factoren afhangt. Ten eerste heeft het stuk met het minste aantal replica's een hogere prioriteit. Ten tweede, om de betrouwbaarheid van de uitvoering van applicaties te vergroten, wordt de prioriteit van chunks, die de voortgang van het werk van de klant blokkeren, verhoogd.
De master selecteert de chunk met de hoogste prioriteit en kopieert deze, waarbij hij een van de chunk-servers instrueert om deze van een beschikbare replica te kopiëren. De nieuwe replica bevindt zich om dezelfde redenen als toen deze werd gemaakt.
Tijdens het werk balanceert de meester constant de replica's. Afhankelijk van de distributie van replica's in het systeem, wordt de replica verplaatst om het schijfgebruik gelijk te maken en de belasting te verdelen. De master moet ook beslissen welke replica's moeten worden verwijderd. In de regel wordt de replica die zich op de chunk-server met de minste vrije schijfruimte bevindt, verwijderd.
Nog een belangrijke functie liggend op de master is garbage collection. Bij het verwijderen van een bestand, GFS vereist niet de onmiddellijke terugkeer van de bevrijde schijfruimte... Het doet dit tijdens de reguliere garbagecollection, wat zowel op chunk- als op bestandsniveau gebeurt. De auteurs zijn van mening dat deze aanpak het systeem eenvoudiger en betrouwbaarder maakt.
Wanneer een bestand door een toepassing wordt verwijderd, onthoudt de wizard dit feit in de logboeken, net als vele andere. Echter, in plaats van het onmiddellijke herstel van de vrijgekomen bronnen te vereisen, wordt het bestand eenvoudig hernoemd en wordt de verwijderingstijd toegevoegd aan de bestandsnaam en wordt het onzichtbaar voor de gebruiker. En de wizard verwijdert tijdens het regelmatig scannen van de naamruimte van het bestandssysteem feitelijk al dergelijke verborgen bestanden die meer dan drie dagen geleden door de gebruiker zijn verwijderd (dit interval is configureerbaar). Tot dat moment blijft het bestand als verborgen in het systeem en kan het worden gelezen of hernoemd voor herstel. Wanneer verborgen bestand wordt verwijderd door de master, dan wordt informatie over hem ook verwijderd uit de metadata en worden alle delen van dit bestand ervan ontkoppeld.
De wizard scant, naast het regelmatig scannen van de bestandsnaamruimte, een vergelijkbare scan van de chunk-naamruimte. De wizard bepaalt de chunks die losgekoppeld zijn van het bestand, verwijdert ze uit de metadata en stuurt tijdens regelmatige communicatie met chunkservers een signaal dat het mogelijk is om alle replica's die een bepaalde chunk bevatten te verwijderen. Deze benadering van afvalinzameling heeft veel voordelen, met één nadeel: als het systeem geen ruimte meer heeft en de luie verwijdering de ongebruikte ruimte vergroot, tot de fysieke verwijdering zelf. Maar er is de mogelijkheid om verwijderde gegevens te herstellen, de mogelijkheid van flexibele taakverdeling tijdens het verwijderen en de mogelijkheid om het systeem te herstellen in geval van storingen.

Fouttolerantie en foutdiagnose

De auteurs van het systeem beschouwen frequente storingen van systeemcomponenten als een van de moeilijkste problemen. De kwantiteit en kwaliteit van componenten maken deze storingen niet alleen de uitzondering, maar eerder de norm. Een defect aan een onderdeel kan worden veroorzaakt door het niet beschikbaar zijn van dat onderdeel of, erger nog, door beschadigde gegevens. GFS houdt het systeem draaiende met twee eenvoudige strategieën: snel herstel en replicatie.
Een snel herstel is in feite een herstart van de machine. Tegelijkertijd is de opstarttijd erg kort, wat leidt tot een kleine hapering, waarna het werk normaal verder gaat. Brokkenreplicatie is hierboven al besproken. De master repliceert een chunk als een van de replica's niet meer beschikbaar is of als de gegevens met de chunk-replica beschadigd zijn. Beschadigde brokken worden bepaald door controlesommen te berekenen.
Een ander type replicatie in het systeem, waarover nog weinig is gezegd, is masterreplicatie. Operation log en checkpoints worden gerepliceerd. Elke wijziging in bestanden in het systeem vindt pas plaats nadat de wizard het bewerkingslogboek naar de schijven heeft geschreven en naar de schijven van de machines waarnaar het logboek is gerepliceerd. Bij kleine problemen kan de wizard opnieuw opstarten. Bij problemen met harde schijf of andere vitale masterinfrastructuur, start GFS een nieuwe master op een van de machines waarop de mastergegevens werden gerepliceerd. Clients verwijzen naar een DNS-wizard die opnieuw kan worden toegewezen aan een nieuwe machine. De nieuwe meester is een schaduw van de oude, geen exacte kopie. Daarom heeft het alleen-lezen toegang tot de bestanden. Dat wil zeggen, het wordt geen volwaardige meester, maar houdt alleen een logboek bij van bewerkingen en andere structuren van de meester.
Een belangrijk onderdeel van het systeem is de mogelijkheid om de gegevensintegriteit te behouden. normaal GFS het cluster bestaat uit honderden machines waarop er duizenden staan harde schijven, en deze schijven, wanneer ze met benijdenswaardige persistentie werken, falen, wat leidt tot gegevensbeschadiging. Het systeem kan gegevens herstellen met behulp van replicatie, maar hiervoor is het noodzakelijk om te begrijpen of de gegevens zijn verslechterd. Het simpelweg vergelijken van verschillende replica's op verschillende chunk-servers is niet effectief. Bovendien kunnen gegevensinconsistentie tussen verschillende replica's optreden, wat tot gegevensverschillen kan leiden. Daarom moet elke chunk-server onafhankelijk de integriteit van de gegevens bepalen.
Elk stuk is opgesplitst in blokken van lengte 64 kB... Elk blok komt overeen met: 32 -bits controlesom. Net als andere metadata worden deze hoeveelheden in het geheugen opgeslagen, regelmatig opgeslagen in het logboek, gescheiden van gebruikersgegevens.
Voordat de gegevens worden gelezen, controleert de chunk-server controlesommen chunk-blokken die de door de gebruiker of een andere chunk-server opgevraagde gegevens kruisen. Dat wil zeggen, de chunk-server verspreidt geen beschadigde gegevens. Als de checksums niet overeenkomen, retourneert de chunk-server de fout naar de machine die het verzoek heeft ingediend en rapporteert deze aan de master. De gebruiker kan gegevens van een andere replica lezen en de master maakt nog een kopie van de gegevens van de andere replica. Daarna instrueert de master deze chunk-server om deze beschadigde replica te verwijderen.
Bij het toevoegen van nieuwe gegevens worden de checksums niet geverifieerd en worden er nieuwe checksums voor de blokken geschreven. Als de schijf beschadigd is, wordt deze gedetecteerd wanneer u deze gegevens probeert te lezen. Bij het schrijven vergelijkt de chunk-server alleen de eerste en de laatste blokken die de grenzen kruisen waarbinnen het schrijven plaatsvindt, aangezien sommige gegevens op deze blokken niet worden overschreven en het noodzakelijk is om hun integriteit te controleren.

Pr0grammer 29 oktober 2009 om 01:31

Gedistribueerd bestandssysteem GFS (Google-bestandssysteem)

  • Website ontwikkeling

Momenteel zijn er, in de context van de groei van informatie, problemen met het opslaan en verwerken van zeer grote gegevens. Daarom worden deze gegevens op meerdere servers tegelijk verwerkt, die clusters vormen. Om het werken met data op clusters te vereenvoudigen, worden gedistribueerde bestandssystemen ontwikkeld. We zullen een voorbeeld van een gedistribueerd bestandssysteem nader bekijken. Google-bestandssysteem gebruikt door het bedrijf Google... (Het artikel is in feite een losse en ingekorte vertaling van het originele artikel).

GFS is waarschijnlijk het meest bekende gedistribueerde bestandssysteem. Betrouwbare, schaalbare gegevensopslag is essentieel voor elke toepassing die met zo'n grote hoeveelheid gegevens werkt als alle documenten op internet. GFS is het belangrijkste platform voor het opslaan van informatie in Google. GFS is een groot gedistribueerd bestandssysteem dat enorme hoeveelheden informatie kan opslaan en verwerken.
GFS werd gebouwd op basis van de volgende criteria:

  • Het systeem is opgebouwd uit een groot aantal veelvoorkomende goedkope apparatuur, die vaak niet goed werkt. Er moet toezicht zijn op storingen en de mogelijkheid om de werking van het systeem te herstellen in het geval van een storing van apparatuur.
  • Het systeem moet veel grote bestanden opslaan. Meestal enkele miljoenen bestanden, elk 100 MB of meer. Ook is het vaak nodig om met multi-gigabyte bestanden om te gaan, die ook nog eens efficiënt moeten worden opgeslagen. Er moeten ook kleine bestanden worden opgeslagen, maar het systeem is er niet voor geoptimaliseerd.
  • Doorgaans zijn er twee soorten lezen: het lezen van een groot opeenvolgend stuk gegevens en het lezen van een kleine hoeveelheid willekeurige gegevens. Bij het uitlezen van een grote datastroom is het gebruikelijk om een ​​chunk van 1 MB of groter aan te vragen. Dergelijke opeenvolgende bewerkingen van één client lezen vaak opeenvolgende delen van hetzelfde bestand. Het lezen van een kleine gegevensomvang heeft in de regel een volume van enkele kilobytes. Tijdkritische toepassingen moeten een bepaald aantal van dergelijke verzoeken verzamelen en ze sorteren op offset vanaf het begin van het bestand. Dit voorkomt heen-en-weer weergaven tijdens het lezen.
  • Vaak zijn er bewerkingen voor het schrijven van een groot opeenvolgend stuk gegevens, dat aan een bestand moet worden toegevoegd. Doorgaans is de hoeveelheid gegevens die moet worden geschreven in dezelfde volgorde als die om te lezen. Kleine schrijfacties, maar naar willekeurige locaties in het bestand, zijn meestal niet effectief.
  • Het systeem moet strikt gedefinieerde semantiek van parallelle werking van meerdere clients implementeren, als ze tegelijkertijd proberen gegevens aan hetzelfde bestand toe te voegen. In dit geval kan het voorkomen dat honderden verzoeken om naar één bestand te schrijven tegelijkertijd worden ontvangen. Om hiermee om te gaan, wordt de atomiciteit van de bewerkingen van het toevoegen van gegevens aan het bestand gebruikt, met enige synchronisatie. Dat wil zeggen, als een leesbewerking wordt ontvangen, zal deze worden uitgevoerd, hetzij vóór de volgende schrijfbewerking, hetzij daarna.
  • Hoge bandbreedte heeft de voorkeur boven lage latentie. De meeste applicaties in Google werken dus het liefst met grote hoeveelheden data, op hoge snelheid, en de uitvoering van een enkele lees- en schrijfbewerking kan over het algemeen worden opgerekt.
Bestanden in GFS zijn hiërarchisch georganiseerd met behulp van mappen zoals elk ander bestandssysteem, en worden geïdentificeerd door hun eigen pad. U kunt de gebruikelijke bewerkingen op bestanden in GFS uitvoeren: maken, verwijderen, openen, sluiten, lezen en schrijven.
Bovendien ondersteunt GFS back-ups of snapshots. Het is mogelijk om dergelijke back-ups voor bestanden of directorystructuren te maken, en tegen lage kosten.

GFS-architectuur

De tekening is overgenomen uit het originele artikel.

Er zijn masterservers en chunkservers in het systeem die daadwerkelijk gegevens opslaan. Gebruikelijk, GFS het cluster bestaat uit één mastermachine (master) en vele machines die fragmenten van bestanden chunk-servers (chunkservers) opslaan. Klanten hebben toegang tot al deze machines. Bestanden in GFS worden opgesplitst in brokken (brokken, je kunt een fragment zeggen). De chunk heeft een vaste maat die op maat gemaakt kan worden. Elk van deze chunks heeft een unieke en globale 64-bits sleutel, die door de master wordt uitgegeven bij het maken van een chunk. Chunk-servers slaan chunks op als gewone Linux-bestanden op een lokale harde schijf. Voor betrouwbaarheid kan elke chunk worden gerepliceerd naar andere chunk-servers. Drie replica's worden vaak gebruikt.
De master is verantwoordelijk voor het werken met metadata voor het gehele bestandssysteem. Metagegevens omvatten naamruimten,, het toewijzen van bestanden aan chunks en de huidige positie van chunks. De master bestuurt ook alle wereldwijde systeemactiviteiten, zoals het beheren van gratis chunks, het verzamelen van afval (meer onnodige chunks verzamelen) en het verplaatsen van chunks tussen chunk-servers. De master wisselt voortdurend berichten (HeartBeat-berichten) uit met chunk-servers om instructies te geven en hun status te bepalen (zoek uit of ze nog in leven zijn).
De client communiceert alleen met de wizard om metagegevensgerelateerde bewerkingen uit te voeren. Alle bewerkingen met de gegevens zelf worden rechtstreeks met chunk-servers uitgevoerd. GFS- het systeem ondersteunt geen POSIX API, dus ontwikkelaars hoefden niet te knoeien met VNode op Linux-niveau.
Ontwikkelaars gebruiken geen gegevenscaching, hoewel klanten metagegevens in de cache opslaan. Op chunk-servers slaat het Linux-besturingssysteem al de meest gebruikte blokken in het geheugen op. Over het algemeen stelt het afwijzen van caching u in staat om niet na te denken over het probleem van cache-validiteit (cache-coherentie).

Meester

Het gebruik van een enkele wizard vereenvoudigt de systeemarchitectuur aanzienlijk. Hiermee kunt u complexe bewegingen van chunks uitvoeren, replicatie organiseren met behulp van globale gegevens. Het lijkt erop dat het hebben van slechts één master de bottleneck van het systeem zou moeten zijn, maar dit is niet het geval. Klanten lezen of schrijven nooit gegevens via de wizard. In plaats daarvan vragen ze de master met welke chunk-server ze contact moeten opnemen, en dan communiceren ze rechtstreeks met de chunk-servers.
Laten we eens kijken hoe de klant gegevens leest. Ten eerste, de brokgrootte kennen,
bestandsnaam en offset ten opzichte van het begin van het bestand, bepaalt de client het stuknummer in het bestand. Vervolgens stuurt het een verzoek naar de master met daarin de bestandsnaam en het chunknummer in dat bestand. De master geeft chunk-servers uit, één in elke replica, die de chunk opslaan die we nodig hebben. De master geeft ook de chunk-ID aan de client.
Vervolgens beslist de client welke van de replica's hij het leukst vindt (in de regel degene die dichterbij is), en stuurt een verzoek dat bestaat uit een chunk en een offset ten opzichte van het begin van de chunk. Verdere gegevensuitlezing vereist geen tussenkomst van de wizard. In de praktijk neemt de client in de regel meerdere chunks op in één leesverzoek en geeft de master de coördinaten van elk van de chunks in één antwoord.
De grootte van de brok is een belangrijk kenmerk van het systeem. Meestal is het ingesteld op 64 megabytes, wat veel groter is dan de blokgrootte in een gewoon bestandssysteem. Het is duidelijk dat als het nodig is om veel bestanden op te slaan, waarvan de grootte kleiner is dan de chunk, we veel extra geheugen zullen verbruiken. Maar de keuze voor zo'n grote brok komt door de taken die Google op zijn clusters moet oplossen. In de regel moet er iets worden geteld voor alle documenten op internet en daarom zijn de bestanden in deze taken erg groot.

Metagegevens

De wizard slaat drie belangrijke typen metagegevens op: bestands- en chunk-naamruimten, toewijzing van bestanden naar chunks en de positie van chunk-replica's. Alle metadata wordt opgeslagen in het geheugen van de master. Doordat de metadata in het geheugen wordt opgeslagen, is de wizard snel. De master leert eenvoudig en efficiënt de stand van zaken in het systeem. Het scant chunk-servers op de achtergrond. Deze periodieke scans worden gebruikt voor het verzamelen van afval, extra replicaties, in het geval van detectie van een niet-beschikbare chunk-server en bewegende chunks, om de belasting en vrije ruimte op harde schijven van chunk-servers in evenwicht te brengen.
De master houdt de positie van de chunks bij. Wanneer een chunk-server start, onthoudt de master zijn chunks. Tijdens het werk controleert de master alle bewegingen van chunks en de status van chunk-servers. Zo heeft hij alle informatie over de positie van elk stuk.
Een belangrijk onderdeel van de metadata is het activiteitenlogboek. De wizard slaat een reeks bewerkingen op voor het doorbreken van wijzigingen in metagegevens. Aan de hand van deze markeringen in het bewerkingslogboek wordt de logische tijd van het systeem bepaald. Het is deze logische tijd die de versies van bestanden en chunks bepaalt.
Aangezien het activiteitenlogboek een belangrijk onderdeel is, moet het veilig worden opgeslagen en moeten alle wijzigingen erin alleen zichtbaar worden voor klanten als de metagegevens veranderen. Het bewerkingslogboek wordt gerepliceerd naar verschillende externe machines en het systeem reageert pas op de clientbewerking nadat dit logboek is opgeslagen op de hoofdschijf en de schijven van de externe machines.
De wizard herstelt de status van het systeem door een logboek met bewerkingen uit te voeren. Het bewerkingslogboek wordt relatief klein gehouden, waarbij alleen de laatste bewerkingen worden bewaard. Tijdens het proces creëert de wizard controlepunten wanneer de grootte van het logboek een bepaalde waarde overschrijdt, en het systeem kan alleen worden hersteld naar het dichtstbijzijnde controlepunt. Verderop in het logboek kunt u enkele bewerkingen herhalen, zodat het systeem terug kan keren naar een punt dat tussen het laatste controlepunt en de huidige tijd ligt.

Interacties binnen het systeem

Hierboven werd de architectuur van het systeem beschreven, waardoor de tussenkomst van de wizard bij het uitvoeren van bewerkingen tot een minimum wordt beperkt. Laten we nu eens kijken hoe de client-, master- en chunkservers samenwerken om gegevens te verplaatsen, atomaire schrijfbewerkingen uit te voeren en een back-up te maken (snapshot).
Elke chunk-wijziging moet op alle replica's worden gedupliceerd en de metagegevens worden gewijzigd. V GFS de meester geeft een brok tijdens bezit(lease) een van de servers die deze chunk opslaat. Zo'n server wordt een primaire replica genoemd. De rest van de replica's wordt secundair verklaard. De primaire replica verzamelt opeenvolgende chunk-wijzigingen en alle replica's volgen die volgorde wanneer die wijzigingen optreden.
Mechanisme bezittingen chunk is zo ontworpen dat de belasting van de master wordt geminimaliseerd. Bij het toewijzen van geheugen wacht het eerst 60 seconden. En dan kan de primaire replica desgewenst de master verzoeken dit interval te verlengen en krijgt in de regel een positief antwoord. Tijdens deze wachttijd kan de master de wijzigingen ongedaan maken.
Laten we het gegevensregistratieproces eens nader bekijken. Het wordt in stappen in de afbeelding getoond, met dunne lijnen die controlestromen vertegenwoordigen en dikke lijnen die gegevensstromen vertegenwoordigen.


Dit cijfer is ook overgenomen uit het oorspronkelijke artikel.
  1. De client vraagt ​​de master welke van de chunk-servers eigenaar is van de chunk, en waar deze chunk zich in andere replica's bevindt. Indien nodig geeft de meester de brok aan iemand die in het bezit is.
  2. De master reageert met de primaire replica en de overige (secundaire) replica's. De klant bewaart deze gegevens voor verdere acties. Nu hoeft de client mogelijk alleen met de master te communiceren als de primaire replica niet meer beschikbaar is.
  3. De client stuurt vervolgens gegevens naar alle replica's. Hij kan het in willekeurige volgorde doen. Elke chunk-server bewaart ze in een speciale buffer totdat ze nodig zijn of overbodig worden.
  4. Wanneer alle replica's deze gegevens hebben geaccepteerd, stuurt de client een schrijfverzoek naar de primaire replica. Dit verzoek bevat de identiteit van de gegevens die in stap 3 zijn verzonden. De primaire replica bepaalt nu de volgorde waarin eventuele wijzigingen moeten worden uitgevoerd, mogelijk van meerdere parallelle clients. En vervolgens voert het die wijzigingen lokaal in die specifieke volgorde uit.
  5. De primaire replica stuurt de schrijfaanvraag door naar alle secundaire replica's. Elke secundaire replica brengt deze wijzigingen aan in de volgorde die is opgegeven door de primaire replica.
  6. Secundaire replica's rapporteren het succes van deze bewerkingen.
  7. De primaire replica stuurt een reactie naar de client. Eventuele fouten die in een replica optreden, worden ook naar de client verzonden. Als er een fout optreedt tijdens het schrijven naar de primaire replica, vindt het schrijven naar de secundaire replica's niet plaats, anders vond het schrijven plaats naar de primaire replica en een subset van de secundaire replica's. In dit geval handelt de klant de fout af en beslist hij wat er vervolgens mee gedaan moet worden.
Uit het bovenstaande voorbeeld kunt u zien dat de makers een gescheiden gegevensstroom en controlestroom hebben. Als de besturingsstroom alleen naar de primaire replica gaat, gaat de gegevensstroom naar alle replica's. Dit wordt gedaan om te voorkomen dat er knelpunten in het netwerk ontstaan ​​en in plaats daarvan uitgebreid gebruik te maken van de bandbreedte van elke machine. Om knelpunten en overbelaste verbindingen te vermijden, wordt ook een transmissieschema naar de naaste buur in de netwerktopologie gebruikt. Laten we zeggen dat de client gegevens naar chunk-servers verzendt S1,..., S4... De client stuurt gegevens naar de dichtstbijzijnde server, laten we S1... Hij stuurt dan door naar de dichtstbijzijnde server, let it be S2... Verder S2 stuurt ze door naar de dichtstbijzijnde S3 of S4, enzovoort.
Ook wordt de latentie geminimaliseerd door gebruik te maken van pipelining van verzonden datapakketten over TCP... Dat wil zeggen, zodra de chunk-server een deel van de gegevens ontvangt, begint hij deze onmiddellijk te verzenden. Geen netwerkcongestie, ideale tijd om datavolume te verzenden B byte per R replica's zullen B / T + RL, waar t netwerkbandbreedte, en L- latentie bij de overdracht van één byte tussen twee machines.
GFS ondersteunt bewerkingen zoals het toevoegen van atomaire gegevens aan een bestand. Meestal geven we bij het schrijven van bepaalde gegevens naar een bestand deze gegevens en offset aan. Als meerdere clients een soortgelijke bewerking uitvoeren, kunnen deze bewerkingen niet worden herschikt (dit kan leiden tot een onjuiste bewerking). Als we alleen gegevens aan het bestand willen toevoegen, dan geven we in dit geval alleen de gegevens zelf aan. GFS zal ze toevoegen met een atomaire operatie. Over het algemeen geldt dat als een bewerking mislukt op een van de secundaire replica's, GFS, retourneert een fout en de gegevens zullen op verschillende replica's anders zijn.
Nog iets geweldigs over GFS- dit zijn back-ups (je kunt ook een momentopname noemen) van een bestand of directorystructuur, die vrijwel onmiddellijk worden gemaakt, terwijl de lopende bewerkingen in het systeem bijna niet worden onderbroken. Dit wordt bereikt door technologie die vergelijkbaar is met: kopiëren op schrijven... Gebruikers gebruiken deze mogelijkheid om datatakken te creëren of als tussenpunt om wat experimenten te starten.

Bewerkingen uitgevoerd door de wizard

De master is een belangrijke schakel in het systeem. Het beheert chunk-replicatie: neemt beslissingen over plaatsing, maakt nieuwe chunks en coördineert verschillende activiteiten binnen het systeem om chunks volledig gerepliceerd te houden, de belasting van chunk-servers in evenwicht te brengen en ongebruikte bronnen opnieuw samen te stellen.
In tegenstelling tot de meeste bestandssystemen GFS slaat de samenstelling van bestanden niet op in de map. GFS vertegenwoordigt logischerwijs de naamruimte als een tabel die elk pad naar metagegevens toewijst. Zo'n tabel kan effectief in het geheugen worden opgeslagen als een boor (een woordenboek van deze paden). Elk knooppunt in deze boom (overeenkomend met een absoluut pad naar een bestand of naar een map) heeft corresponderende gegevens voor een lees-/schrijfvergrendeling. Elke bewerking van de wizard vereist het instellen van enkele sloten. Dit is waar lees-/schrijfvergrendelingen in het systeem worden gebruikt. Meestal, als de operatie werkt met: /d1/d2/.../dn/blad, dan stelt het leessloten in op / d1, / d1 / d2, ..., d1 / d2 /.../ dn en blokkeren, hetzij om te lezen of om op te schrijven d1 / d2 /.../ dn / blad... Waarin blad kan een map of een bestand zijn.
Laten we met een voorbeeld laten zien hoe het vergrendelingsmechanisme het aanmaken van een bestand kan voorkomen. / home / gebruiker / foo tijdens back-up / home / gebruiker v / opslaan / gebruiker... De back-upbewerking stelt leesvergrendelingen in op: / huis en / opslaan, evenals blokkering voor schrijven op / home / gebruiker en / opslaan / gebruiker... De bewerking voor het maken van bestanden vereist een leesvergrendeling / huis en / home / gebruiker, evenals blokkering voor schrijven op / home / gebruiker / foo... De tweede bewerking wordt dus pas uitgevoerd als de eerste is uitgevoerd, omdat er een conflicterend slot is ingeschakeld / home / gebruiker... Bij het aanmaken van een bestand is een schrijfblokkering van de bovenliggende map niet vereist, een leesblokkering is voldoende om het wissen van deze map te voorkomen.
Clusters GFS zijn sterk verspreid en gelaagd. Meestal heeft zo'n cluster honderden chunk-servers die zich op verschillende racks bevinden. Deze servers zijn over het algemeen beschikbaar voor een groot aantal clients die zich in hetzelfde of een ander rack bevinden. Verbindingen tussen twee machines uit verschillende racks kunnen via één of meerdere switches verlopen. Gelaagde distributie is een zeer moeilijke taak voor betrouwbare, schaalbare en betaalbare gegevensdistributie.
Het replicalay-outbeleid probeert aan de volgende eigenschappen te voldoen: de betrouwbaarheid en beschikbaarheid van gegevens maximaliseren en het gebruik van netwerkbandbreedte maximaliseren. Replica's moeten zich niet alleen op verschillende schijven of verschillende machines bevinden, maar bovendien op verschillende racks. Dit zorgt ervoor dat het stuk beschikbaar is, zelfs als het hele rek is beschadigd of losgekoppeld. Met deze opstelling kost het lezen ongeveer evenveel tijd als de netwerkbandbreedte, maar de datastroom tijdens het schrijven moet door verschillende racks gaan.
Wanneer de master een chunk maakt, kiest hij waar hij de replica plaatst. Het komt door verschillende factoren:
  • Het is wenselijk om een ​​nieuwe replica te plaatsen op een chunk-server met het laagste gemiddelde schijfgebruik. Dit zal na verloop van tijd het schijfgebruik op verschillende servers gelijkmaken.
  • Het is wenselijk om het aantal nieuw aangemaakte chunks op elke chunk-server te beperken. Ondanks het feit dat het maken van een chunk op zich al een snelle operatie is, impliceert dit het vervolgens schrijven van data naar deze chunk, wat al een moeilijke operatie is, en dit kan leiden tot een onbalans in het volume van het dataverkeer naar verschillende delen van de systeem.
  • Zoals hierboven vermeld, is het wenselijk om brokken over verschillende rekken te verdelen.
Zodra het aantal replica's onder een door de gebruiker opgegeven waarde komt, repliceert de master de chunk opnieuw. Dit kan verschillende redenen hebben: de chunk-server is niet meer beschikbaar, een van de schijven is defect of de waarde die het aantal replica's aangeeft, is verhoogd. Elk stuk dat moet worden gerepliceerd, krijgt een prioriteit toegewezen, die ook van verschillende factoren afhangt. Ten eerste heeft het stuk met het minste aantal replica's een hogere prioriteit. Ten tweede, om de betrouwbaarheid van de uitvoering van applicaties te vergroten, wordt de prioriteit van chunks, die de voortgang van het werk van de klant blokkeren, verhoogd.
De master selecteert de chunk met de hoogste prioriteit en kopieert deze, waarbij hij een van de chunk-servers instrueert om deze van een beschikbare replica te kopiëren. De nieuwe replica bevindt zich om dezelfde redenen als toen deze werd gemaakt.
Tijdens het werk balanceert de meester constant de replica's. Afhankelijk van de distributie van replica's in het systeem, wordt de replica verplaatst om het schijfgebruik gelijk te maken en de belasting te verdelen. De master moet ook beslissen welke replica's moeten worden verwijderd. In de regel wordt de replica die zich op de chunk-server met de minste vrije schijfruimte bevindt, verwijderd.
Een andere belangrijke functie van de master is het verzamelen van afval. Bij het verwijderen van een bestand, GFS vereist geen onmiddellijke teruggave van de vrijgekomen schijfruimte. Het doet dit tijdens de reguliere garbagecollection, wat zowel op chunk- als op bestandsniveau gebeurt. De auteurs zijn van mening dat deze aanpak het systeem eenvoudiger en betrouwbaarder maakt.
Wanneer een bestand door een toepassing wordt verwijderd, onthoudt de wizard dit feit in de logboeken, net als vele andere. Echter, in plaats van het onmiddellijke herstel van de vrijgekomen bronnen te vereisen, wordt het bestand eenvoudig hernoemd en wordt de verwijderingstijd toegevoegd aan de bestandsnaam en wordt het onzichtbaar voor de gebruiker. En de wizard verwijdert tijdens het regelmatig scannen van de naamruimte van het bestandssysteem feitelijk al dergelijke verborgen bestanden die meer dan drie dagen geleden door de gebruiker zijn verwijderd (dit interval is configureerbaar). Tot dat moment blijft het bestand als verborgen in het systeem en kan het worden gelezen of hernoemd voor herstel. Wanneer een verborgen bestand door de master wordt verwijderd, wordt informatie erover ook uit de metadata verwijderd en worden alle delen van dit bestand ervan losgekoppeld.
De wizard scant, naast het regelmatig scannen van de bestandsnaamruimte, een vergelijkbare scan van de chunk-naamruimte. De wizard bepaalt de chunks die losgekoppeld zijn van het bestand, verwijdert ze uit de metadata en stuurt tijdens regelmatige communicatie met chunkservers een signaal dat het mogelijk is om alle replica's die een bepaalde chunk bevatten te verwijderen. Deze benadering van afvalinzameling heeft veel voordelen, met één nadeel: als het systeem geen ruimte meer heeft en de luie verwijdering de ongebruikte ruimte vergroot, tot de fysieke verwijdering zelf. Maar er is de mogelijkheid om verwijderde gegevens te herstellen, de mogelijkheid van flexibele taakverdeling tijdens het verwijderen en de mogelijkheid om het systeem te herstellen in geval van storingen.

Fouttolerantie en foutdiagnose

De auteurs van het systeem beschouwen frequente storingen van systeemcomponenten als een van de moeilijkste problemen. De kwantiteit en kwaliteit van componenten maken deze storingen niet alleen de uitzondering, maar eerder de norm. Een defect aan een onderdeel kan worden veroorzaakt door het niet beschikbaar zijn van dat onderdeel of, erger nog, door beschadigde gegevens. GFS houdt het systeem draaiende met twee eenvoudige strategieën: snel herstel en replicatie.
Een snel herstel is in feite een herstart van de machine. Tegelijkertijd is de opstarttijd erg kort, wat leidt tot een kleine hapering, waarna het werk normaal verder gaat. Brokkenreplicatie is hierboven al besproken. De master repliceert een chunk als een van de replica's niet meer beschikbaar is of als de gegevens met de chunk-replica beschadigd zijn. Beschadigde brokken worden bepaald door controlesommen te berekenen.
Een ander type replicatie in het systeem, waarover nog weinig is gezegd, is masterreplicatie. Operation log en checkpoints worden gerepliceerd. Elke wijziging in bestanden in het systeem vindt pas plaats nadat de wizard het bewerkingslogboek naar de schijven heeft geschreven en naar de schijven van de machines waarnaar het logboek is gerepliceerd. Bij kleine problemen kan de wizard opnieuw opstarten. Bij problemen met de harde schijf of andere vitale infrastructuur van de master start GFS een nieuwe master, op een van de machines waarop de mastergegevens zijn gekopieerd. Clients verwijzen naar een DNS-wizard die opnieuw kan worden toegewezen aan een nieuwe machine. De nieuwe meester is een schaduw van de oude, geen exacte kopie. Daarom heeft het alleen-lezen toegang tot de bestanden. Dat wil zeggen, het wordt geen volwaardige meester, maar houdt alleen een logboek bij van bewerkingen en andere structuren van de meester.
Een belangrijk onderdeel van het systeem is de mogelijkheid om de gegevensintegriteit te behouden. normaal GFS een cluster bestaat uit honderden machines die duizenden harde schijven bevatten, en deze schijven, wanneer ze met benijdenswaardige volharding werken, falen, wat leidt tot datacorruptie. Het systeem kan gegevens herstellen met behulp van replicatie, maar hiervoor is het noodzakelijk om te begrijpen of de gegevens zijn verslechterd. Het simpelweg vergelijken van verschillende replica's op verschillende chunk-servers is niet effectief. Bovendien kunnen gegevensinconsistentie tussen verschillende replica's optreden, wat tot gegevensverschillen kan leiden. Daarom moet elke chunk-server onafhankelijk de integriteit van de gegevens bepalen.
Elk stuk is opgesplitst in blokken van lengte 64 kB... Elk blok komt overeen met: 32 -bits controlesom. Net als andere metadata worden deze hoeveelheden in het geheugen opgeslagen, regelmatig opgeslagen in het logboek, gescheiden van gebruikersgegevens.
Voordat de gegevens worden gelezen, controleert de chunk-server de checksums van de chunk-blokken, die de door de gebruiker of een andere chunk-server opgevraagde gegevens kruisen. Dat wil zeggen, de chunk-server verspreidt geen beschadigde gegevens. Als de checksums niet overeenkomen, retourneert de chunk-server de fout naar de machine die het verzoek heeft ingediend en rapporteert deze aan de master. De gebruiker kan gegevens van een andere replica lezen en de master maakt nog een kopie van de gegevens van de andere replica. Daarna instrueert de master deze chunk-server om deze beschadigde replica te verwijderen.
Bij het toevoegen van nieuwe gegevens worden de checksums niet geverifieerd en worden er nieuwe checksums voor de blokken geschreven. Als de schijf beschadigd is, wordt deze gedetecteerd wanneer u deze gegevens probeert te lezen. Bij het schrijven vergelijkt de chunk-server alleen de eerste en de laatste blokken die de grenzen kruisen waarbinnen het schrijven plaatsvindt, aangezien sommige gegevens op deze blokken niet worden overschreven en het noodzakelijk is om hun integriteit te controleren. Twee hoofddoelen.

Transparantie van het netwerk.
Het belangrijkste doel is om dezelfde mogelijkheden te bieden voor toegang tot bestanden die via een computernetwerk worden verspreid als in timesharingsystemen op gecentraliseerde computers.

Hoge beschikbaarheid.
Een ander belangrijk doel is ervoor te zorgen dat hoge beschikbaarheid... Systeemfouten of kopieer- en onderhoudshandelingen mogen de bestanden niet onbeschikbaar maken.

Bestandsservice en bestandsserverconcept.

Bestandsservice is wat het bestandssysteem aan zijn klanten biedt, d.w.z. bestandssysteeminterface.
Bestanden server is een proces dat implementeert bestandsservice.

De gebruiker hoeft niet te weten hoeveel bestandsservers er zijn of waar ze zich bevinden.

Aangezien een bestandsserver meestal een normaal gebruikersproces is, kan het systeem verschillende bestandsservers hebben die verschillende services bieden (bijvoorbeeld UNIX-bestand service en MS-DOS-bestand onderhoud).

5.1 Architectuur van het gedistribueerde bestandssysteem

Een gedistribueerd systeem heeft meestal twee significant verschillende componenten: de bestandsservice zelf en de directoryservice.

5.1.1 Bestandsserverinterface

Voor elk bestandssysteem is de eerste fundamentele vraag wat een bestand is. Op veel systemen, zoals UNIX en MS-DOS, is het bestand niet: een geïnterpreteerde reeks bytes. op velen gecentraliseerde computers (IBM / 370)-bestand wordt weergegeven door een reeks records, die kan worden gespecificeerd door het nummer of de inhoud van een veld (sleutel). Aangezien de meeste gedistribueerde systemen zijn gebaseerd op de UNIX- en MS-DOS-omgeving, gebruiken ze de eerste versie van het bestandsconcept.

Het bestand heeft mogelijk: attributen(informatie over een bestand dat er geen deel van uitmaakt). Typische kenmerken zijn eigenaar, grootte, aanmaakdatum en toegangsrechten.

Een belangrijk aspect van het bestandsmodel is of bestanden kunnen: aanpassen na de schepping. Meestal kunnen ze dat, maar er zijn systemen met onveranderlijke bestanden. Dergelijke bestanden bevrijden ontwikkelaars van veel caching- en propagatieproblemen.

Bescherming geleverd door dezelfde mechanismen als in computers met één processor - mandaten en lijsten met toegangsrechten. Een machtiging is een soort ticket dat voor elk bestand aan de gebruiker wordt uitgereikt met een aanduiding van toegangsrechten. De lijst met toegangsrechten specificeert voor elk bestand een lijst van gebruikers met hun rechten. Het eenvoudigste schema met toegangsrechten is het UNIX-schema, waarin er drie soorten toegang zijn (lezen, schrijven, uitvoeren) en drie soorten gebruikers (eigenaar, leden van zijn groep en anderen).

De bestandsservice kan gebaseerd zijn op een van de twee modellen - het model Laden ontladen en modellen toegang op afstand ... In het eerste geval wordt het bestand overgedragen tussen de client (geheugen of schijven) en de server als geheel, en in het tweede geval biedt de bestandsservice veel bewerkingen (openen, sluiten, lezen en schrijven van een deel van het bestand, het verschuiven van de aanwijzer, controleren en wijzigen van attributen, enz.). De eerste benadering vereist een grote hoeveelheid geheugen op de client, wat ten koste gaat van het verplaatsen van onnodige delen van het bestand. In de tweede benadering functioneert het bestandssysteem op de server, de client heeft mogelijk geen schijven en veel geheugen.

5.1.2 Directory Server-interface

Biedt bewerkingen voor het maken en verwijderen van mappen, het benoemen en hernoemen van bestanden, het verplaatsen van bestanden van de ene map naar de andere.

Definieert het alfabet en de syntaxis voor namen. Voor specificatie: type informatie in het bestand gebruikt een deel van de naam (extensie) of een expliciet kenmerk.

Alle gedistribueerde systemen staan ​​toe dat mappen submappen bevatten - dit bestandssysteem heet hiërarchisch ... Bij sommige systemen kunt u verwijzingen of koppelingen maken naar willekeurige directory's die in een directory kunnen worden geplaatst. In dit geval kunt u niet alleen bomen bouwen, maar ook willekeurige grafieken (het verschil tussen beide is erg belangrijk voor gedistribueerde systemen, omdat in het geval van een grafiek het verwijderen van een link kan leiden tot het verschijnen van onbereikbare subbomen. moeilijk om dergelijke substructuren in gedistribueerde systemen te detecteren).

Een belangrijke beslissing bij het ontwerpen van een gedistribueerd bestandssysteem is of machines (of processen) de directoryhiërarchie wel of niet op dezelfde manier moeten zien. Nauw verwant aan deze oplossing is de aanwezigheid van een enkele hoofdmap (u kunt zo'n map hebben met submappen voor elke server).

Transparantie een naam geven.
Twee vormen van naamgevingstransparantie maken onderscheid tussen locatietransparantie (/ server / d1 / f1) en migratietransparantie (waarbij het wijzigen van de locatie van een bestand geen wijziging van de naam vereist).

    Er zijn drie benaderingen van naamgeving:

  • auto + pad;
  • externe bestandssystemen koppelen aan de lokale bestandshiërarchie;
  • de enige naamruimte die er op alle machines hetzelfde uitziet.
De laatste benadering is nodig om een ​​gedistribueerd systeem te realiseren dat eruitziet als een enkele computer, maar het is complex en vereist een zorgvuldig ontwerp.

Naamgeving op twee niveaus.
De meeste systemen gebruiken een of andere vorm van naamgeving op twee niveaus. Bestanden (en andere objecten) hebben symbolische namen voor gebruikers, maar kunnen ook interne binaire namen hebben voor gebruik door het systeem zelf. Bij de bewerking om een ​​bestand te openen, specificeert de gebruiker bijvoorbeeld een symbolische naam en ontvangt in ruil daarvoor een binaire naam, die hij bij alle andere bewerkingen met dit bestand gebruikt. De manier waarop binaire namen worden gevormd, verschilt van systeem tot systeem:

  • als er meerdere servers zijn die niet naar elkaar verwijzen (directories bevatten geen verwijzingen naar objecten van andere servers), dan kan de binaire naam hetzelfde zijn als in UNIX OS;
  • de naam kan verwijzen naar een server en een bestand;
  • Als binaire namen bij het opzoeken van symbolische namen, worden referenties geretourneerd die, naast toegangsrechten, ofwel het fysieke nummer van de machine met de server of het netwerkadres van de server en het bestandsnummer bevatten.
Als reactie op de symbolische naam kunnen sommige systemen meerdere binaire namen retourneren (voor het bestand en zijn duplicaten), wat de betrouwbaarheid van het bestand verbetert.

5.1.3 Semantiek voor het splitsen van bestanden

UNIX-semantiek
De natuurlijke semantiek van een computer met één processor is dat als een schrijfbewerking wordt gevolgd door een leesbewerking, het resultaat wordt bepaald door de laatste van de voorgaande schrijfbewerkingen. V gedistribueerd systeem deze semantiek is alleen gemakkelijk te bereiken als er één bestandsserver is en clients geen caches hebben. Semantiek wordt geschonden in de aanwezigheid van caches. Het is noodzakelijk om ofwel alle wijzigingen in de caches in de bestanden onmiddellijk weer te geven, ofwel de semantiek van het splitsen van bestanden te wijzigen.

onveranderlijke bestanden - een zeer radicale benadering van het veranderen van de semantiek van het splitsen van bestanden.
Er zijn slechts twee bewerkingen - maken en lezen. U kunt het oude bestand vervangen door het nieuwe bestand - d.w.z. u kunt mappen wijzigen. Als een proces een bestand leest en een ander het vervangt, dan kunt u het eerste proces het oude bestand laten wijzigen, terwijl andere processen mogelijk al met het nieuwe werken. Sessie semantiek Wijzigingen in een geopend bestand zijn alleen zichtbaar voor het proces (of machine) dat deze wijzigingen aanbrengt, en pas nadat het bestand is gesloten, worden ze zichtbaar voor andere processen (of machines). Wat gebeurt er als twee processen tegelijkertijd aan hetzelfde bestand werken - ofwel wordt het resultaat bepaald door het proces dat het bestand het laatst heeft afgesloten, of er kan alleen worden beweerd dat een van de twee versies van het bestand de huidige wordt.

Transacties
Het proces geeft een START TRANSACTIE-bewerking uit, wat aangeeft dat volgende bewerkingen moeten worden uitgevoerd zonder tussenkomst van andere processen. Vervolgens geeft het een reeks lees- en schrijfbewerkingen uit, eindigend met een END TRANSACTION-bewerking. Als meerdere transacties tegelijkertijd starten, garandeert het systeem dat het resultaat hetzelfde zal zijn als bij opeenvolgende uitvoering van transacties (in een niet-gedefinieerde volgorde). Een voorbeeld is bankieren.

5.2 Gedistribueerde bestandssystemen implementeren

De hierboven besproken aspecten van gedistribueerde bestandssystemen die zichtbaar zijn voor de gebruiker. Hieronder worden uitvoeringsaspecten besproken.

5.2.1 Bestanden gebruiken

Het is erg belangrijk om te begrijpen hoe het systeem zal worden gebruikt bij de start van de implementatie. Hier zijn de resultaten van enig onderzoek naar het gebruik van bestanden (statisch en dynamisch) in universiteiten. Het is erg belangrijk om de representativiteit van de bestudeerde gegevens te beoordelen.

  • de meeste bestanden zijn kleiner dan 10K (moeten volledig worden gedownload).
  • lezen komt veel vaker voor dan schrijven (caching).
  • lees- en schrijfbewerkingen zijn sequentieel, willekeurige toegang is zeldzaam (cache-ahead, read-over-read, popping after write moet worden gegroepeerd).
  • de meeste bestanden hebben een korte levensduur (maak een bestand in de client en bewaar het daar totdat het wordt vernietigd).
  • weinig bestanden worden gedeeld (clientcaching en sessiesemantiek).
  • er zijn verschillende klassen van bestanden met verschillende eigenschappen (u zou verschillende mechanismen in het systeem moeten hebben voor verschillende klassen).

5.2.2 Systeemstructuur

Of er een verschil tussen clients en servers? Er zijn systemen waarbij alle machines dezelfde software hebben en elke machine een bestandsservice kan bieden. Er zijn systemen waarin servers gewone gebruikersprocessen zijn en kunnen worden geconfigureerd om op dezelfde machine met clients of op verschillende te draaien. Er zijn systemen waarin clients en servers fundamenteel verschillende machines zijn in termen van hardware of software (bijvoorbeeld verschillende besturingssystemen vereisen).

Tweede vraag- of de bestandsserver en de directoryserver afzonderlijke servers moeten zijn of moeten worden gecombineerd tot één server. Door te partitioneren kunt u verschillende directoryservers (UNIX, MS-DOS) en één bestandsserver hebben. Consolidatie verlaagt de communicatiekosten.

Als de servers zijn opgesplitst en er verschillende directoryservers zijn voor verschillende substructuren, doet zich het volgende probleem voor. Als de eerstgenoemde server om de beurt toegang heeft tot alle volgende, is er een grote communicatie-overhead. Als de eerste server de rest van de naam doorgeeft aan de tweede, en dat aan de derde, enz., dan staat dit het gebruik van RPC niet toe.

Een mogelijke oplossing is om de hintcache te gebruiken. In dit geval moet de client, wanneer hij de oude mappen met binaire namen van de server ontvangt, voorbereid zijn om te falen vanaf de bestandsserver en opnieuw toegang te krijgen tot de directoryserver (de client is mogelijk niet de eindgebruiker!).

De laatste belangrijke vraag- of servers informatie over clients moeten opslaan.

Stateful-servers. Waardigheid.

  • Kortere berichten (binaire namen gebruiken open bestandstabel).
  • hogere efficiëntie (informatie over open bestanden kan worden opgeslagen in RAM).
  • informatieblokken kunnen van tevoren worden gelezen.
  • het is gemakkelijker om de geldigheid van een verzoek te verifiëren als er een status is (bijvoorbeeld door het nummer van het laatste verzoek op te slaan).
  • het vastleggen van bestanden is mogelijk.

Staatloze servers ... Waardigheid.

  • fout weerstand.
  • geen OPEN / DICHT-bewerkingen vereist.
  • geen geheugen nodig voor tabellen.
  • er is geen limiet op het aantal geopende bestanden.
  • geen probleem met een clientcrash.

5.2.3 Caching

In een client/server-systeem met geheugen en schijven zijn er vier mogelijke locaties voor het opslaan van bestanden of delen daarvan.

Ten eerste de opslag van bestanden op serverschijven. Er is geen coherentieprobleem aangezien er één kopie van het bestand bestaat. Het grootste probleem is efficiëntie, aangezien uitwisseling met een bestand zowel informatieoverdracht als uitwisseling met een schijf vereist.

Caching van servergeheugen. Twee problemen zijn het cachen van hele bestanden of schijfblokken en het uit de cache halen.

Communicatiekosten blijven.

Door in de computer van de klant te cachen, kunt u de communicatie verwijderen.

Clientschijfcaching biedt mogelijk geen voordeel ten opzichte van servergeheugencaching, en de complexiteit neemt aanzienlijk toe.

Laten we daarom de organisatie van caching in het geheugen van de klant eens nader bekijken.

  • caching in elk proces. (Het is goed als één proces actief met het bestand werkt - het opent en sluit het bestand vele malen, leest en schrijft, bijvoorbeeld in het geval van een databaseproces).
  • kernel-caching. (Kernel-overhead).
  • cachebeheer als een afzonderlijk proces. (De kernel is bevrijd van de bestandssysteemfuncties, maar het is moeilijk om het geheugen efficiënt te gebruiken op gebruikersniveau, vooral in het geval van virtueel geheugen. Het is mogelijk om pagina's te bevriezen om diskswaps te voorkomen).
De keuze voor de ene of de andere methode kan alleen worden beoordeeld door rekening te houden met de aard van applicaties en gegevens over de snelheid van processors, geheugen, schijven en netwerk.
    Cache-coherentie.
Doorschrijfalgoritme.
De noodzaak om te controleren of de informatie in de cache verouderd is. Schrijven veroorzaakt communicatie-overhead (MS-DOS).

Lui schrijfalgoritme.
Alle gewijzigde blokken worden met regelmatige tussenpozen naar het bestand geschreven. De efficiëntie is hoger, maar de semantiek is onbegrijpelijk voor de gebruiker (UNIX).

Algoritme voor het schrijven naar een bestand bij het sluiten van een bestand .
Implementeert de semantiek van sessies. Weinig erger geval wanneer twee processen op dezelfde computer een bestand openen, lezen, wijzigen in hun geheugen en terugschrijven naar het bestand.

Gecentraliseerd besturingsalgoritme .
Kan overweg met UNIX-semantiek, maar is inefficiënt, onbetrouwbaar en schaalt niet goed.

5.2.4 Reproductie

Het systeem kan een service bieden zoals het onderhouden van meerdere kopieën voor de gespecificeerde bestanden op verschillende servers. Belangrijkste doelen:
  1. Verbeter de betrouwbaarheid.
  2. Verhoog de beschikbaarheid (de crash van één server zorgt er niet voor dat de gedupliceerde bestanden niet beschikbaar zijn.
  3. Verdeel de belasting over meerdere servers.
  4. Expliciete veredeling (ondoorzichtig). Als reactie op het openen van een bestand krijgt de gebruiker meerdere binaire namen te zien die hij moet gebruiken om bestandsbewerkingen expliciet te dupliceren.
  5. Luie reproductie. Er wordt één kopie gemaakt op één server en vervolgens maakt het automatisch (in zijn vrije tijd) extra kopieën en zorgt ervoor dat deze worden onderhouden.
  6. Symmetrische reproductie. Alle bewerkingen worden gelijktijdig op meerdere servers aangeroepen en tegelijkertijd uitgevoerd.
Correctie protocollen.
Het is niet zo'n goede oplossing om gewoon berichten te verzenden met de bewerking om elke kopie te corrigeren, omdat in geval van ongelukken sommige kopieën ongecorrigeerd kunnen blijven. Er zijn twee algoritmen die dit probleem oplossen.
  1. Master kopie propagatie methode. Eén server wordt master verklaard en de rest - slaven. Alle wijzigingen aan het bestand worden naar de hoofdserver gestuurd. Het werkt eerst zijn lokale kopie bij en stuurt vervolgens correctie-instructies naar de slave-servers. Elke server kan het bestand lezen. Om te voorkomen dat de hoofdserver uitvalt totdat alle correcties zijn voltooid, slaat de hoofdserver, voordat de correctie van de hoofdkopie wordt uitgevoerd, op in stabiel geheugen correctie taak. Zwakte - uitval van de hoofdserver voorkomt correcties.
  2. Stem methode. Het idee is om te vragen om een ​​bestand van veel servers te lezen en te schrijven (schrijven - van allemaal!). Het verzoek kan goedkeuring krijgen van de helft van de servers plus één. In dit geval moet er overeenstemming zijn over het nummer van de huidige versie van het bestand. Dit aantal wordt bij elke bestandscorrectie met één verhoogd. Je kunt verschillende waarden gebruiken voor het leesquorum (Nr) en het schrijfquorum (Nw). In dit geval moet aan de verhouding Nr + Nw>N worden voldaan. Aangezien lezen een frequentere handeling is, is het normaal om Nr = 1 te nemen. In dit geval zijn echter alle servers vereist voor het schrijfquorum.

5.2.5 Voorbeeld: Sun Microsystems Network File System (NFS)

Oorspronkelijk op de markt gebracht door Sun Microsystem in 1985 voor gebruik op hun op UNIX gebaseerde werkstations. Het wordt momenteel ondersteund door andere leveranciers voor UNIX en andere besturingssystemen (inclusief MS-DOS). De interessante aspecten van NFS zijn architectuur, protocollen en implementatie. NFS-architectuur. Hiermee kunt u een willekeurige set clients en servers hebben op alle computers in een lokaal of grootschalig netwerk.

Elke server exporteert een aantal van zijn mappen zodat externe clients er toegang toe hebben. Tegelijkertijd worden directory's met al hun subdirectories geëxporteerd, d.w.z. eigenlijk subbomen. De lijst met geëxporteerde mappen wordt opgeslagen in speciaal bestand, waardoor ze automatisch kunnen worden geëxporteerd wanneer de server opstart.

De client opent de geëxporteerde mappen door ze te mounten. Als de client geen schijven heeft, kan hij mappen aankoppelen in de hoofdmap.

Als meerdere clients tegelijkertijd dezelfde directory hebben aangekoppeld, kunnen ze zonder extra inspanning bestanden in dezelfde directory delen. Eenvoud is een deugd van NFS. NFS-protocollen. Aangezien een van de doelen van NFS is om heterogene systemen te ondersteunen, kunnen clients en servers op verschillende computers draaien met: andere architectuur en verschillende besturingssystemen. Daarom is het noodzakelijk om strikte protocollen te hebben voor hun interactie. NFS heeft twee van dergelijke protocollen.
Het eerste protocol ondersteunt montage ... De client kan een DN-directorynaam (padnaam) naar de server sturen en toestemming vragen om deze te mounten. Waar de client de directory voor de server aankoppelt, maakt niet uit en wordt er daarom niet aan gerapporteerd. Als het pad correct is en de directory is gedefinieerd als exporteerbaar, retourneert de server de directorydescriptor naar de client. De descriptor bevat velden die op unieke wijze het computertype, de schijf, het i-vertex-nummer (UNIX OS-concept) voor deze directory identificeren, evenals informatie over toegangsrechten ervoor. Deze descriptor wordt door de client gebruikt bij volgende directorybewerkingen.

Veel clients koppelen de vereiste externe mappen automatisch bij het opstarten (met behulp van een UNIX-shellopdrachtprocedure).

De Sun (Solaris) versie van UNIX heeft zijn eigen speciale auto-mount modus. Aan elke lokale map kunnen meerdere externe mappen zijn gekoppeld. Wanneer een bestand wordt geopend dat niet in de lokale map staat, stuurt het besturingssysteem verzoeken naar alle servers (die eigenaar zijn van de opgegeven mappen). Wie het eerst antwoordt, de directory wordt gemount. Deze aanpak biedt zowel betrouwbaarheid als efficiëntie (wie vrijer is, zal eerder antwoorden). Dit veronderstelt dat alle alternatieve mappen identiek zijn. Aangezien NFS het repliceren van bestanden of mappen niet ondersteunt, wordt deze modus voor automatisch aankoppelen voornamelijk gebruikt voor mappen met programmacodes of andere zelden gewijzigde bestanden.

Het tweede protocol is voor toegang tot mappen en bestanden. Klanten sturen berichten om mappen te manipuleren, bestanden te lezen en te schrijven. U kunt bestandskenmerken krijgen. de meeste van systeemoproepen UNIX OS met uitzondering van OPEN en CLOSE. Om een ​​bestandsdescriptor met zijn symbolische naam te verkrijgen, wordt de LOOKUP-bewerking gebruikt, die verschilt van het openen van een bestand doordat er geen interne tabellen worden gemaakt. Servers in NFS zijn dus staatloos. Daarom wordt een speciaal mechanisme gebruikt om het bestand vast te leggen.

NFS gebruikt het UNIX-beveiligingsmechanisme. In de eerste versies bevatten alle verzoeken een identificatie van de gebruiker en zijn groep (voor het controleren van toegangsrechten). Meerdere jaren van systeemwerking hebben de zwakte van deze aanpak aangetoond. Er wordt nu een cryptografisch mechanisme met openbare sleutel gebruikt om de legitimiteit van elk verzoek en elke reactie te valideren. De gegevens zijn niet versleuteld.

Alle sleutels die worden gebruikt voor toegangscontrole worden ondersteund door een speciale service (en servers) - netwerk informatie Service(NIS). Door paren (sleutel, waarde) op te slaan, zorgt de service voor de uitgifte van de codewaarde bij correcte bevestiging van de sleutels. Bovendien biedt het toewijzing van machinenamen aan hun netwerkadressen en andere toewijzingen. NIS-servers gebruiken een master-slave-schema om propagatie (luie propagatie) te implementeren. NFS-implementatie(XDR - Externe gegevensweergave)

Het doel van de virtuele bestandssysteemlaag is om voor elk geopend bestand een tabelrij (v-node) te onderhouden die lijkt op de UNIX i-node. Met deze lijn kunt u onderscheid maken: lokale bestanden van op afstand. Voor verwijderde bestanden, alles Nodige informatie opgeslagen in een speciale r-node in de NFS-client waarnaar wordt verwezen door de v-node. De server heeft geen tafels.

Informatieoverdrachten tussen de client en de NFS-server worden uitgevoerd in 8K-blokken (voor efficiëntie).

Er zijn twee caches - de datacache en de cache met bestandsattributen (ze worden vaak gebruikt, de NFS-ontwikkelaars gingen uit van een beoordeling van 90%). Geïmplementeerde luie schrijfsemantiek - het onderwerp van NFS-kritiek.

Er is ook een hintcache om het verkrijgen van een v-vertex met een symbolische naam te versnellen. Bij gebruik van de legacy-hint zal de NFS-client contact opnemen met de NFS-server en zijn cache bijwerken (de gebruiker zou zich hiervan niet bewust moeten zijn).

Laboratorium voor parallelle informatietechnologieën, Research Computing Center, Staatsuniversiteit van Moskou

Het Distributed File System (DFS) is geconfigureerd op het besturingssysteem Windows 2000 Server ( ControlepaneelBeheer - DFS gedistribueerd bestandssysteem) en stelt u in staat bestandsbronnen op verschillende computers te combineren in één naamruimte. Dus in plaats van een netwerk van veel machines, ziet de gebruiker een logische naamstructuur die is gekoppeld aan gedeelde bronnen.

DFS-voordelen:

· De mogelijkheid om gedeelde bronnen op verschillende servers in het netwerk logisch weer te geven;

· Handig volumebeheer - een share die deel uitmaakt van een DFS-volume kan worden losgekoppeld zonder dat dit gevolgen heeft voor de rest van de naamruimte;

· Beschikbaarheid van een grafische administratietool;

· De mogelijkheid om fouttolerante opslagschema's te organiseren - één logische naam kan overeenkomen met meerdere kopieën van de bron (replica's), waarvan de aanwezigheid transparant is voor de gebruiker;

· Evenwichtige belasting van gedeelde netwerkbronnen door één bronnaam te associëren met verschillende replica's van deze bron;

· Transparantie van de overeenkomst tussen de logische presentatie van gegevens en hun fysieke locatie - gebruikers zijn niet op de hoogte van veranderingen in de fysieke locatie van de bron;

· Integratie met het Windows 2000-beveiligingsmodel — er worden uniforme gebruikersaccounts gebruikt;

· Intelligente gegevenscaching aan de clientzijde;

· De mogelijkheid om te communiceren met andere netwerkbestandssystemen.

De noodzaak om een ​​gedistribueerd bestandssysteem in te zetten kan ontstaan ​​wanneer er meerdere bestandsservers op het netwerk zijn of, indien nodig, veel gebruikers bieden permanente toegang naar meerdere gedeelde bronnen.

Het startpunt voor logische DFS-boomnamen is: wortel gedistribueerd bestandssysteem, waarvoor u een share op de server moet specificeren. Alle andere DFS-namen bevinden zich op het volgende hiërarchische niveau. Gedeelde computernetwerkbronnen in de DFS-structuur worden weergegeven door logische namen, die op de volgende plaats verschijnen in de volledig gekwalificeerde naam van de bron op het netwerk: \\ Servernaam \ Logische_DFS_Name \ Pad \ Bestand.



Met DFS kunnen maximaal 32 alternatieve gedeelde bronnen (replica's) worden toegewezen aan een enkele logische naam. Als de replica's binnen zijn NTFS-partitie 5.0 op een gedistribueerd bestandssysteem gebouwd op Windows-servers 2000 en geïntegreerd met Active Directory, kunt u automatische synchronisatie voor hen configureren - gegevensafstemming (replicatie). In andere gevallen moet replica-afstemming worden uitgevoerd handmatig.

De elementen systeemintegratie

in gedistribueerd computersystemen of openbare computernetwerken zoals internet, er zijn veel interessante objecten zoals databases, printers, faxservers, applicaties, gebruikers. Gebruikers moeten deze objecten kunnen vinden en gebruiken. Beheerders moeten het gebruik van deze objecten beheren.

Directory-service

De catalogus heet informatiebron gebruikt om informatie over interessante objecten op te slaan. Op bestandssystemen slaat een directory informatie over bestanden op.

Een directoryservice verschilt van een directory doordat het zowel een gegevensbron is als een service waarmee gebruikers die gegevens kunnen openen en gebruiken.

Een directoryservice kan het volgende doen:

· Handhaaf het beveiligingsniveau dat door beheerders is gedefinieerd om gegevens te beschermen tegen ongeoorloofde toegang.

· Distribueer de catalogus naar verschillende computers op het netwerk.

Kopieer de directory om er toegang toe te verlenen meer gebruikers en vergroot de bescherming van het netwerk tegen storingen.

· Verdeel de directory in verschillende secties om de mogelijkheid te bieden om een ​​groot aantal objecten op te slaan.

Directoryservice is zowel een administratief hulpmiddel als een hulpmiddel voor de eindgebruiker. Naarmate het aantal objecten op het netwerk groeit, neemt het belang van de directoryservice toe. De directoryservice is de as waar een groot gedistribueerd systeem om draait.

Active Directory Is een directoryservice die bij het besturingssysteem Windows 2000/2003 Server wordt geleverd. Het is een duidelijk voorbeeld van systeemintegratie - het breidt de mogelijkheden van reeds bestaande directoryservices uit naar: Windows gebaseerd en voegt compleet nieuwe functies toe.

Active Directory biedt beveiliging, distributie, partitionering en replicatie. Het is ontworpen om te worden geïnstalleerd op een systeem van elke grootte - van een enkele server met enkele honderden sites tot een systeem van duizenden servers met miljoenen sites. Active Directory biedt veel nieuwe functies die het gemakkelijker maken om grote hoeveelheden gegevens te vinden en te beheren en tijd te besparen voor zowel beheerders als eindgebruikers.

Active Directory vormt een naamruimte waarin de naam van een object in de directory wordt omgezet in het object zelf.

Een voorwerp Is een afzonderlijke benoemde set attributen die iets specifieks vertegenwoordigen, bijvoorbeeld een gebruiker, een printer, een toepassing.

attributen bevatten gegevens die de entiteit beschrijven die wordt geïdentificeerd door het catalogusobject. Gebruikersattributen kunnen bijvoorbeeld zijn voornaam, achternaam en e-mailadres bevatten.

Objectklasse definieert het type informatie in Active Directory voor instanties (objecten) van deze klasse... Daarom behoort elk object, volgens minstens, naar een enkele objectklasse, een familie van objecten met bepaalde gemeenschappelijke kenmerken.

Schema Active Directory-directoryservice wordt geïmplementeerd als een set objectklasse-instanties die in een directory zijn opgeslagen. Daarom is een schema een verzameling (matrix) van alle attributen en klassen.

container lijkt op een object omdat het attributen heeft en deel uitmaakt van de Active Directory-naamruimte. Maar hij, in tegenstelling tot een object, vertegenwoordigt niet iets concreets. Het is slechts een "wrapper" voor een groep objecten en andere containers.

Termijn hout gebruikt om een ​​hiërarchie van objecten en containers te beschrijven. De hoekpunten van de boom zijn meestal objecten. De boomknooppunten (de punten waar de boom vertakt) zijn containers. De boom toont de relatie tussen objecten of het pad van het ene object naar het andere. Een eenvoudige map is een container. Computer netwerk of domein zijn ook containers. Een aaneengesloten substructuur is een aangrenzend pad in de structuur, inclusief alle bestanddelen van elke container die in dit pad is opgenomen (Figuur 3.5).

Afb 3.5. Doorlopende substructuur van bestandsdirectory

De naam identificeert elk object in de Active Directory-adreslijstservice. Namen zijn van twee soorten: DN-naam en relatieve DN-naam.

Uitgesproken naam(DN - DN-naam) definieert het domein dat het object bevat, evenals het volledige pad door de containerhiërarchie dat naar dit object leidt. Een typische DN kan er als volgt uitzien:

/ O = Internet / DC = COM / DC = Microsoft / CN = Gebruikers / CN = James Smith

Deze DN identificeert het gebruikersobject "James Smith" in het domein Microsoft.com. Hier staat CN voor een algemene naam. (afb. 3.6)

Rijst. 3.6. Voornaamste naam plotten

Relatieve voorname naam De (RDN - Relative Distinguished Name) van een object is het deel van de naam dat een attribuut is van het object zelf. In het vorige voorbeeld zou de RDN van het gebruikersobject "James Smith" CN = James Smith zijn. De RDN van zijn bovenliggende entiteit is CN = Gebruikers.

Met Active Directory kan een complexe bedrijfsomgeving efficiënt worden uitgevoerd door de volgende mogelijkheden te bieden.

· Eenmalige aanmelding online... Gebruikers kunnen met één gebruikersnaam en wachtwoord inloggen op het netwerk en toch toegang hebben tot alle netwerkbronnen (servers, printers, applicaties, bestanden, enz.), ongeacht hun locatie op het netwerk.

· Informatiebeveiliging... In Active Directory ingebouwde verificatie- en brontoegangscontroles bieden gecentraliseerde bescherming voor uw netwerk. Toegangsrechten kunnen niet alleen voor elk object in de catalogus worden gedefinieerd, maar ook voor elke eigenschap (attribuut) van het object.

· Gecentraliseerd beheer... Beheerders kunnen alle bedrijfsresources centraal beheren. Routinetaken administratie hoeft niet te worden herhaald voor meerdere netwerkobjecten.

· Beheer met behulp van groepsbeleid. Wanneer de computer opstart of een gebruiker zich aanmeldt bij het systeem, wordt voldaan aan de vereisten van groepsbeleid; hun instellingen worden opgeslagen in Group Policy Objects (GPO's) en zijn "gekoppeld" aan sites, domeinen of organisatie-eenheden. Groepsbeleid definieert bijvoorbeeld toegangsrechten tot: verschillende objecten catalogus of bronnen, evenals vele andere "regels" van het werk in het systeem.

· Flexibiliteit van veranderingen... Een directory service volgt flexibel veranderingen in de structuur van een bedrijf of organisatie. Tegelijkertijd is de reorganisatie van de directory niet ingewikkeld en kan deze worden vereenvoudigd. Bovendien kan de directoryservice worden gekoppeld aan internet om te communiceren met zakelijke partners en e-commerce te ondersteunen.

· DNS-integratie... Active Directory is nauw verwant aan DNS. Hiermee wordt eenheid bereikt in de naamgeving van middelen. lokaal netwerk en globaal netwerk Internet, waardoor het gemakkelijker wordt om het netwerk van de gebruiker met internet te verbinden. Active Directory gebruikt DNS als locatieservice. Windows 2000/2003-domeinnamen zijn DNS-domeinnamen.

· Uitbreidbaarheid van directory... Beheerders kunnen nieuwe objectklassen toevoegen aan het catalogusschema of nieuwe kenmerken toevoegen aan bestaande klassen.

· schaalbaarheid... Active Directory kan een enkel domein, meerdere domeinen, een enkele domeincontroller of meerdere domeincontrollers omvatten - dat wil zeggen, het voldoet aan de behoeften van netwerken van elke omvang. Meerdere domeinen kunnen worden gekoppeld aan een domeinstructuur en meerdere domeinbomen kunnen worden gekoppeld aan een forest.

· Replicatie van informatie... Active Directory gebruikt replicatie van service-informatie in een multi-masterschema, waarmee u de directory op elke domeincontroller kunt wijzigen. Meerdere domeincontrollers bieden fouttolerantie en netwerktaakverdeling.

· Flexibiliteit van catalogusaanvragen... Gebruikers en netwerkbeheerders kunnen snel objecten op het netwerk vinden met behulp van objecteigenschappen (bijvoorbeeld gebruikersnaam of e-mailadres, printertype of -locatie, enz.). Dit kan in het bijzonder worden gedaan met het commando Start met zoeken map Mijn netwerkbuurt of snap Active Directorygebruikers en computers De zoekprocedure is geoptimaliseerd met behulp van de globale catalogus.

· Standaard interfaces... Voor applicatieontwikkelaars bieden directoryservices toegang tot alle mogelijkheden (tools) van de directory en ondersteunen ze geaccepteerde standaarden en programmeerinterfaces (API's). De directoryservice is nauw verbonden met het besturingssysteem om duplicatie in toepassingsprogramma's te voorkomen functionaliteit systemen, zoals beveiligingsapparatuur.

De belangrijkste componenten van elke directoryservice is een database met: Nodige informatie, en een of meer protocollen voor het leveren van gegevens aan gebruikers. Active Directory biedt opslag voor alle openbaar beschikbare informatie. Net als andere directoryservices biedt Active Directory een mechanisme voor het opslaan van informatie en protocollen om toegang te krijgen.

We kunnen stellen dat de Active Directory-service "op drie pijlers staat":

X.500 standaard

DNS (Domeinnaamservice)

· LDAP-protocol(Lichtgewicht Directory Access Protocol)

Active Directory implementeert gedeeltelijk het datamodel beschreven door de X.500-standaard. Traditioneel in TCP / IP-netwerken DNS-service wordt met name gebruikt om domeincontrollers te vinden, en dankzij het LDAP-protocol kunnen clients in Actieve map Directory-objecten en toegang tot hun attributen.

Laten we, om de structuur van Active Directory te begrijpen, eerst kijken naar de verschillen tussen Windows 2000 en eerdere serverversies. besturingssystemen Ramen. Windows 2000-computers zijn nog steeds gegroepeerd in domeinen. Domeinen zijn bekende oplossing voor groepsbeheer, waarbij elke gebruiker rekening in een bepaald domein. In tegenstelling tot Windows NT Server 4.0, waar domeinen eenvoudige tekenreeksnamen (NetBIOS-namen) kregen, moet in een Windows 2000 Server-omgeving elk domein echter een naam hebben die de naamgevingsconventies van het Domain Name System (DNS) volgt. Een domein met de naam NetBIOS MainOffice kan bijvoorbeeld een nieuwe naam krijgen, zoals mainoffice.company.com, wanneer deze wordt bijgewerkt.

In elk domein moeten een of meer computers als domeincontroller fungeren. In een Windows 2000 Server-omgeving bevat elke domeincontroller een volledige kopie van de database Gegevens actief Directory van dit domein.

Active Directory gebruikt de zogenaamde Extended Storage Engine (ESE) en twee verschillende protocollen die zorgen voor communicatie tussen clients en de database.

Om een ​​domeincontroller te lokaliseren, gebruikt de client het protocol beschreven in DNS, de "standaard" directoryservice die momenteel wordt gebruikt voor TCP / IP-netwerken.

De client gebruikt het Lightweight Directory Access Protocol (LDAP) om toegang te krijgen tot gegevens in Active Directory (Figuur 3.7).

Afb. 3.7. Toegang tot gegevens met LDAP

Na gebruik DNS vereist er is een domeincontroller gedetecteerd die LDAP gebruikt om toegang te krijgen tot Active Directory-gegevens. LDAP draait bovenop TCP/IP en definieert - zoals de naam van het protocol doet vermoeden - hoe clients toegang krijgen tot de directory.

Naast het toegangsmechanisme implementeert dit protocol naamgevingsconventies voor informatie in de directory, in uitdrukkelijk beschrijving van de structuur van deze informatie. Voor de klant worden alle gegevens die zijn opgeslagen in de LDAP-database gepresenteerd in de vorm van een hiërarchische boomstructuur. Elk boomknooppunt (object of element) kan een container of een blad zijn. Het verschil tussen beide is vrij duidelijk: containers kunnen andere elementen bevatten, maar bladeren niet.

Elk element (container of leaf) is een objectklasse die de attributen (ook wel eigenschappen genoemd) van dat element definieert. Omdat zowel containers als bladeren attributen hebben, wordt de informatie die is opgeslagen in de directorystructuur over alle knooppunten verdeeld.

Het type informatie (objectklassen en attribuuttypen) in een bepaalde Active Directory-database wordt bepaald door het schema dat voor die map is gedefinieerd. In Active Directory wordt het schema van elke map weergegeven door items die rechtstreeks in de map zelf zijn opgeslagen. Microsoft definieert een standaardschema, maar gebruikers en ontwikkelaars softwaretools kan nieuwe klassen en typen attributen toevoegen. Het directoryschema wijzigen - nuttige kans die zeer voorzichtig moeten worden gebruikt, aangezien dergelijke wijzigingen zeer aanzienlijke gevolgen kunnen hebben.