Ceph ist ein Objektspeicher, mit dem ein Failovercluster erstellt werden kann. Trotzdem passieren Fehler. Jeder, der mit Ceph arbeitet, kennt die Legende ĂŒber CloudMouse oder Rosreestr. Leider ist es nicht ĂŒblich, negative Erfahrungen mit uns zu teilen, die Ursachen von Fehlern werden meistens vertuscht und erlauben zukĂŒnftigen Generationen nicht, aus den Fehlern anderer zu lernen.
Nun, lassen Sie uns einen Testcluster einrichten, der jedoch dem realen nahe kommt, und die Katastrophe anhand von Knochen analysieren. Wir werden alle LeistungseinbuĂen messen, Speicherlecks finden und den Service-Wiederherstellungsprozess analysieren. Und all dies unter der FĂŒhrung von Artemy Kapitula, der fast ein Jahr lang Fallstricke studierte, fĂŒhrte dazu, dass die Clusterleistung bei Null versagte und die Latenz nicht auf unanstĂ€ndige Werte sprang. Und ich habe eine rote Grafik, die viel besser ist.

Als nÀchstes finden Sie eine Video- und Textversion eines der besten Berichte von
DevOpsConf Russia 2018.
Ăber den Sprecher: Artemy Kapitula Systemarchitekt RCNTEC. Das Unternehmen bietet IP-Telefonielösungen an (Zusammenarbeit, Organisation eines Remote-BĂŒros, softwaredefinierte Speichersysteme und Energieverwaltungs- / Verteilungssysteme). Das Unternehmen ist hauptsĂ€chlich im Unternehmensbereich tĂ€tig und daher auf dem DevOps-Markt nicht sehr bekannt. Dennoch wurden einige Erfahrungen mit Ceph gesammelt, das in vielen Projekten als Grundelement der Speicherinfrastruktur verwendet wird.
Ceph ist ein softwaredefiniertes Repository mit vielen Softwarekomponenten.
Im Diagramm:
- Die obere Ebene ist das interne Clusternetzwerk, ĂŒber das der Cluster selbst kommuniziert.
- Die untere Ebene - eigentlich Ceph - ist eine Reihe von internen Ceph-DĂ€monen (MON, MDS und OSD), die Daten speichern.
In der Regel werden alle Daten repliziert. Im Diagramm habe ich absichtlich drei Gruppen mit jeweils drei OSDs ausgewÀhlt, und jede dieser Gruppen enthÀlt normalerweise eine Datenreplik. Infolgedessen werden Daten in drei Kopien gespeichert.
Ein ĂŒbergeordnetes Clusternetzwerk ist das Netzwerk, ĂŒber das Ceph-Clients auf Daten zugreifen. Ăber sie kommunizieren Clients mit dem Monitor, mit MDS (wer benötigt es) und mit OSD. Jeder Client arbeitet mit jedem OSD und mit jedem Monitor unabhĂ€ngig. Daher weist das
System keinen einzigen Fehlerpunkt auf , was sehr erfreulich ist.
Kunden
â S3-Kunden
S3 ist eine API fĂŒr HTTP. S3-Clients arbeiten ĂŒber HTTP und stellen eine Verbindung zu RGW-Komponenten (Ceph Rados Gateway) her. Sie kommunizieren fast immer mit einer Komponente ĂŒber ein dediziertes Netzwerk. Dieses Netzwerk (ich habe es S3-Netzwerk genannt) verwendet nur HTTP, Ausnahmen sind selten.
â Hypervisor mit virtuellen Maschinen
Diese Kundengruppe wird hĂ€ufig verwendet. Sie arbeiten mit Monitoren und mit OSD, von denen sie allgemeine Informationen ĂŒber den Clusterstatus und die Datenverteilung erhalten. FĂŒr Daten gehen diese Clients ĂŒber das öffentliche Cluster-Netzwerk direkt zu OSD-Daemons.
â RBD-Clients
Es gibt auch physische BR-Metall-Hosts, bei denen es sich normalerweise um Linux handelt. Sie sind RBD-Clients und erhalten Zugriff auf Images, die in einem Ceph-Cluster gespeichert sind (Images der virtuellen Maschine).
â CephFS-Clients
Die vierte Gruppe von Clients, die noch nicht viele haben, aber von wachsendem Interesse sind, sind CephFS-Cluster-Dateisystem-Clients. Das CephFS-Clustersystem kann gleichzeitig von vielen Knoten bereitgestellt werden, und alle Knoten erhalten Zugriff auf dieselben Daten, wobei sie mit jedem OSD arbeiten. Das heiĂt, es gibt keine Gateways als solche (Samba, NFS und andere). Das Problem ist, dass ein solcher Client nur Linux und eine ziemlich moderne Version sein kann.

Unser Unternehmen arbeitet auf dem Unternehmensmarkt, und dort wird der Ball von ESXi, HyperV und anderen regiert. Dementsprechend muss der Ceph-Cluster, der irgendwie im Unternehmenssektor verwendet wird, die entsprechenden Techniken unterstĂŒtzen. Dies war uns bei Ceph nicht genug, daher mussten wir den Ceph-Cluster mit unseren Komponenten verfeinern und erweitern und tatsĂ€chlich etwas mehr als Ceph aufbauen, unsere eigene Plattform zum Speichern von Daten.
DarĂŒber hinaus arbeiten Kunden im Unternehmenssektor nicht unter Linux, aber die meisten von ihnen, Windows, gelegentlich Mac OS, können nicht selbst zum Ceph-Cluster wechseln. Sie mĂŒssen durch eine Art Gateway laufen, die in diesem Fall zu EngpĂ€ssen werden.
Wir mussten alle diese Komponenten hinzufĂŒgen und erhielten einen etwas breiteren Cluster.

Wir haben zwei zentrale Komponenten: die
SCSI-Gateways-Gruppe , die ĂŒber FibreChannel oder iSCSI den Zugriff auf Daten in einem Ceph-Cluster ermöglicht. Diese Komponenten werden verwendet, um HyperV und ESXi mit einem Ceph-Cluster zu verbinden. PROXMOX-Kunden arbeiten immer noch auf ihre eigene Art und Weise - ĂŒber RBD.
Wir lassen Dateiclients nicht direkt in das Clusternetzwerk, da ihnen mehrere fehlertolerante Gateways zugewiesen sind. Jedes Gateway bietet Zugriff auf das Dateiclustersystem ĂŒber NFS, AFP oder SMB. Dementsprechend erhĂ€lt fast jeder Client, sei es Linux, FreeBSD oder nicht nur ein Client, Server (OS X, Windows), Zugriff auf CephFS.
Um all dies zu bewĂ€ltigen, mussten wir tatsĂ€chlich unser eigenes Ceph-Orchester und alle unsere Komponenten entwickeln, die dort zahlreich sind. Aber jetzt darĂŒber zu sprechen macht keinen Sinn, da dies unsere Entwicklung ist. Die meisten werden sich wahrscheinlich fĂŒr den "nackten" Ceph selbst interessieren.
Ceph wird hĂ€ufig verwendet, und gelegentlich treten Fehler auf. Sicher kennt jeder, der mit Ceph arbeitet, die Legende ĂŒber CloudMouse. Dies ist eine schreckliche urbane Legende, aber dort ist nicht alles so schlimm, wie es scheint. Es gibt ein neues MĂ€rchen ĂŒber Rosreestr. Ceph drehte sich ĂŒberall und ĂŒberall versagte es. Irgendwo endete es tödlich, irgendwo gelang es, die Konsequenzen schnell zu beseitigen.
Leider ist es fĂŒr uns nicht ĂŒblich, negative Erfahrungen auszutauschen, jeder versucht, die relevanten Informationen zu verbergen. AuslĂ€ndische Unternehmen sind etwas offener, insbesondere DigitalOcean (ein bekannter Anbieter, der virtuelle Maschinen vertreibt) erlitt fast einen Tag lang einen Ceph-Ausfall. Es war der 1. April - ein wunderbarer Tag! Sie haben einige der Berichte veröffentlicht, ein kurzes Protokoll unten.

Die Probleme begannen um 7 Uhr morgens, um 11 Uhr verstanden sie, was geschah, und begannen, den Fehler zu beseitigen. Zu diesem Zweck haben sie zwei Befehle zugewiesen: Einer lief aus irgendeinem Grund um die Server herum und installierte dort Speicher, und der zweite startete aus irgendeinem Grund manuell einen Server nach dem anderen und ĂŒberwachte sorgfĂ€ltig alle Server. Warum? Wir sind alle daran gewöhnt, alles mit einem Klick einzuschalten.
Was passiert grundsĂ€tzlich in einem verteilten System, wenn es effektiv aufgebaut ist und fast an der Grenze seiner FĂ€higkeiten arbeitet?Um diese Frage zu beantworten, mĂŒssen wir uns ansehen, wie der Ceph-Cluster funktioniert und wie der Fehler auftritt.

Ceph-Fehlerszenario
Zuerst funktioniert der Cluster gut, alles lĂ€uft gut. Dann passiert etwas, wonach die OSD-DĂ€monen, in denen die Daten gespeichert sind, den Kontakt zu den zentralen Komponenten des Clusters (Monitore) verlieren. Zu diesem Zeitpunkt tritt eine ZeitĂŒberschreitung auf und der gesamte Cluster erhĂ€lt einen Einsatz. Der Cluster bleibt eine Weile stehen, bis er erkennt, dass etwas mit ihm nicht stimmt, und korrigiert danach sein internes Wissen. Danach wird der Kundenservice bis zu einem gewissen Grad wiederhergestellt, und der Cluster arbeitet wieder in einem herabgesetzten Modus. Und das Lustige ist, dass es schneller funktioniert als im normalen Modus - das ist eine erstaunliche Tatsache.
Dann beseitigen wir den Fehler. Angenommen, wir haben den Strom verloren, das Rack wurde komplett abgeschnitten. Elektriker kamen angerannt, sie alle restauriert, sie versorgten die Server mit Strom, die Server wurden eingeschaltet und dann
beginnt der SpaĂ .
Jeder ist daran gewöhnt, dass bei einem Serverausfall alles schlecht wird und beim Einschalten des Servers alles gut wird. Hier ist alles völlig falsch.
Der Cluster stoppt praktisch, fĂŒhrt die primĂ€re Synchronisation durch und beginnt dann eine reibungslose, langsame Wiederherstellung, wobei er allmĂ€hlich in den normalen Modus zurĂŒckkehrt.

Oben sehen Sie eine grafische Darstellung der Ceph-Clusterleistung, wenn sich ein Fehler entwickelt. Bitte beachten Sie, dass hier genau die Intervalle, ĂŒber die wir gesprochen haben, sehr deutlich nachvollzogen werden:
- Normalbetrieb bis ca. 70 Sekunden;
- Ausfall fĂŒr eine Minute bis ca. 130 Sekunden;
- Ein Plateau, das merklich höher als der normale Betrieb ist, ist die Arbeit von degradierten Clustern;
- Dann schalten wir den fehlenden Knoten ein - dies ist ein Trainingscluster, es gibt nur 3 Server und 15 SSDs. Wir starten den Server irgendwo um 260 Sekunden.
- Der Server wurde eingeschaltet und trat in den Cluster ein - IOPS'y fiel.
Versuchen wir herauszufinden, was dort wirklich passiert ist. Das erste, was uns interessiert, ist ein Eintauchen ganz am Anfang des Diagramms.
OSD-Fehler
Stellen Sie sich ein Beispiel fĂŒr einen Cluster mit drei Racks mit jeweils mehreren Knoten vor. Wenn das linke Rack ausfĂ€llt, pingen sich alle OSD-Daemons (keine Hosts!) In einem bestimmten Intervall mit Ceph-Nachrichten. Wenn mehrere Nachrichten verloren gehen, wird eine Nachricht an den Monitor gesendet: "Ich, OSD so und so, kann OSD so und so nicht erreichen."

In diesem Fall werden Nachrichten normalerweise nach Hosts gruppiert. Wenn also zwei Nachrichten von verschiedenen OSDs auf demselben Host eintreffen, werden sie zu einer Nachricht zusammengefasst. Wenn OSD 11 und OSD 12 melden, dass sie OSD 1 nicht erreichen können, wird dies als Host 11 interpretiert, der ĂŒber OSD 1 beschwert ist. Wenn OSD 21 und OSD 22 gemeldet wurden, wird dies als Host 21 interpretiert, der mit OSD 1 unzufrieden ist Danach berĂŒcksichtigt der Monitor, dass sich OSD 1 im Status "Down" befindet, und benachrichtigt alle Mitglieder des Clusters (durch Ăndern der OSD-Zuordnung). Die Arbeit wird im herabgesetzten Modus fortgesetzt.

Hier ist also unser Cluster und das ausgefallene Rack (Host 5 und Host 6). Wir schalten Host 5 und Host 6 ein, als die Stromversorgung erschien, und ...
Cephs inneres Verhalten
Und jetzt ist der interessanteste Teil, dass wir mit der
anfĂ€nglichen Datensynchronisation beginnen . Da es viele Replikate gibt, mĂŒssen diese synchron sein und dieselbe Version haben. Beim Starten des OSD-Starts:
- OSD liest die verfĂŒgbaren Versionen und den verfĂŒgbaren Verlauf (pg_log - um die aktuellen Versionen von Objekten zu ermitteln).
- Danach wird festgelegt, auf welchem ââOSD die neuesten Versionen von herabgesetzten Objekten (missing_loc) aktiviert sind und welche sich dahinter befinden.
- Wenn die RĂŒckwĂ€rtsversionen gespeichert sind, ist eine Synchronisierung erforderlich, und neue Versionen können als Referenz zum Lesen und Schreiben von Daten verwendet werden.
Es wird eine Geschichte verwendet, die von allen OSDs gesammelt wird, und diese Geschichte kann ziemlich viel sein; Der tatsÀchliche Standort der Gruppe von Objekten im Cluster, in dem sich die entsprechenden Versionen befinden, wird bestimmt. Wie viele Objekte sich im Cluster befinden, wie viele DatensÀtze erhalten werden, wenn der Cluster lange Zeit im herabgesetzten Modus gestanden hat, ist die Geschichte lang.
Zum Vergleich: Die typische GröĂe eines Objekts bei der Arbeit mit einem RBD-Bild betrĂ€gt 4 MB. Wenn wir in Löschcode arbeiten - 1 MB. Wenn wir eine 10-TB-Festplatte haben, erhalten wir eine Million Megabyte-Objekte auf der Festplatte. Wenn wir 10 Festplatten auf dem Server haben, gibt es bereits 10 Millionen Objekte. Wenn 32 Festplatten vorhanden sind (wir bauen einen effizienten Cluster auf, wir haben eine enge Zuordnung), mĂŒssen 32 Millionen Objekte im Speicher gehalten werden. DarĂŒber hinaus werden Informationen zu jedem Objekt in mehreren Kopien gespeichert, da jede Kopie angibt, dass sie an dieser Stelle in dieser Version und in dieser - in dieser - liegt.
Es stellt sich heraus, dass sich eine groĂe Datenmenge im RAM befindet:
- Je mehr Objekte vorhanden sind, desto gröĂer ist die Historie von missing_loc.
- je mehr PG - desto mehr pg_log und OSD-Map;
AuĂerdem:
- je gröĂer die FestplattengröĂe ist;
- je höher die Dichte (die Anzahl der Festplatten in jedem Server);
- Je höher die Belastung des Clusters und desto schneller Ihr Cluster.
- je lÀnger das OSD inaktiv ist (im Offline-Status);
Mit anderen Worten, je
steiler der von uns erstellte Cluster ist und je lÀnger der Teil des Clusters nicht reagiert, desto mehr RAM wird beim Start benötigt .
Extreme Optimierungen sind die Wurzel allen Ăbels
"... und der schwarze OOM kommt nachts zu den bösen Jungs und MÀdchen und tötet alle Prozesse links und rechts ab."
Stadt Sysadmin Legende
RAM benötigt also viel, der Speicherverbrauch steigt (wir haben sofort mit einem Drittel des Clusters begonnen), und das System kann theoretisch in SWAP integriert werden, wenn Sie es natĂŒrlich erstellt haben. Ich denke, es gibt viele Leute, die SWAP fĂŒr schlecht halten und es nicht schaffen: âWarum? Wir haben viel GedĂ€chtnis! â Dies ist jedoch der falsche Ansatz.
Wenn die SWAP-Datei nicht im Voraus erstellt wurde, da entschieden wurde, dass Linux effizienter arbeitet, wird es frĂŒher oder spĂ€ter zu einem Speicherkiller (OOM-Killer) kommen. Und nicht zu der Tatsache, dass derjenige getötet wird, der den gesamten Speicher verschlungen hat, nicht derjenige, der zuerst Pech hatte. Wir wissen, was ein optimistischer Ort ist - wir bitten um eine Erinnerung, sie versprechen es uns, wir sagen: "Jetzt gib uns eine", als Antwort: "Aber nein!" - und aus dem GedĂ€chtnis Killer.
Dies ist ein regulÀrer Linux-Job, sofern er nicht im Bereich des virtuellen Speichers konfiguriert ist.
Der Prozess wird aus dem GedĂ€chtnis Killer und fĂ€llt schnell und rĂŒcksichtslos aus. DarĂŒber hinaus wissen keine anderen Prozesse, die er starb, nicht. Er hatte keine Zeit, irgendjemanden ĂŒber irgendetwas zu informieren, sie kĂŒndigten ihn einfach.
Dann wird der Prozess natĂŒrlich neu gestartet - wir haben systemd, es startet bei Bedarf auch OSDs, die gefallen sind. Gefallene OSDs beginnen und ... eine Kettenreaktion beginnt.

In unserem Fall haben wir OSD 8 und OSD 9 gestartet, sie haben angefangen, alles zu zerstören, aber kein GlĂŒck, OSD 0 und OSD 5. Ein Killer ohne Speicher flog zu ihnen und beendete sie. Sie starteten neu - sie lasen ihre Daten, begannen den Rest zu synchronisieren und zu zerstören. Drei weitere Pechvögel (OSD 9, OSD 4 und OSD 7). Diese drei starteten neu, ĂŒbten Druck auf den gesamten Cluster aus, die nĂ€chste Packung hatte Pech.
Der Cluster beginnt buchstĂ€blich vor unseren Augen auseinanderzufallen . Der Abbau erfolgt sehr schnell, und dieses "sehr schnelle" wird normalerweise in Minuten ausgedrĂŒckt, maximal zehn Minuten. Wenn Sie 30 Knoten (10 Knoten pro Rack) haben und das Rack aufgrund eines Stromausfalls herunterfahren, liegt nach 6 Minuten die HĂ€lfte des Clusters.
Wir bekommen also so etwas wie das Folgende.

Auf fast jedem Server ist ein OSD ausgefallen. Und wenn dies auf jedem Server der Fall ist, dh in jeder FehlerdomÀne,
die wir fĂŒr das ausgefallene OSD haben, sind die
meisten unserer Daten nicht zugÀnglich . Jede Anfrage ist blockiert - zum Schreiben, zum Lesen - es macht keinen Unterschied. Das ist alles! Wir sind aufgestanden.
Was tun in einer solchen Situation? Genauer gesagt,
was musste getan werden ?
Antwort: Starten Sie den Cluster nicht sofort, dh das gesamte Rack, sondern heben Sie vorsichtig jeweils einen DĂ€mon auf.
Das wussten wir aber nicht. Wir haben sofort angefangen und bekommen, was wir haben. In diesem Fall haben wir einen der vier Daemons (8, 9, 10, 11) gestartet. Der Speicherverbrauch wird um ca. 20% steigen. In der Regel stehen wir vor einem solchen Sprung. Dann beginnt der Speicherverbrauch zu sinken, da einige der Strukturen, die zum Speichern von Informationen darĂŒber verwendet wurden, wie sich der Cluster verschlechtert hat, verlassen werden. Das heiĂt, ein Teil der Platzierungsgruppen ist in seinen normalen Zustand zurĂŒckgekehrt, und alles, was zur Aufrechterhaltung des verschlechterten Zustands erforderlich ist, wird freigegeben -
theoretisch wird es freigegeben .
Sehen wir uns ein Beispiel an. Der C-Code links und rechts ist fast identisch, der Unterschied besteht nur in Konstanten.

Diese beiden Beispiele fordern vom System eine unterschiedliche Speichermenge an:
- links - 2048 StĂŒck Ă 1 MB;
- rechts - 2097152 StĂŒck von 1 KByte.
Dann warten beide Beispiele darauf, dass wir sie oben fotografieren. Und nach dem DrĂŒcken der EINGABETASTE wird Speicher freigegeben - alles auĂer dem letzten StĂŒck. Das ist sehr wichtig - das letzte StĂŒck bleibt. Und wieder warten sie darauf, dass wir sie fotografieren.
Unten ist, was tatsÀchlich passiert ist.

- Zuerst haben beide Prozesse gestartet und den Speicher aufgefressen. Klingt nach der Wahrheit - 2 GB RSS.
- DrĂŒcken Sie ENTER und lassen Sie sich ĂŒberraschen. Das erste Programm, das in groĂen StĂŒcken auffiel, gab Speicher zurĂŒck. Das zweite Programm kehrte jedoch nicht zurĂŒck.
Die Antwort darauf liegt im Linux-Malloc.
Wenn wir Speicher in groĂen Blöcken anfordern, wird er unter Verwendung des anonymen mmap-Mechanismus ausgegeben, der dem Adressraum des Prozessors zugewiesen wird, von wo aus der Speicher zu uns geschnitten wird. Wenn wir free () ausfĂŒhren, wird Speicher freigegeben und Seiten werden in den Seitencache (System) zurĂŒckgegeben.
Wenn wir Speicher in kleinen StĂŒcken zuweisen, machen wir sbrk (). sbrk () verschiebt den Zeiger auf das Ende des Heaps. Theoretisch kann das verschobene Ende zurĂŒckgegeben werden, indem Speicherseiten an das System zurĂŒckgegeben werden, wenn kein Speicher verwendet wird.
Schauen Sie sich nun die Abbildung an. Wir hatten viele Aufzeichnungen in der Geschichte des Standorts degradierter Objekte, und dann kam die Benutzersitzung - ein langlebiges Objekt. Wir haben synchronisiert und alle zusĂ€tzlichen Strukturen sind verschwunden, aber das langlebige Objekt ist geblieben, und wir können sbrk () nicht zurĂŒckbewegen.

Wir haben immer noch viel ungenutzten Speicherplatz, der mit SWAP frei werden könnte. Aber wir sind schlau - wir haben SWAP deaktiviert.
NatĂŒrlich wird dann ein Teil des Speichers vom Anfang des Heaps verwendet, aber dies ist nur ein Teil, und ein sehr bedeutender Rest wird belegt bleiben.
Was tun in einer solchen Situation? Die Antwort ist unten.
Kontrollierter Start
- Wir starten einen OSD-Daemon.
- Wir warten, wĂ€hrend es synchronisiert ist, wir ĂŒberprĂŒfen die Speicherbudgets.
- Wenn wir verstehen, dass wir den Start des nĂ€chsten DĂ€mons ĂŒberleben werden, starten wir den nĂ€chsten.
- Wenn nicht, starten Sie schnell den Daemon neu, der den meisten Speicherplatz beansprucht hat. Er konnte fĂŒr kurze Zeit ausfallen, er hat nicht viel Geschichte, fehlende Locs und andere Dinge, also wird er weniger Speicher essen, das Speicherbudget wird sich leicht erhöhen.
- Wir laufen um den Cluster herum, kontrollieren ihn und erhöhen schrittweise alles.
- Wir prĂŒfen, ob es möglich ist, mit dem nĂ€chsten OSD fortzufahren.
DigitalOcean hat dies tatsÀchlich erreicht:
"Unser Datacenter-Team fĂŒhrt Speichererweiterungen durch, wĂ€hrend ein anderes Team langsam weiterhin Knoten aufruft, wĂ€hrend das Speicherbudget jedes Hosts manuell verwaltet wird."
Kehren wir zu unserer Konfiguration und aktuellen Situation zurĂŒck. Jetzt haben wir einen zusammengebrochenen Cluster nach einer Kettenreaktion von Out-of-Memory-Killer. Wir verbieten den automatischen Neustart von OSD in der roten DomĂ€ne und starten nacheinander Knoten aus den blauen DomĂ€nen. Weil
unsere erste Aufgabe immer darin besteht, den Dienst wiederherzustellen , ohne zu verstehen, warum dies passiert ist. Wir werden spÀter verstehen, wenn wir den Dienst wiederherstellen. Im Betrieb ist dies immer der Fall.
Wir bringen den Cluster in den Zielzustand, um den Dienst wiederherzustellen, und beginnen dann, ein OSD nach unserer Methodik nach dem anderen auszufĂŒhren. Wir schauen uns den ersten an, starten Sie bei Bedarf die anderen neu, um das Speicherbudget anzupassen, den nĂ€chsten - 9, 10, 11 - und der Cluster scheint synchronisiert und bereit zu sein, mit der Wartung zu beginnen.
Das Problem ist, wie die
Schreibwartung in Ceph durchgefĂŒhrt wird .

Wir haben 3 Replikate: ein Master-OSD und zwei Slaves dafĂŒr. Wir werden klarstellen, dass der Master / Slave in jeder Platzierungsgruppe einen eigenen hat, aber jeder einen Master und zwei Slaves hat.
Die Schreib- oder Leseoperation fÀllt auf den Master. Wenn der Master beim Lesen die richtige Version hat, gibt er sie dem Kunden. Die Aufnahme ist etwas komplizierter, die Aufnahme muss auf allen Replikaten wiederholt werden. Wenn der Client 64 KB in OSD 0 schreibt, gehen dementsprechend die gleichen 64 KB in unserem Beispiel an OSD 5 und OSD 8.
Tatsache ist jedoch, dass unser OSD 8 stark beeintrÀchtigt ist, da wir viele Prozesse neu gestartet haben.

Da in Ceph jede Ănderung ein Ăbergang von Version zu Version ist, haben wir unter OSD 0 und OSD 5 eine neue Version, unter OSD 8 - die alte. , , ( 64 ) OSD 8 â 4 ( ). 4 OSD 0, OSD 8, , . , 64 .
â .

:
- 4 1 , 1000 / 1 .
- 4 ( ) 22 , 45 /.
, , , , .
â .

4 22 , 22 , 1 4 . 45 SSD, 1 â
45 .
, .
- , â (45+1) / 2 = 23 .
- 75% , (45 * 3 + 1) / 4 = 34 .
- 90% â(45 * 9 + 1) / 10 = 41 â 40 , .
Ceph, . , , , .
Ceph .

- â : , , , , .
- â latency. latency , . 100% ( , ). Latency 60 , .

, . 10 , 1 200 /, 300 , , . 10 SSD â 300 , â , - 300 .
, .
, . 900 / ( SSD). 2 500 128 ( , ESXi HyperV 128 ). degraded, 225 . file store, object store, ( ), 110 , - .
SSD 110 â !
?1: â
.

: ; PG;
.
:
- , 45 â .
- ( . ), 14 .
- , 8 ( 10% PG).
, , , , , .
2: â
(order, objectsize) .
, , , 4 2 1 . , , . :
:
(32 ) â !
3: â
Ceph .
, -,
Ceph . , , . .

, â Latency. â , â . Latency 30% , , .
Community , preproduction . , . , .
Fazit
- , . , Ceph - , , .
â
- .
, . ,
. . , , production. , , , DigitalOcean , . , , , .
, , . , : « ! ?!» , , . , : , , down time.
â
(OSD)., , â , , - , .
OSD â â . , .
â
.OSD .
, . , , , .
â
RAM OSD.â
SWAP.SWAP Ceph' , Linux' . .
â
.100%, 10%. , , , .
â
RBD Rados Getway., .
SWAP â . , SWAP â , , , , .
Dieser Artikel ist eine Abschrift eines der besten Berichte von DevOpsConf Russia. In KĂŒrze werden wir das Video öffnen und in einer Textversion veröffentlichen, wie interessant Themen sind. Abonnieren Sie hier auf Youtube oder im Newsletter, wenn Sie solche nĂŒtzlichen Materialien nicht verpassen und ĂŒber die Neuigkeiten von DevOps informiert werden möchten.