Verteilte Systeme wie Cloud-Platt­for­men gewinnen mehr und mehr an Bedeutung. Im Zuge dessen weichen einzelne Da­ten­ban­ken flexibel ska­lier­ba­ren Clustern. Dies stellt viele Ver­ant­wort­li­che vor eine Reihe neuer Her­aus­for­de­run­gen: Netz­werk­aus­fäl­le, Ver­zö­ge­run­gen, endliche Da­ten­durch­sät­ze, klein­tei­li­ge Sys­tem­be­stand­tei­le und Trans­port­si­cher­heit der Daten sind Themen, mit denen sich Betreiber intensiv aus­ein­an­der­set­zen müssen.

Eine mögliche Lösung ist ein zentraler Ort für änderbare In­for­ma­tio­nen, der aus­fall­si­cher, feh­ler­to­le­rant und kon­sis­tent ist – wie der prak­ti­sche Key-Value-Store etcd.

Compute Engine
Die ideale IaaS für Ihre Workloads
  • Kos­ten­güns­ti­ge vCPUs und leis­tungs­star­ke de­di­zier­te Cores
  • Höchste Fle­xi­bi­li­tät ohne Min­dest­ver­trags­lauf­zeit
  • Inklusive 24/7 Experten-Support

Was ist etcd?

etcd ist ein ver­teil­ter Key-Value-Store, der vom CoreOS-Team ent­wi­ckelt und wie viele Tools im Docker-Umfeld in der Google-Sprache Go ge­schrie­ben wurde. Ziel der Ent­wick­lung war es, einen sicheren Spei­cher­platz für kritische Daten von ver­teil­ten An­wen­dun­gen zu erstellen, der die Ver­wal­tung über­schau­bar macht.

Na­mens­ge­bend ist das Ver­zeich­nis für Kon­fi­gu­ra­ti­ons­da­tei­en in GNU/Linux-Be­triebs­sys­te­men „/etc“, während das an­ge­häng­te „d“ für „dis­tri­bu­ted“ (dt. verteilt) steht. Mitt­ler­wei­le wird etcd als Open-Source-Software von der Cloud Native Computing Foun­da­ti­on verwaltet.

Wie funk­tio­niert etcd?

Will man etcd verstehen, ist es wichtig, die drei Kern­be­grif­fe im An­wen­dungs­clus­ter für die Ver­wal­tung von Speichern zu kennen:

  • Anführer (leader)
  • Wahlen (elections)
  • Zeiträume (terms)

In Raft-basierten Systemen wählt das Cluster für einen be­stimm­ten Zeitraum einen Anführer. Dieser be­ar­bei­tet alle Spei­cher­an­fra­gen, die dem Konsens des Clusters ent­spre­chen. Anfragen, die keine Zu­stim­mung des Clusters erfordern – wie Le­se­zu­grif­fe – kann jedes Mitglied des Clusters ei­gen­stän­dig be­ant­wor­ten. Ak­zep­tiert der Anführer eine Änderung, sorgt etcd dafür, dass er die In­for­ma­ti­on an die Nach­fol­ge­kno­ten re­pli­ziert. Sobald diese den Empfang bestätigt haben, übernimmt der Anführer die Änderung.

Die Ab­stim­mung des Anführers mit den Knoten des Clusters durch eine etcd-Datenbank ist besonders bei ver­teil­ten An­wen­dun­gen wertvoll. Bein­träch­ti­gen Än­de­run­gen die Funk­ti­ons­wei­se eines Knotens, kann dieser die Än­de­run­gen blo­ckie­ren. Dadurch ist ge­währ­leis­tet, dass die Anwendung stabil läuft und Fol­ge­pro­ble­me minimiert werden.

Fällt der Anführer aus oder antwortet längere Zeit nicht, wählen die ver­blei­ben­den Knoten des Clusters nach einer be­stimm­ten Zeit­span­ne einen neuen Anführer. Die Zeit, die vergeht, bis ein Knoten eine Neuwahl fordert und sich selbst als Kandidat bestimmt, ist dabei von Knoten zu Knoten un­ter­schied­lich. Bestimmt wird diese durch eine „Stoppuhr“, über die jeder Knoten verfügt. So ist ge­währ­leis­tet, dass möglichst schnell Knoten als Anführer ein­sprin­gen können.

Damit bei den Wahlen stets eine Mehrheit erzielt wird, muss die Anzahl der Knoten im Cluster ungerade sein. Aus Per­for­mance-Gründen empfiehlt es sich, kein Cluster zu verwenden, das mehr als sieben Knoten besitzt.

Tipp

Um etcd zu testen, können Sie es auf einem Laptop oder in einem einfachen Cloud-Setup ausführen. Da etcd Daten auf die Fest­plat­te schreibt, ist eine SSD dringend zu empfehlen. In der Pro­duk­ti­on sollten Sie die in der of­fi­zi­el­len Do­ku­men­ta­ti­on auf­ge­zeig­ten Richt­li­ni­en be­rück­sich­ti­gen.

Die Vorteile von etcd

Neben dem Effekt, dass die Anwendung stabil läuft, bringt eine etcd-Datenbank viele weitere Vorteile mit sich:

  • Voll­stän­dig re­pli­zier­bar: Der gesamte Speicher ist auf jedem Knoten im Cluster verfügbar.
  • Hohe Ver­füg­bar­keit: etcd-Da­ten­ban­ken vermeiden einzelne Feh­ler­quel­len wie Hardware- oder Netz­werk­pro­ble­me.
  • Kon­sis­tent: Über mehrere Hosts hinweg liefert jeder Le­se­vor­gang den letzten Schreib­vor­gang.
  • Einfach: etcd enthält ein gut de­fi­nier­tes, be­nut­zer­ori­en­tier­tes API (gRPC), basierend auf REST und JSON.
  • Sicher: etcd im­ple­men­tiert au­to­ma­tisch eine sichere Über­tra­gung via SSL/TLS. Optional können Sie die Client-Zer­ti­fi­kat-Au­then­ti­fi­zie­rung nutzen.
  • Schnell: Das Bench­mar­king liegt bei mehr als 10.000 Schreib­vor­gän­gen pro Sekunde.
  • Zu­ver­läs­sig: Der Raft-Al­go­rith­mus sorgt stets für eine korrekte Ver­tei­lung des Speichers.

etcd-Beispiel: Der Key-Value-Store im Pra­xis­ein­satz

Bereits 2014 im­ple­men­tier­ten Ent­wick­ler etcd in Ku­ber­netes, was zu einem rasanten Wachstum der etcd-Ge­mein­schaft führte. Cloud-Anbieter wie AWS, Google Cloud Platform und Azur folgten, indem sie etcd er­folg­reich in ihre Pro­duk­ti­ons­um­ge­bun­gen ein­setz­ten.

Bleiben wir aber beim erst­ge­nann­ten etcd-Beispiel Ku­ber­netes. Ku­ber­netes selbst ist ein ver­teil­tes System, das auf einem Cluster aus mehreren Maschinen läuft. Dem­entspre­chend pro­fi­tiert es enorm von einem ver­teil­ten Da­ten­spei­cher wie etcd, der die kri­ti­schen Daten sicher verwahrt. Innerhalb von Ku­ber­netes dient die etcd-Datenbank als primärer Da­ten­spei­cher, in der die Kon­fi­gu­ra­ti­ons­da­ten, der Status und die Metadaten ge­spei­chert sind. Erfolgen Än­de­run­gen, ge­währ­leis­tet etcd, dass alle Knoten aus dem Ku­ber­netes-Cluster die Daten lesen und schreiben können. Gleich­zei­tig überwacht etcd den aktuellen oder den ge­wünsch­ten Zustand des Systems. Un­ter­schei­den sich die Zustände, nimmt Ku­ber­netes Än­de­run­gen vor, damit sie sich wieder an­glei­chen.

Hinweis

Mit dem Befehl „kubectl“ wird ein gelesener Wert aus der etcd-Datenbank abgerufen. Än­de­run­gen mit „kubectl apply“ erzeugen oder ak­tua­li­sie­ren Einträge im etcd-Store – jeder Absturz des Systems verändert au­to­ma­tisch Werte im etcd.

Zum Hauptmenü