{"id":60060,"date":"2023-03-16T08:43:53","date_gmt":"2023-03-16T07:43:53","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=60060&#038;preview=true&#038;preview_id=60060"},"modified":"2023-08-28T16:19:20","modified_gmt":"2023-08-28T15:19:20","slug":"mongodb-replikaset","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/","title":{"rendered":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)"},"content":{"rendered":"<p>MongoDB ist eine <a href=\"https:\/\/kinsta.com\/de\/blog\/mongodb-vs-mysql\/\">NoSQL<\/a>-Datenbank, die JSON-\u00e4hnliche Dokumente mit dynamischen Schemata verwendet. Wenn du mit Datenbanken arbeitest, ist es immer gut, einen Notfallplan zu haben, falls einer deiner Datenbankserver ausf\u00e4llt. Du kannst die Wahrscheinlichkeit, dass das passiert, verringern, indem du ein <a href=\"https:\/\/kinsta.com\/de\/mykinsta\/\">cleveres Verwaltungstool<\/a> f\u00fcr deine WordPress-Website nutzt.<\/p>\n<p>Aus diesem Grund ist es sinnvoll, viele Kopien deiner Daten zu haben. Dadurch werden auch die Lesezeiten reduziert. Gleichzeitig kann es die Skalierbarkeit und Verf\u00fcgbarkeit der Datenbank verbessern. An dieser Stelle kommt die Replikation ins Spiel. Darunter versteht man die <a href=\"https:\/\/kinsta.com\/de\/blog\/mysql-sicherst-database\/\">Synchronisierung<\/a> von Daten zwischen mehreren <a href=\"https:\/\/kinsta.com\/de\/blog\/open-source-database\/\">Datenbanken<\/a>.<\/p>\n<p>In diesem Artikel werden wir uns mit den wichtigsten Aspekten der MongoDB-Replikation befassen, z. B. mit ihren Funktionen und Mechanismen, um nur einige zu nennen. <div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Was ist Replikation in MongoDB?<\/h2>\n<p>In MongoDB f\u00fchren Replikats\u00e4tze die Replikation durch. Das ist eine Gruppe von Servern, die durch Replikation denselben Datensatz verwalten. Du kannst die MongoDB-Replikation sogar als Teil des Lastausgleichs nutzen. Dabei kannst du die Schreib- und Lesevorg\u00e4nge auf alle Instanzen verteilen, je nach Anwendungsfall.<\/p>\n\n<h2>Was ist ein MongoDB Replikatset?<\/h2>\n<p>Jede <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\">MongoDB<\/a>-Instanz, die zu einem bestimmten Replikat-Set geh\u00f6rt, ist ein Mitglied. Jedes Replikatset muss ein prim\u00e4res Mitglied und mindestens ein sekund\u00e4res Mitglied haben.<\/p>\n<p>Das prim\u00e4re Mitglied ist der prim\u00e4re Zugangspunkt f\u00fcr Transaktionen mit dem Replikatset. Es ist auch das einzige Mitglied, das Schreiboperationen akzeptieren kann. Die Replikation kopiert zun\u00e4chst das Oplog (Operations Log) des prim\u00e4ren Mitglieds. Anschlie\u00dfend werden die protokollierten \u00c4nderungen in den jeweiligen Datens\u00e4tzen der Sekund\u00e4rdateien wiederholt. Jedes Replikatset kann also jeweils nur ein prim\u00e4res Mitglied haben. Wenn mehrere Primaries Schreiboperationen erhalten, kann es zu Datenkonflikten kommen.<\/p>\n<p>Normalerweise fragen die Anwendungen nur das prim\u00e4re Mitglied f\u00fcr Schreib- und Lesevorg\u00e4nge ab. Du kannst dein Setup so gestalten, dass es von einem oder mehreren sekund\u00e4ren Mitgliedern liest. Die asynchrone Daten\u00fcbertragung kann dazu f\u00fchren, dass die Lesevorg\u00e4nge der sekund\u00e4ren Knotenpunkte alte Daten liefern. Daher ist eine solche Anordnung nicht f\u00fcr jeden Anwendungsfall ideal.<\/p>\n<h3>Funktionen des Replikatsets<\/h3>\n<p>Der automatische Failover-Mechanismus unterscheidet MongoDBs Replikats\u00e4tze von denen der Konkurrenz. F\u00e4llt ein prim\u00e4rer Knoten aus, wird durch eine automatische Wahl unter den sekund\u00e4ren Knoten ein neuer prim\u00e4rer Knoten ausgew\u00e4hlt.<\/p>\n<h3>MongoDB Replikatset vs. MongoDB Cluster<\/h3>\n<p>Ein MongoDB Replikatset erstellt verschiedene Kopien desselben Datensatzes auf den Replikatset-Knoten. Das Hauptziel eines Replikat-Sets ist es:<\/p>\n<ul>\n<li>Eine integrierte Backup-L\u00f6sung zu bieten<\/li>\n<li>Die Datenverf\u00fcgbarkeit zu erh\u00f6hen<\/li>\n<\/ul>\n<p>Ein MongoDB-Cluster ist ein ganz anderes Spiel. Er verteilt die Daten durch einen Shard-Schl\u00fcssel auf viele Knoten. Bei diesem Prozess werden die Daten in viele Teile, sogenannte Shards, zerlegt. Anschlie\u00dfend wird jeder Shard auf einen anderen Knoten kopiert. Ein Cluster zielt darauf ab, gro\u00dfe Datens\u00e4tze und Operationen mit hohem Durchsatz zu unterst\u00fctzen. Dies wird durch eine horizontale Skalierung der Arbeitslast erreicht.<\/p>\n<p>Das ist der Unterschied zwischen einem Replikatset und einem Cluster, vereinfacht ausgedr\u00fcckt:<\/p>\n<ul>\n<li>Ein Cluster verteilt die Arbeitslast. Au\u00dferdem speichert er Datenfragmente (Shards) auf vielen Servern.<\/li>\n<li>Ein Replikatset dupliziert den Datensatz vollst\u00e4ndig.<\/li>\n<\/ul>\n<p>MongoDB erm\u00f6glicht es dir, diese Funktionen zu kombinieren, indem du einen Sharded-Cluster erstellst. Hier kannst du jeden Shard auf einen zweiten Server replizieren. Dadurch bietet ein Shard eine hohe Redundanz und Datenverf\u00fcgbarkeit.<\/p>\n<p>Die Pflege und Einrichtung eines Replikatsets kann technisch anstrengend und zeitaufw\u00e4ndig sein. Und die Suche nach dem richtigen Hosting-Service? Das ist ein ganz anderes Problem. Bei so vielen Angeboten kann es leicht passieren, dass du stundenlang recherchierst, anstatt dein Unternehmen aufzubauen.<\/p>\n<p>Ich m\u00f6chte dir ein Tool vorstellen, das dir all das und noch viel mehr abnimmt, damit du mit deinem Service\/Produkt wieder durchstarten kannst.<\/p>\n<p>Kinstas <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-Hosting<\/a>-L\u00f6sung, auf die \u00fcber 55.000 Entwickler\/innen vertrauen, kannst du in nur 3 einfachen Schritten zum Laufen bringen. Wenn das zu gut klingt, um wahr zu sein, findest du hier weitere Vorteile von Kinsta:<\/p>\n<ul>\n<li><strong>Greife auf bessere Leistung zur\u00fcck mit den internen Verbindungen von Kinsta<\/strong>: Vergiss deine Probleme mit gemeinsam genutzten Datenbanken. Wechsle zu dedizierten Datenbanken mit internen Verbindungen, bei denen es keine Begrenzung der Abfrage- oder Zeilenzahl gibt. Kinsta ist schneller, sicherer und stellt dir keine Kosten f\u00fcr die interne Bandbreite\/den Datenverkehr in Rechnung.<\/li>\n<li><strong>Ein auf Entwickler zugeschnittener Funktionsumfang<\/strong>: Skaliere deine Anwendung auf einer robusten Plattform, die Gmail, YouTube und die Google-Suche unterst\u00fctzt. Du kannst sicher sein, dass du hier in den sichersten H\u00e4nden bist.<\/li>\n<li><strong>Genie\u00dfe unvergleichliche Geschwindigkeiten in einem Rechenzentrum deiner Wahl<\/strong>: W\u00e4hle die Region, die f\u00fcr dich und deine Kunden am besten geeignet ist. Mit \u00fcber 25 Rechenzentren zur Auswahl sorgen die 300+ PoPs von Kinsta f\u00fcr maximale Geschwindigkeit und eine globale Pr\u00e4senz deiner Website.<\/li>\n<\/ul>\n<p>Teste die <a href=\"https:\/\/kinsta.com\/de\/anmelden\/?product_type=app-db\">Anwendungs-Hosting-L\u00f6sung von Kinsta noch heute kostenlos<\/a>!<\/p>\n<h2>Wie funktioniert die Replikation in MongoDB?<\/h2>\n<p>In MongoDB sendest du Writer-Operationen an den prim\u00e4ren Server (Node). Der Prim\u00e4rserver verteilt die Operationen auf die Sekund\u00e4rserver und repliziert die Daten.<\/p>\n<figure id=\"attachment_148331\" aria-describedby=\"caption-attachment-148331\" style=\"width: 1024px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148331 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/MongoDB-Replica-Set-Election.png\" alt=\"Dies ist ein Flussdiagramm, das zeigt, wie die Replikation in MongoDB f\u00fcr 3 Knoten (1 prim\u00e4rer, 2 sekund\u00e4re) funktioniert\" width=\"1024\" height=\"763\"><\/a><figcaption id=\"caption-attachment-148331\" class=\"wp-caption-text\">Illustration des MongoDB-Replikationsprozesses (Bildquelle: <a href=\"https:\/\/www.mongodb.com\/basics\/replication\" target=\"_blank\" rel=\"noopener noreferrer\">MongoDB<\/a>)<\/figcaption><\/figure>\n<h3>Drei Arten von MongoDB-Knoten<\/h3>\n<p>Von den drei Arten von MongoDB-Knoten haben wir bereits zwei kennengelernt: prim\u00e4re und sekund\u00e4re Knoten. Der dritte Typ von MongoDB-Knoten, der bei der Replikation n\u00fctzlich ist, ist ein Arbiter. Der Arbiter-Knoten verf\u00fcgt nicht \u00fcber eine Kopie des Datensatzes und kann nicht zum prim\u00e4ren Knoten werden. Allerdings nimmt der Arbiter an den Wahlen f\u00fcr den Prim\u00e4rknoten teil.<\/p>\n<p>Wir haben bereits erw\u00e4hnt, was passiert, wenn der prim\u00e4re Knoten ausf\u00e4llt, aber was ist, wenn die sekund\u00e4ren Knoten ins Gras bei\u00dfen? In diesem Fall wird der prim\u00e4re Knotenpunkt zum sekund\u00e4ren und die Datenbank wird unerreichbar.<\/p>\n<h3>Mitgliedswahl<\/h3>\n<p>Die Wahlen k\u00f6nnen in den folgenden Szenarien stattfinden:<\/p>\n<ul>\n<li>Initialisierung einer Replikatgruppe<\/li>\n<li>Verlust der Verbindung zum prim\u00e4ren Knoten (dies kann durch Heartbeats festgestellt werden)<\/li>\n<li>Wartung eines Replikat-Sets mit den Methoden <code>rs.reconfig<\/code> oder <code>stepDown<\/code><\/li>\n<li>Hinzuf\u00fcgen eines neuen Knotens zu einem bestehenden Replikatset<\/li>\n<\/ul>\n<p>Ein Replikatset kann bis zu 50 Mitglieder haben, aber nur 7 oder weniger k\u00f6nnen an einer Wahl teilnehmen.<\/p>\n<p>Die durchschnittliche Zeit, bevor ein Cluster einen neuen Primar w\u00e4hlt, sollte 12 Sekunden nicht \u00fcberschreiten. Der Wahlalgorithmus wird versuchen, den Sekund\u00e4rteilnehmer mit der h\u00f6chsten Priorit\u00e4t zu w\u00e4hlen. Gleichzeitig k\u00f6nnen die Mitglieder mit einem Priorit\u00e4tswert von 0 nicht Primar werden und nehmen nicht an der Wahl teil.<\/p>\n<figure id=\"attachment_148334\" aria-describedby=\"caption-attachment-148334\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148334 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Secondary-Node-Becomes-a-Primary-in-MongoDB-2.png\" alt=\"Dieses Diagramm zeigt, wie ein sekund\u00e4rer Knoten nach der Wahl zu einem prim\u00e4ren Knoten in MongoDB wird.\" width=\"900\" height=\"509\"><\/a><figcaption id=\"caption-attachment-148334\" class=\"wp-caption-text\">Sekund\u00e4rer Knotenpunkt wird zum prim\u00e4ren (Bildquelle: <a href=\"https:\/\/medium.com\/condorlabs-engineering\/mongodb-replication-what-you-need-to-know-42a62a98b320\" target=\"_blank\" rel=\"noopener noreferrer\">Medium<\/a>)<\/figcaption><\/figure>\n<h3>Der Write Concern<\/h3>\n<p>Um die Dauerhaftigkeit zu gew\u00e4hrleisten, haben Schreiboperationen einen Rahmen, um die Daten in eine bestimmte Anzahl von Knoten zu kopieren. Damit kannst du dem Kunden sogar eine R\u00fcckmeldung geben. Dieser Rahmen wird auch als &#8222;Write Concern&#8220; bezeichnet Es hat datentragende Mitglieder, die ein Schreibanliegen best\u00e4tigen m\u00fcssen, bevor die Operation als erfolgreich zur\u00fcckgegeben wird. In der Regel haben die Replica-Sets den Wert 1 als &#8222;Write Concern&#8220;. Daher sollte nur das prim\u00e4re Mitglied den Schreibvorgang best\u00e4tigen, bevor es die Best\u00e4tigung des Schreibvorgangs zur\u00fcckgibt.<\/p>\n<p>Du kannst sogar die Anzahl der Mitglieder erh\u00f6hen, die f\u00fcr die Best\u00e4tigung des Schreibvorgangs erforderlich sind. Es gibt keine Obergrenze f\u00fcr die Anzahl der Mitglieder. Wenn die Anzahl jedoch hoch ist, musst du mit einer hohen Latenz rechnen. Das liegt daran, dass der Client auf die Best\u00e4tigung aller Mitglieder warten muss. Du kannst auch die &#8222;Mehrheit&#8220; festlegen, d.h. mehr als die H\u00e4lfte der Mitglieder stimmen zu, nachdem sie ihre Best\u00e4tigung erhalten haben.<\/p>\n<h3>Lesepr\u00e4ferenz<\/h3>\n<p>F\u00fcr die Lesevorg\u00e4nge kannst du die Lesepr\u00e4ferenz angeben, welche beschreibt, wie die Datenbank die Abfrage an die Mitglieder des Replikatsets weiterleitet. In der Regel erh\u00e4lt der prim\u00e4re Knoten den Lesevorgang, aber der Kunde kann eine Lesepr\u00e4ferenz angeben, um die Lesevorg\u00e4nge an sekund\u00e4re Knoten zu senden. Hier sind die Optionen f\u00fcr die Lesepr\u00e4ferenz:<\/p>\n<ul>\n<li><strong>primaryPreferred<\/strong>: Normalerweise kommen die Lesevorg\u00e4nge vom prim\u00e4ren Knotenpunkt, aber wenn dieser nicht verf\u00fcgbar ist, werden die Daten von den sekund\u00e4ren Knotenpunkten abgerufen.<\/li>\n<li><strong>primary<\/strong>: Alle Lesevorg\u00e4nge werden vom prim\u00e4ren Knoten ausgef\u00fchrt.<\/li>\n<li><strong>secondary<\/strong>: Alle Lesevorg\u00e4nge werden von den sekund\u00e4ren Knotenpunkten ausgef\u00fchrt.<\/li>\n<li><strong>nearest<\/strong>: Hier werden die Leseanfragen an den n\u00e4chstgelegenen erreichbaren Knoten weitergeleitet, der mit dem Befehl <code>ping<\/code> ermittelt werden kann. Das Ergebnis der Lesevorg\u00e4nge kann von jedem Mitglied des Replikatsets stammen, unabh\u00e4ngig davon, ob es sich um den prim\u00e4ren oder den sekund\u00e4ren Knoten handelt.<\/li>\n<li><strong>secondaryPreferred<\/strong>: Hier kommen die meisten Lesevorg\u00e4nge von den sekund\u00e4ren Knoten, aber wenn keiner von ihnen verf\u00fcgbar ist, werden die Daten vom prim\u00e4ren Knoten \u00fcbernommen.<\/li>\n<\/ul>\n<h3>Replikationsset Datensynchronisation<\/h3>\n<p>Um die Kopien des gemeinsamen Datensatzes auf dem neuesten Stand zu halten, replizieren oder synchronisieren die sekund\u00e4ren Mitglieder eines Replikationssets die Daten der anderen Mitglieder.<\/p>\n<p>MongoDB nutzt zwei Formen der Datensynchronisierung. Erstsynchronisierung, um neue Mitglieder mit dem vollst\u00e4ndigen Datensatz zu versorgen. Replikation, um laufende \u00c4nderungen am kompletten Datensatz durchzuf\u00fchren.<\/p>\n<h4>Erstsynchronisation<\/h4>\n<p>Bei der Erstsynchronisierung f\u00fchrt ein sekund\u00e4rer Knoten den Befehl <code> init sync <\/code> aus, um alle Daten vom prim\u00e4ren Knoten mit einem anderen sekund\u00e4ren Knoten zu synchronisieren, der die neuesten Daten enth\u00e4lt. Daher nutzt der sekund\u00e4re Knoten konsequent die Funktion <code> tailable cursor <\/code>, um die neuesten Oplog-Eintr\u00e4ge in der local.oplog.rs-Sammlung des prim\u00e4ren Knotens abzufragen und diese Vorg\u00e4nge innerhalb dieser Oplog-Eintr\u00e4ge durchzuf\u00fchren.<\/p>\n<p>Ab MongoDB 5.2 k\u00f6nnen die ersten Synchronisierungen auf Dateikopien basieren oder logisch sein.<\/p>\n<h5>Logische Synchronisierung<\/h5>\n<p>Wenn du eine logische Synchronisierung durchf\u00fchrst, tut MongoDB folgendes:<\/p>\n<ol>\n<li>Entwickelt alle Sammelindizes, w\u00e4hrend die Dokumente f\u00fcr jede Sammlung kopiert werden.<\/li>\n<li>Dupliziert alle Datenbanken au\u00dfer der lokalen Datenbank. <code> mongod <\/code> scannt jede Sammlung in allen Quelldatenbanken und f\u00fcgt alle Daten in die Duplikate dieser Sammlungen ein.<\/li>\n<li>F\u00fchrt alle \u00c4nderungen an der Datenmenge aus. Durch die Nutzung des Oplogs der Quelle aktualisiert <code> mongod <\/code> seinen Datensatz, um den aktuellen Zustand des Replikatsatzes abzubilden.<\/li>\n<li>Extrahiert w\u00e4hrend der Datenkopie neu hinzugef\u00fcgte oplog-Datens\u00e4tze. Vergewissere dich, dass das Zielmitglied \u00fcber gen\u00fcgend Speicherplatz in der lokalen Datenbank verf\u00fcgt, um diese Oplog-Datens\u00e4tze f\u00fcr die Dauer dieser Datenkopiephase vorl\u00e4ufig zu speichern.<\/li>\n<\/ol>\n<p>Wenn die Erstsynchronisation abgeschlossen ist, wechselt das Mitglied von <code> STARTUP2 <\/code> zu <code> SECONDARY <\/code>.<\/p>\n<h5>Dateikopie-basierte Erstsynchronisation<\/h5>\n<p>Diesen Vorgang kannst du nur ausf\u00fchren, wenn du MongoDB Enterprise verwendest. Bei diesem Prozess wird die erste Synchronisierung durch Duplizieren und Verschieben der Dateien im Dateisystem durchgef\u00fchrt. Diese Synchronisierungsmethode kann in manchen F\u00e4llen schneller sein als die logische Erstsynchronisierung. Bedenke, dass die erste Synchronisierung durch Dateikopien zu ungenauen Z\u00e4hlungen f\u00fchren kann, wenn du die count()-Methode ohne ein Abfragepr\u00e4dikat ausf\u00fchrst.<\/p>\n<p>Aber auch diese Methode hat ihre T\u00fccken:<\/p>\n<ul>\n<li>W\u00e4hrend eines ersten Abgleichs mit einer Dateikopie kannst du nicht in die lokale Datenbank des Mitglieds schreiben, das abgeglichen wird. Du kannst auch keine Sicherungskopie des Mitglieds, mit dem synchronisiert wird, oder des Mitglieds, von dem synchronisiert wird, erstellen.<\/li>\n<li>Wenn du die verschl\u00fcsselte Speicher-Engine nutzt, verwendet MongoDB den Quellschl\u00fcssel, um das Ziel zu verschl\u00fcsseln.<\/li>\n<li>Du kannst jeweils nur eine erste Synchronisierung von einem bestimmten Mitglied aus durchf\u00fchren.<\/li>\n<\/ul>\n<h4>Replikation<\/h4>\n<p>Sekund\u00e4re Mitglieder replizieren die Daten nach der ersten Synchronisierung konsistent. Sekund\u00e4re Mitglieder duplizieren das Oplog aus ihrer Synchronisierung mit der Quelle und f\u00fchren diese Vorg\u00e4nge in einem asynchronen Prozess aus.<\/p>\n<p>Die sekund\u00e4ren Mitglieder sind in der Lage, ihre Synchronisierung mit der Quelle bei Bedarf automatisch zu \u00e4ndern, wenn sich die Ping-Zeit und der Status der Replikation der anderen Mitglieder \u00e4ndern.<\/p>\n<h5>Streaming-Replikation<\/h5>\n<p>Ab MongoDB 4.4 sendet die Synchronisierung von Quellen einen kontinuierlichen Strom von Oplog-Eintr\u00e4gen an ihre synchronisierenden Secondaries. Die Streaming-Replikation verringert die Verz\u00f6gerung der Replikation in Netzwerken mit hoher Last und hoher Latenz. Sie kann auch:<\/p>\n<ul>\n<li>Das Risiko verringern, dass Schreibvorg\u00e4nge mit <code>w:1<\/code> aufgrund eines prim\u00e4ren Failovers verloren gehen.<\/li>\n<li>Die Staleness bei Lesevorg\u00e4ngen von Secondaries verringern.<\/li>\n<li>Die Latenz bei Schreibvorg\u00e4ngen mit <code>w:\u201cmajority\u201d<\/code> und <code>w:&gt;1<\/code> verringern. Kurz gesagt: alle Schreibvorg\u00e4nge, die auf die Replikation warten m\u00fcssen.<\/li>\n<\/ul>\n<h5>Multithreaded Replikation<\/h5>\n<p>In MongoDB werden Schreibvorg\u00e4nge in Batches \u00fcber mehrere Threads ausgef\u00fchrt, um die Gleichzeitigkeit zu verbessern. MongoDB gruppiert die Batches nach Dokument-ID und f\u00fchrt jede Gruppe von Operationen in einem anderen Thread aus.<\/p>\n<p>MongoDB f\u00fchrt die Schreibvorg\u00e4nge f\u00fcr ein bestimmtes Dokument immer in der urspr\u00fcnglichen Reihenfolge aus. Das hat sich in MongoDB 4.0 ge\u00e4ndert.<\/p>\n<p>Ab MongoDB 4.0 werden Leseoperationen, die auf Secondaries abzielen und mit einem Read Concern Level von <code>\u201cmajority\u201d<\/code> oder <code>\u201clocal\u201d<\/code> konfiguriert sind, nun von einem WiredTiger-Snapshot der Daten gelesen, wenn der Lesevorgang auf einer Secondary stattfindet, auf der die Replikationsbatches angewendet werden. Das Lesen aus einem Snapshot garantiert eine konsistente Sicht auf die Daten und erm\u00f6glicht es, dass das Lesen gleichzeitig mit der laufenden Replikation erfolgt, ohne dass eine Sperre erforderlich ist.<\/p>\n<p>Daher m\u00fcssen sekund\u00e4re Lesevorg\u00e4nge, die diese Read Concern Level ben\u00f6tigen, nicht mehr auf die Anwendung von Replikationsbatches warten, sondern k\u00f6nnen sofort nach ihrem Eingang bearbeitet werden.<\/p>\n<h2>Wie man ein MongoDB Replikatset erstellt<\/h2>\n<p>Wie bereits erw\u00e4hnt, verwaltet MongoDB die Replikation \u00fcber Replikats\u00e4tze. In den n\u00e4chsten Abschnitten stellen wir dir einige Methoden vor, mit denen du Replikatgruppen f\u00fcr deinen Anwendungsfall erstellen kannst.<\/p>\n<h3>Methode 1: Erstellen eines neuen MongoDB-Replikatsets unter Ubuntu<\/h3>\n<p>Bevor wir loslegen, musst du sicherstellen, dass du mindestens drei Server mit Ubuntu 20.04 hast, auf denen <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-mongodb\/\">MongoDB<\/a> installiert ist.<\/p>\n<p>Um ein Replikatset einzurichten, musst du eine Adresse angeben, unter der jedes Mitglied des Replikatsets von den anderen Mitgliedern des Sets erreicht werden kann. In diesem Fall haben wir drei Mitglieder im Set. Wir k\u00f6nnen zwar <a href=\"https:\/\/kinsta.com\/de\/blog\/static-vs-dynamic-ip\/\">IP-Adressen<\/a> verwenden, aber das ist nicht empfehlenswert, da sich die Adressen unerwartet \u00e4ndern k\u00f6nnen. Eine bessere Alternative ist die Verwendung der logischen DNS-Hostnamen bei der Konfiguration von Replikatgruppen.<\/p>\n<p>Dazu konfigurieren wir die Subdomain f\u00fcr jedes Replikationsmitglied. Obwohl dies f\u00fcr eine Produktionsumgebung ideal sein kann, wird in diesem Abschnitt beschrieben, wie die <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-dns\/\">DNS<\/a>-Aufl\u00f6sung konfiguriert wird, indem die jeweiligen Hosts-Dateien der einzelnen Server bearbeitet werden. Diese Datei erm\u00f6glicht es uns, numerischen IP-Adressen lesbare Hostnamen zuzuweisen. Wenn sich also deine IP-Adresse \u00e4ndert, brauchst du nur die Hosts-Dateien auf den drei Servern zu aktualisieren, anstatt das Replikatset von Grund auf neu zu konfigurieren!<\/p>\n<p>Meistens wird <code>hosts<\/code> im Verzeichnis <code>\/etc\/<\/code> gespeichert. Wiederhole die folgenden Befehle f\u00fcr jeden deiner drei Server:<\/p>\n<pre><code class=\"language-markdown\">sudo nano \/etc\/hosts<\/code><\/pre>\n<p>Im obigen Befehl verwenden wir nano als Texteditor, du kannst aber auch einen anderen Texteditor verwenden, den du bevorzugst. Nach den ersten Zeilen, die den localhost konfigurieren, f\u00fcgst du einen Eintrag f\u00fcr jedes Mitglied des Replikatorsets hinzu. Diese Eintr\u00e4ge haben die Form einer IP-Adresse, gefolgt von einem lesbaren Namen deiner Wahl. Du kannst sie benennen, wie du willst, aber achte darauf, dass sie beschreibend sind, damit du zwischen den einzelnen Mitgliedern unterscheiden kannst. F\u00fcr dieses Tutorial verwenden wir die folgenden Hostnamen:<\/p>\n<ul>\n<li>mongo0.replset.member<\/li>\n<li>mongo1.replset.member<\/li>\n<li>mongo2.replset.member<\/li>\n<\/ul>\n<p>Mit diesen Hostnamen w\u00fcrden deine \/etc\/hosts-Dateien \u00e4hnlich wie die folgenden markierten Zeilen aussehen:<\/p>\n<figure id=\"attachment_148336\" aria-describedby=\"caption-attachment-148336\" style=\"width: 1222px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148336 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Hostnames-Illustration.png\" alt=\"Dies ist ein Schnappschuss der \/etc\/hosts-Dateien, die die Hostnamen zusammen mit der IP-Adresse enthalten.\" width=\"1222\" height=\"339\"><\/a><figcaption id=\"caption-attachment-148336\" class=\"wp-caption-text\">Hostnamen Abbildung<\/figcaption><\/figure>\n<p>Speichere und schlie\u00dfe die Datei.<\/p>\n<p>Nachdem wir die DNS-Aufl\u00f6sung f\u00fcr das Replikatorset konfiguriert haben, m\u00fcssen wir die Firewall-Regeln aktualisieren, damit sie miteinander kommunizieren k\u00f6nnen. F\u00fchre den folgenden <code>ufw<\/code> Befehl auf mongo0 aus, um mongo1 den Zugriff auf Port 27017 auf mongo0 zu erm\u00f6glichen:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>Anstelle des Parameters <code>mongo1_server_ip<\/code> gibst du die tats\u00e4chliche IP-Adresse deines mongo1-Servers ein. Wenn du die Mongo-Instanz auf diesem Server aktualisiert hast, um einen anderen Port als den Standardport zu verwenden, musst du auch den Port 27017 \u00e4ndern, damit er dem Port entspricht, den deine MongoDB-Instanz verwendet.<\/p>\n<p>F\u00fcge nun eine weitere Firewall-Regel hinzu, um mongo2 Zugriff auf denselben Port zu geben:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Anstelle des Parameters <code>mongo2_server_ip<\/code> gibst du die tats\u00e4chliche IP-Adresse deines mongo2-Servers ein. Aktualisiere dann die Firewall-Regeln f\u00fcr deine beiden anderen Server. F\u00fchre die folgenden Befehle auf dem mongo1-Server aus und achte darauf, dass du die IP-Adressen anstelle des server_ip-Parameters so \u00e4nderst, dass sie denen von mongo0 bzw. mongo2 entsprechen:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo2_server_ip to any port 27017<\/code><\/pre>\n<p>Zuletzt f\u00fchrst du diese beiden Befehle auf mongo2 aus. Achte auch hier darauf, dass du die richtigen IP-Adressen f\u00fcr jeden Server eingibst:<\/p>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo0_server_ip to any port 27017<\/code><\/pre>\n<pre><code class=\"language-markdown\">sudo ufw allow from mongo1_server_ip to any port 27017<\/code><\/pre>\n<p>Im n\u00e4chsten Schritt musst du die Konfigurationsdatei jeder MongoDB-Instanz aktualisieren, um externe Verbindungen zuzulassen. Um dies zu erm\u00f6glichen, musst du die Konfigurationsdatei jedes Servers \u00e4ndern, um die IP-Adresse und das Replikatset anzugeben. Du kannst jeden beliebigen Texteditor verwenden, aber wir benutzen wieder den Texteditor nano. Wir nehmen die folgenden \u00c4nderungen in jeder mongod.conf-Datei vor.<\/p>\n<p><strong>Auf mongo0:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo0.replset.member# replica set\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>Auf mongo1:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo1.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<p><strong>Auf mongo2:<\/strong><\/p>\n<pre><code class=\"language-markdown\"># network interfaces\nnet:\nport: 27017\nbindIp: 127.0.0.1,mongo2.replset.member\nreplication:\nreplSetName: \"rs0\"<\/code><\/pre>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-important\">\n            <h3>Important<\/h3>\n        <p>Wenn du den Wert der Direktive von rs0 \u00e4ndern willst, musst du ihn in den obigen Befehlen ersetzen. Du kannst die Direktive benennen, wie du willst, aber achte darauf, dass sie aussagekr\u00e4ftig genug ist. Nachdem die Aktualisierungen abgeschlossen sind, starte den mongod-Dienst in jeder Instanz neu, um die Konfigurationen neu zu laden.<\/p>\n<\/aside>\n\n<pre><code class=\"language-markdown\">sudo systemctl restart mongod<\/code><\/pre>\n<p>Damit hast du die Replikation f\u00fcr die MongoDB-Instanz jedes Servers aktiviert.<\/p>\n<p>Jetzt kannst du das Replikat-Set mit der Methode <code>rs.initiate()<\/code> initialisieren. Diese Methode muss nur auf einer einzigen MongoDB-Instanz im Replikatset ausgef\u00fchrt werden. Vergewissere dich, dass der Name und das Mitglied des Replikatsets mit den Konfigurationen \u00fcbereinstimmen, die du zuvor in den einzelnen Konfigurationsdateien vorgenommen hast.<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"rs0\",\n    members: [\n      { _id: 0, host: \"mongo0.replset.member\" },\n      { _id: 1, host: \"mongo1.replset.member\" },\n      { _id: 2, host: \"mongo2.replset.member\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Wenn die Methode &#8222;ok&#8220;: 1 als Output zur\u00fcckgibt, bedeutet das, dass das Replikatset korrekt gestartet wurde. Unten siehst du ein Beispiel daf\u00fcr, wie die Ausgabe aussehen sollte:<\/p>\n<pre><code class=\"language-markdown\"> \"ok\": 1,\n  \"$clusterTime\": {\n    \"clusterTime\": Timestamp(1612389071, 1),\n    \"signature\": {\n      \"hash\": BinData(0, \"AAAAAAAAAAAAAAAAAAAAAAAAAAA=\"),\n      \"keyId\": NumberLong(0)\n    }\n  },\n  \"operationTime\": Timestamp(1612389071, 1)\n}<\/code><\/pre>\n<h4>MongoDB-Server herunterfahren<\/h4>\n<p>Du kannst einen MongoDB-Server mit der Methode <code>db.shutdownServer()<\/code> herunterfahren. Nachfolgend findest du die Syntax f\u00fcr diese Methode. Sowohl <code>force<\/code> als auch <code>timeoutsecs<\/code> sind <a href=\"https:\/\/www.mongodb.com\/docs\/v5.0\/reference\/method\/db.shutdownServer\/#mongodb-method-db.shutdownServer\" target=\"_blank\" rel=\"noopener noreferrer\">optionale Parameter<\/a>.<\/p>\n<pre><code class=\"language-markdown\">db.shutdownServer({\nforce: &lt;boolean&gt;,\ntimeoutSecs: &lt;int&gt;\n})<\/code><\/pre>\n<p>Diese Methode kann fehlschlagen, wenn das MongoDB-Mitglied bestimmte Operationen wie den Indexaufbau durchf\u00fchrt. Um die Operationen zu unterbrechen und das Mitglied zum Herunterfahren zu zwingen, kannst du den booleschen Parameter <code> force <\/code> auf true setzen.<\/p>\n<h4>MongoDB mit &#8211;replSet neu starten<\/h4>\n<p>Um die Konfiguration zur\u00fcckzusetzen, stellst du sicher, dass alle Knoten in deinem Replikatset angehalten sind. L\u00f6sche dann die lokale Datenbank f\u00fcr jeden Knoten. Starte sie erneut mit dem Flag <code>\u2013replSet<\/code> und f\u00fchre <code>rs.initiate()<\/code> nur auf einer MongoDB-Instanz f\u00fcr das Replikatset aus.<\/p>\n<pre><code class=\"language-markdown\">mongod --replSet \"rs0\"<\/code><\/pre>\n<p><code>rs.initiate()<\/code> kann ein optionales Replikatset-Konfigurationsdokument nehmen, n\u00e4mlich:<\/p>\n<ul>\n<li>Die <code>Replication.replSetName<\/code> oder die <code>\u2014replSet<\/code> Option, um den Namen des Replikatsets im Feld <code>_id<\/code> anzugeben.<\/li>\n<li>Das Array &#8222;members&#8220;, das ein Dokument f\u00fcr jedes Mitglied des Replikatorsatzes enth\u00e4lt.<\/li>\n<\/ul>\n<p>Die Methode <code>rs.initiate()<\/code> l\u00f6st eine Wahl aus und w\u00e4hlt eines der Mitglieder zum Prim\u00e4rmitglied.<\/p>\n<h4>Mitglieder zum Replikatset hinzuf\u00fcgen<\/h4>\n<p>Um Mitglieder zum Set hinzuzuf\u00fcgen, startest du Mongo-Instanzen auf verschiedenen Rechnern. Starte dann einen Mongo-Client und verwende den Befehl <code>rs.add()<\/code>.<\/p>\n<p>Der Befehl <code>rs.add()<\/code> hat die folgende grundlegende Syntax:<\/p>\n<pre><code class=\"language-markdown\">rs.add(HOST_NAME:PORT)<\/code><\/pre>\n<p>Zum Beispiel,<\/p>\n<p>Angenommen, mongo1 ist deine Mongo-Instanz, die auf Port 27017 zu h\u00f6rt. Verwende den Mongo-Client-Befehl <code>rs.add()<\/code>, um diese Instanz zum Replikatset hinzuzuf\u00fcgen.<\/p>\n<pre><code class=\"language-markdown\">rs.add(\"mongo1:27017\")<\/code><\/pre>\n<p>Erst wenn du mit dem prim\u00e4ren Knoten verbunden bist, kannst du eine Mongo-Instanz zum Replikatset hinzuf\u00fcgen. Um zu \u00fcberpr\u00fcfen, ob du mit dem prim\u00e4ren Knoten verbunden bist, verwende den Befehl <code>db.isMaster()<\/code>.<\/p>\n<h4>Mitglieder entfernen<\/h4>\n<p>Um ein Mitglied zu entfernen, k\u00f6nnen wir <code>rs.remove()<\/code>nutzen.<\/p>\n<p>Dazu musst du zun\u00e4chst die Mongod-Instanz, die du entfernen m\u00f6chtest, mit der oben beschriebenen Methode <code>db.shutdownServer()<\/code> herunterfahren.<\/p>\n<p>Als N\u00e4chstes verbindest du dich mit der aktuellen Prim\u00e4rinstanz des Replikationssets. Um die aktuelle Prim\u00e4rinstanz zu ermitteln, benutze <code>db.hello()<\/code>, w\u00e4hrend du mit einem beliebigen Mitglied des Replikatorsets verbunden bist. Sobald du die Prim\u00e4rinstanz ermittelt hast, f\u00fchrst du einen der folgenden Befehle aus:<\/p>\n<pre><code class=\"language-markdown\">rs.remove(\"mongodb-node-04:27017\")\nrs.remove(\"mongodb-node-04\")<\/code><\/pre>\n<figure id=\"attachment_148339\" aria-describedby=\"caption-attachment-148339\" style=\"width: 900px\" class=\"wp-caption alignnone\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-148339 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/03\/Code-Snippet-for-Node-Removal-1.png\" alt=\"Dies ist ein Schnappschuss der Ausgabe nach der Ausf\u00fchrung des Befehls rs.remove().\" width=\"900\" height=\"267\"><\/a><figcaption id=\"caption-attachment-148339\" class=\"wp-caption-text\">Das obige Bild zeigt, dass der Knoten erfolgreich aus dem Replikatset entfernt wurde (Bildquelle: <a href=\"https:\/\/www.bmc.com\/blogs\/mongodb-replication\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bmc<\/a>)<\/figcaption><\/figure>\n<p>Wenn das Replikat-Set einen neuen Prim\u00e4rknoten w\u00e4hlen muss, kann es sein, dass MongoDB die Verbindung kurzzeitig unterbricht. In diesem Fall wird die Verbindung automatisch wiederhergestellt. Au\u00dferdem kann die Fehlermeldung <code>DBClientCursor::init call()<\/code> angezeigt werden, obwohl der Befehl erfolgreich war.<\/p>\n<h3>Methode 2: Konfigurieren eines MongoDB-Replikat-Sets f\u00fcr die Bereitstellung und den Test<\/h3>\n<p>Generell kannst du Replikats\u00e4tze f\u00fcr Tests entweder mit aktiviertem oder deaktiviertem RBAC einrichten. In dieser Methode werden wir Replikats\u00e4tze mit deaktivierter Zugriffskontrolle einrichten, um sie in einer Testumgebung <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-ein-full-stack-entwickler\/\">einzusetzen<\/a>.<\/p>\n<p>Erstelle zun\u00e4chst mit dem folgenden Befehl Verzeichnisse f\u00fcr alle Instanzen, die Teil des Replikatsets sind:<\/p>\n<pre><code class=\"language-markdown\">mkdir -p \/srv\/mongodb\/replicaset0-0  \/srv\/mongodb\/replicaset0-1 \/srv\/mongodb\/replicaset0-2<\/code><\/pre>\n<p>Dieser Befehl erstellt Verzeichnisse f\u00fcr die drei MongoDB-Instanzen replicaset0-0, replicaset0-1 und replicaset0-2. Starte nun die MongoDB-Instanzen f\u00fcr jede von ihnen mit den folgenden Befehlen:<\/p>\n<p><strong>F\u00fcr Server 1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27017 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>F\u00fcr Server 2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27018 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p><strong>F\u00fcr Server 3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongod --replSet replicaset --port 27019 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt; --dbpath \/srv\/mongodb\/replicaset0-0  --oplogSize 128<\/code><\/pre>\n<p>Der Parameter <code>\u2013oplogSize<\/code> wird verwendet, um zu verhindern, dass der Rechner w\u00e4hrend der Testphase \u00fcberlastet wird. Er hilft dabei, den Speicherplatz zu reduzieren, den jede Festplatte verbraucht.<\/p>\n<p>Verbinde dich nun mit einer der Instanzen \u00fcber die Mongo-Shell, indem du die unten angegebene Portnummer verwendest.<\/p>\n<pre><code class=\"language-markdown\">mongo --port 27017<\/code><\/pre>\n<p>Wir k\u00f6nnen den Befehl <code>rs.initiate()<\/code> verwenden, um den Replikationsprozess zu starten. Du musst den Parameter <code>hostname<\/code> durch den Namen deines Systems ersetzen.<\/p>\n<pre><code class=\"language-markdown\">rs conf = {\n\n  _id: \"replicaset0\",\n\n  members: [\n\n    {  _id: 0,  host: \"&lt;hostname&gt;:27017},\n\n    {  _id: 1,  host: \"&lt;hostname&gt;:27018\"},\n\n    {  _id: 2,  host: \"&lt;hostname&gt;:27019\"}\n\n   ] }<\/code><\/pre>\n<p>Du kannst nun die Konfigurationsobjektdatei als Parameter f\u00fcr den Befehl initiate \u00fcbergeben und ihn wie folgt verwenden:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(rsconf)<\/code><\/pre>\n<p>Und da hast du es! Du hast erfolgreich ein MongoDB Replikatset f\u00fcr <a href=\"https:\/\/kinsta.com\/de\/blog\/backend-entwickler\/\">Entwicklungs<\/a>&#8211; und Testzwecke erstellt.<\/p>\n<h3>Methode 3: Umwandlung einer Standalone-Instanz in ein MongoDB-Replikatset<\/h3>\n<p>MongoDB erm\u00f6glicht es seinen Nutzern, ihre Standalone-Instanzen in Replikat-Sets umzuwandeln. W\u00e4hrend eigenst\u00e4ndige Instanzen meist f\u00fcr die Test- und Entwicklungsphase verwendet werden, sind Replika-Sets Teil der Produktionsumgebung.<\/p>\n<p>Um loszulegen, fahren wir unsere MongoDB-Instanz mit dem folgenden Befehl herunter:<\/p>\n<pre><code class=\"language-markdown\">db.adminCommand({\"shutdown\":\"1\"})<\/code><\/pre>\n<p>Starte deine Instanz neu, indem du den Parameter <code>\u2013repelSet<\/code> in deinem Befehl verwendest, um das Replikatset anzugeben, das du verwenden willst:<\/p>\n<pre><code class=\"language-markdown\">mongod --port 27017 \u2013 dbpath \/var\/lib\/mongodb  --replSet replicaSet1 --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Du musst den Namen deines Servers zusammen mit der eindeutigen Adresse in dem Befehl angeben.<\/p>\n<p>Verbinde die Shell mit deiner MongoDB-Instanz und benutze den Befehl initiate, um den Replikationsprozess zu starten und die Instanz erfolgreich in ein Replikatset umzuwandeln. Du kannst alle grundlegenden Operationen wie das Hinzuf\u00fcgen oder Entfernen einer Instanz mit den folgenden Befehlen durchf\u00fchren:<\/p>\n<pre><code class=\"language-markdown\">rs.add(\u201c&lt;host_name:port&gt;\u201d)<\/code><\/pre>\n<pre><code class=\"language-markdown\">rs.remove(\u201chost-name\u201d)<\/code><\/pre>\n<p>Au\u00dferdem kannst du den Status deines MongoDB-Replikat-Sets mit den Befehlen <code>rs.status()<\/code> und <code>rs.conf()<\/code> \u00fcberpr\u00fcfen.<\/p>\n<h3>Methode 4: MongoDB Atlas &#8211; eine einfachere Alternative<\/h3>\n<p>Replikation und <a href=\"https:\/\/kinsta.com\/de\/blog\/mongodb-sharding\/\">Sharding<\/a> k\u00f6nnen zusammen einen sogenannten Sharded-Cluster bilden. Auch wenn die Einrichtung und Konfiguration recht zeitaufw\u00e4ndig, aber einfach ist, ist MongoDB Atlas eine bessere Alternative als die zuvor genannten Methoden.<\/p>\n<p>Er automatisiert deine Replikats\u00e4tze und macht den Prozess so einfach zu implementieren. Mit wenigen Klicks lassen sich globale Replikats\u00e4tze einrichten, die Disaster Recovery, einfachere <a href=\"https:\/\/kinsta.com\/de\/blog\/adminer\/\">Verwaltung<\/a>, Datenlokalit\u00e4t und den Einsatz in mehreren Regionen erm\u00f6glichen.<\/p>\n<p>In MongoDB Atlas m\u00fcssen wir Cluster erstellen, die entweder ein Replikatset oder ein Sharded-Cluster sein k\u00f6nnen. F\u00fcr ein bestimmtes Projekt ist die Anzahl der Knoten in einem Cluster in anderen Regionen auf insgesamt 40 begrenzt.<\/p>\n<p>Davon ausgenommen sind die freien oder gemeinsam genutzten Cluster und die Google Cloud Regionen, die miteinander kommunizieren. Die Gesamtzahl der Knoten zwischen zwei beliebigen Regionen muss dieser Beschr\u00e4nkung entsprechen. Zum Beispiel, wenn es ein Projekt gibt, in dem:<\/p>\n<ul>\n<li>Region A 15 Knoten hat.<\/li>\n<li>Region B 25 Knoten hat<\/li>\n<li>Region C 10 Knoten hat<\/li>\n<\/ul>\n<p>Wir k\u00f6nnen der Region C nur 5 weitere Knoten zuweisen, da,<\/p>\n<ol>\n<li>Region A + Region B = 40; erf\u00fcllt die Bedingung, dass 40 die maximal zul\u00e4ssige Anzahl von Knoten ist.<\/li>\n<li>Region B + Region C = 25+10+5 (zus\u00e4tzliche Knoten, die C zugewiesen werden) = 40; erf\u00fcllt die Bedingung, dass 40 die maximal zul\u00e4ssige Anzahl von Knoten ist.<\/li>\n<li>Region A + Region C =15+10+5 (zus\u00e4tzliche Knoten, die C zugewiesen werden) = 30; erf\u00fcllt die Bedingung, dass 40 die maximal zul\u00e4ssige Anzahl von Knoten ist.<\/li>\n<\/ol>\n<p>Wenn wir der Region C 10 weitere Knoten zuweisen, so dass die Region C 20 Knoten hat, dann sind Region B + Region C = 45 Knoten. Dies w\u00fcrde die vorgegebene Beschr\u00e4nkung \u00fcberschreiten, so dass du m\u00f6glicherweise keinen Multi-Regionen-Cluster erstellen kannst.<\/p>\n<p>Wenn du einen Cluster erstellst, legt Atlas im Projekt einen Netzwerkcontainer f\u00fcr den Cloud-Anbieter an, falls dieser vorher nicht vorhanden war. Um einen Replikatsatz-Cluster in MongoDB Atlas zu erstellen, f\u00fchrst du den folgenden Befehl im Atlas CLI aus:<\/p>\n<pre><code class=\"language-markdown\">atlas clusters create [name] [options]<\/code><\/pre>\n<p>Achte darauf, dass du einen aussagekr\u00e4ftigen Clusternamen angibst, da er nach der Erstellung des Clusters nicht mehr ge\u00e4ndert werden kann. Das Argument kann ASCII-Buchstaben, Zahlen und Bindestriche enthalten.<\/p>\n<p>F\u00fcr die Erstellung von Clustern in MongoDB gibt es je nach deinen Anforderungen <a href=\"https:\/\/www.mongodb.com\/docs\/atlas\/cli\/stable\/command\/atlas-clusters-create\/\" target=\"_blank\" rel=\"noopener noreferrer\">verschiedene<\/a> Optionen. Wenn du zum Beispiel ein kontinuierliches Cloud-Backup f\u00fcr deinen Cluster m\u00f6chtest, setze <code>--backup<\/code> auf true.<\/p>\n<h2>Umgang mit der Replikationsverz\u00f6gerung<\/h2>\n<p>Die Replikationsverz\u00f6gerung kann ziemlich unangenehm sein. Dabei handelt es sich um eine Verz\u00f6gerung zwischen einem Vorgang auf dem prim\u00e4ren und der Anwendung dieses Vorgangs auf dem sekund\u00e4ren Server. Wenn dein Unternehmen mit gro\u00dfen Datens\u00e4tzen arbeitet, ist eine Verz\u00f6gerung bis zu einem gewissen Grad zu erwarten. Manchmal k\u00f6nnen aber auch externe Faktoren dazu beitragen und die Verz\u00f6gerung ansteigen lassen. Um von einer aktuellen Replikation zu profitieren, stelle sicher, dass:<\/p>\n<ol>\n<li>Du deinen Netzwerkverkehr mit einer stabilen und ausreichenden Bandbreite leitest. Wenn das Netzwerk nicht ausreicht, um die Anforderungen des Replikationsprozesses zu erf\u00fcllen, kommt es zu Verz\u00f6gerungen bei der Replikation der Daten im gesamten Replikatset.<\/li>\n<li>Du einen ausreichenden Festplattendurchsatz hast. Wenn das Dateisystem und das Festplattenger\u00e4t auf dem sekund\u00e4ren Knoten nicht in der Lage sind, die Daten so schnell auf die Festplatte zu \u00fcbertragen wie der prim\u00e4re Knoten, kann der sekund\u00e4re Knoten nicht mithalten. Daher verarbeiten die sekund\u00e4ren Knoten die Schreibanfragen langsamer als der prim\u00e4re Knoten. Dies ist ein h\u00e4ufiges Problem in den meisten mandantenf\u00e4higen Systemen, einschlie\u00dflich virtualisierter Instanzen und gro\u00df angelegter Implementierungen.<\/li>\n<li>Du eine Schreibbest\u00e4tigung nach einem bestimmten Intervall anforderst, um den Sekund\u00e4rknoten die M\u00f6glichkeit zu geben, mit dem Prim\u00e4rknoten gleichzuziehen, insbesondere wenn du einen Massenladevorgang oder eine Dateneingabe durchf\u00fchren willst, die eine gro\u00dfe Anzahl von Schreibvorg\u00e4ngen auf dem Prim\u00e4rknoten erfordert. Die Secondaries sind nicht in der Lage, das Oplog schnell genug zu lesen, um mit den \u00c4nderungen Schritt zu halten, insbesondere bei unbest\u00e4tigten Schreibanfragen.<\/li>\n<li>Du die laufenden Hintergrundaufgaben identifizierst. Bestimmte Aufgaben wie Cron-Jobs, Server-Updates und Sicherheitspr\u00fcfungen k\u00f6nnen unerwartete Auswirkungen auf das Netzwerk oder die Festplattennutzung haben und so zu Verz\u00f6gerungen im Replikationsprozess f\u00fchren.<\/li>\n<\/ol>\n<p>Wenn du dir nicht sicher bist, ob es in deiner Anwendung eine Replikationsverz\u00f6gerung gibt, keine Sorge &#8211; im n\u00e4chsten Abschnitt geht es um Strategien zur Fehlerbehebung!<\/p>\n<h2>Fehlerbehebung bei MongoDB-Replikationssets<\/h2>\n<p>Du hast deine Replikationssets erfolgreich eingerichtet, aber du stellst fest, dass deine Daten auf den Servern inkonsistent sind. Das ist f\u00fcr gro\u00dfe Unternehmen sehr beunruhigend, aber mit raschen Methoden zur <a href=\"https:\/\/kinsta.com\/de\/blog\/wordpress-datenbankproblemen-repariert\/\">Fehlerbehebung<\/a> kannst du die Ursache finden und das Problem dann beheben! Im Folgenden findest du einige g\u00e4ngige Strategien zur Fehlerbehebung bei der Bereitstellung von Replikats\u00e4tzen, die sich als n\u00fctzlich erweisen k\u00f6nnen:<\/p>\n<h3>Replikat-Status pr\u00fcfen<\/h3>\n<p>Wir k\u00f6nnen den aktuellen Status des Replikat-Sets und den Status der einzelnen Mitglieder \u00fcberpr\u00fcfen, indem wir den folgenden Befehl in einer Mongosh-Sitzung ausf\u00fchren, die mit dem prim\u00e4ren Replikat-Set verbunden ist.<\/p>\n<pre><code class=\"language-markdown\"> rs.status()<\/code><\/pre>\n<h3>Pr\u00fcfen des Replikations-Lags<\/h3>\n<p>Wie bereits erw\u00e4hnt, kann die Replikationsverz\u00f6gerung ein ernsthaftes Problem darstellen, da sie dazu f\u00fchrt, dass &#8222;verz\u00f6gerte&#8220; Mitglieder nicht schnell zu prim\u00e4ren werden k\u00f6nnen und die M\u00f6glichkeit besteht, dass verteilte Lesevorg\u00e4nge inkonsistent sind. Wir k\u00f6nnen die aktuelle L\u00e4nge des Replikationsprotokolls mit dem folgenden Befehl \u00fcberpr\u00fcfen:<\/p>\n<pre><code class=\"language-markdown\">rs.printSecondaryReplicationInfo()<\/code><\/pre>\n<p>Dieser Befehl gibt den Wert <code>syncedTo<\/code> zur\u00fcck, d.h. den Zeitpunkt, an dem der letzte Oplog-Eintrag f\u00fcr jedes Mitglied in die Sekund\u00e4rdatei geschrieben wurde. Hier ist ein Beispiel, um das Gleiche zu demonstrieren:<\/p>\n<pre><code class=\"language-markdown\">source: m1.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary\nsource: m2.example.net:27017\n    syncedTo: Mon Oct 10 2022 10:19:35 GMT-0400 (EDT)\n    0 secs (0 hrs) behind the primary<\/code><\/pre>\n<p>Ein verz\u00f6gertes Mitglied kann als 0 Sekunden hinter dem prim\u00e4ren Mitglied angezeigt werden, wenn die Inaktivit\u00e4tszeit auf dem prim\u00e4ren Mitglied gr\u00f6\u00dfer ist als der Wert <code> members[n].secondaryDelaySecs<\/code>.<\/p>\n<h3>Verbindungen zwischen allen Mitgliedern testen<\/h3>\n<p>Jedes Mitglied eines Replikat-Sets muss sich mit jedem anderen Mitglied verbinden k\u00f6nnen. Stelle sicher, dass du die Verbindungen in beide Richtungen \u00fcberpr\u00fcfst. Meistens verhindern Firewall-Konfigurationen oder Netzwerktopologien die normale und erforderliche Konnektivit\u00e4t, was die Replikation blockieren kann.<\/p>\n<p>Nehmen wir zum Beispiel an, dass sich die Mongod-Instanz sowohl mit localhost als auch mit dem Hostnamen &#8222;ExampleHostname&#8220; verbindet, der mit der IP-Adresse 198.41.110.1 verbunden ist:<\/p>\n<pre><code class=\"language-markdown\">mongod --bind_ip localhost, ExampleHostname<\/code><\/pre>\n<p>Um sich mit dieser Instanz zu verbinden, m\u00fcssen Remote-Clients den Hostnamen oder die IP-Adresse angeben:<\/p>\n<pre><code class=\"language-markdown\">mongosh --host ExampleHostname\nmongosh --host 198.41.110.1<\/code><\/pre>\n<p>Wenn ein Replikatset aus drei Mitgliedern, m1, m2 und m3, besteht und den Standardport 27017 verwendet, solltest du die Verbindung wie folgt testen:<\/p>\n<p><strong>Auf m1:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m2 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Auf m2:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m3 --port 27017<\/code><\/pre>\n<p><strong>Auf m3:<\/strong><\/p>\n<pre><code class=\"language-markdown\">mongosh --host m1 --port 27017\nmongosh --host m2 --port 27017<\/code><\/pre>\n<p>Wenn eine Verbindung in irgendeine Richtung fehlschl\u00e4gt, musst du deine <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-eine-firewall\/\">Firewall<\/a>-Konfiguration \u00fcberpr\u00fcfen und sie neu konfigurieren, um die Verbindungen zuzulassen.<\/p>\n<h2>Sichere Kommunikation mit Keyfile-Authentifizierung<\/h2>\n<p>Standardm\u00e4\u00dfig basiert die Keyfile-Authentifizierung in MongoDB auf dem Salted Challenge Response Authentication Mechanism (SCRAM). Dazu muss MongoDB die Anmeldedaten des Benutzers lesen und validieren, die eine Kombination aus Benutzername, Passwort und Authentifizierungsdatenbank enthalten, die der jeweiligen MongoDB-Instanz bekannt ist. Dies ist genau der Mechanismus, der f\u00fcr die Authentifizierung von Benutzern verwendet wird, die bei der Verbindung mit der Datenbank ein Passwort angeben.<\/p>\n<p>Wenn du die Authentifizierung in MongoDB aktivierst, wird automatisch die rollenbasierte Zugriffskontrolle (Role-Based Access Control, RBAC) f\u00fcr das Replikatset aktiviert und der Benutzer erh\u00e4lt eine oder mehrere Rollen, die seinen Zugriff auf die Datenbankressourcen bestimmen. Wenn RBAC aktiviert ist, bedeutet das, dass nur der authentifizierte Mongo-Benutzer mit den entsprechenden Berechtigungen auf die Ressourcen des Systems zugreifen kann.<\/p>\n<p>Die Schl\u00fcsseldatei wirkt wie ein gemeinsames Passwort f\u00fcr jedes Mitglied des Clusters. So kann jede Mongo-Instanz im Replikatorset den Inhalt der Schl\u00fcsseldatei als gemeinsames Passwort f\u00fcr die Authentifizierung der anderen Mitglieder im Einsatz verwenden.<\/p>\n<p>Nur die Mongod-Instanzen mit der richtigen Schl\u00fcsseldatei k\u00f6nnen dem Replikatset beitreten. Die L\u00e4nge eines Schl\u00fcssels muss zwischen 6 und 1024 Zeichen liegen und darf nur Zeichen im base64-Set enthalten. Bitte beachte, dass MongoDB beim Lesen der Schl\u00fcssel die Leerzeichen entfernt.<\/p>\n<p>Du kannst <strong>eine Schl\u00fcsseldatei<\/strong> mit Hilfe verschiedener Methoden <strong>erzeugen<\/strong>. In diesem Tutorial verwenden wir <code>openssl <\/code>, um eine komplexe Zeichenkette mit 1024 zuf\u00e4lligen Zeichen zu erzeugen, die als gemeinsames Passwort verwendet werden kann. Anschlie\u00dfend wird <code>chmod<\/code> verwendet, um die Dateiberechtigungen so zu \u00e4ndern, dass nur der Dateibesitzer Leserechte hat. Vermeide es, die Schl\u00fcsseldatei auf Speichermedien zu speichern, die leicht von der Hardware getrennt werden k\u00f6nnen, auf der die Mongod-Instanzen installiert sind, z. B. auf einem USB-Laufwerk oder einem an das Netzwerk angeschlossenen Speicherger\u00e4t. Im Folgenden findest du den Befehl zum Erstellen einer Schl\u00fcsseldatei:<\/p>\n<pre><code class=\"language-markdown\">openssl rand -base64 756 &gt; &lt;path-to-keyfile&gt;\nchmod 400 &lt;path-to-keyfile&gt;<\/code><\/pre>\n<p>Als N\u00e4chstes <strong>kopierst du die Schl\u00fcsseldatei auf jedes Mitglied des Replikationssets<\/strong>. Stelle sicher, dass der Benutzer, der die Mongod-Instanzen betreibt, Eigent\u00fcmer der Datei ist und auf die Schl\u00fcsseldatei zugreifen kann. Nachdem du das getan hast, f\u00e4hrst du <strong>alle Mitglieder des Replikatorsets herunter<\/strong>, beginnend mit den Secondaries. Sobald alle Sekund\u00e4rinstanzen offline sind, kannst du mit dem Herunterfahren der Prim\u00e4rinstanz fortfahren. Es ist wichtig, diese Reihenfolge einzuhalten, um m\u00f6gliche Rollbacks zu verhindern. Fahre nun die Mongod-Instanz herunter, indem du den folgenden Befehl ausf\u00fchrst:<\/p>\n<pre><code class=\"language-markdown\">use admin\ndb.shutdownServer()<\/code><\/pre>\n<p>Nachdem der Befehl ausgef\u00fchrt wurde, sind alle Mitglieder des Replikat-Sets offline.<strong> Starten<\/strong>\u00a0nun<strong> jedes Mitglied des Replikatorsets mit aktivierter Zugriffskontrolle neu<\/strong>.<\/p>\n<p>Starte f\u00fcr jedes Mitglied des Replikationssets die mongod-Instanz entweder mit der Einstellung <code>security.keyFile<\/code> in der Konfigurationsdatei oder mit der Kommandozeilenoption <code>--keyFile<\/code>.<\/p>\n<p>Wenn du eine Konfigurationsdatei verwendest, setze<\/p>\n<ul>\n<li>security.keyFile auf den Pfad der Schl\u00fcsseldatei und<\/li>\n<li>replication.replSetName auf den Namen des Replikationssets.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">security:\n  keyFile: &lt;path-to-keyfile&gt;\nreplication:\n  replSetName: &lt;replicaSetName&gt;\nnet:\n   bindIp: localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Starte die Mongod-Instanz mithilfe der Konfigurationsdatei:<\/p>\n<pre><code class=\"language-markdown\">mongod --config &lt;path-to-config-file&gt;<\/code><\/pre>\n<p>Wenn du die Kommandozeilenoptionen verwendest, starte die mongod-Instanz mit den folgenden Optionen:<\/p>\n<ul>\n<li>&#8211;keyFile setzt du auf den Pfad der Schl\u00fcsseldatei, und<\/li>\n<li>&#8211;replSet auf den Namen des Replikatsets.<\/li>\n<\/ul>\n<pre><code class=\"language-markdown\">mongod --keyFile &lt;path-to-keyfile&gt; --replSet &lt;replicaSetName&gt; --bind_ip localhost,&lt;hostname(s)|ip address(es)&gt;<\/code><\/pre>\n<p>Du kannst je nach Bedarf zus\u00e4tzliche Optionen f\u00fcr deine Konfiguration angeben. Wenn du zum Beispiel m\u00f6chtest, dass sich Remote-Clients mit deinem Deployment verbinden oder deine Deployment-Mitglieder auf verschiedenen Hosts laufen, gibst du die Option &#8211;bind_ip an. Weitere Informationen findest du unter <a href=\"https:\/\/www.mongodb.com\/docs\/manual\/release-notes\/3.6-compatibility\/#std-label-3.6-bind_ip-compatibility\" target=\"_blank\" rel=\"noopener noreferrer\">\u00c4nderungen der Kompatibilit\u00e4t von Localhost-Bindungen<\/a>.<\/p>\n<p>Als N\u00e4chstes stellst du <strong>\u00fcber die localhost-Schnittstelle eine Verbindung zu einem Mitglied des Replikationssets her<\/strong>. Du musst mongosh auf demselben physischen Rechner ausf\u00fchren wie die mongod-Instanz. Diese Schnittstelle ist nur verf\u00fcgbar, wenn noch keine Benutzer f\u00fcr die Bereitstellung erstellt wurden, und wird nach der Erstellung des ersten Benutzers automatisch geschlossen. Anschlie\u00dfend starten wir das Replikatset.<\/p>\n<p>F\u00fchre in mongosh die Methode <code>rs.initiate()<\/code> aus:<\/p>\n<pre><code class=\"language-markdown\">rs.initiate(\n  {\n    _id: \"myReplSet\",\n    members: [\n      { _id: 0, host: \"mongo1:27017\" },\n      { _id: 1, host: \"mongo2:27017\" },\n      { _id: 2, host: \"mongo3:27017\" }\n    ]\n  }\n)<\/code><\/pre>\n<p>Wie bereits erw\u00e4hnt, w\u00e4hlt diese Methode eines der Mitglieder zum prim\u00e4ren Mitglied des Replikatsets. Um das prim\u00e4re Mitglied zu finden, verwende <code>rs.status()<\/code>. Verbinde dich mit dem prim\u00e4ren Mitglied, bevor du fortf\u00e4hrst.<\/p>\n<p><strong>Erstelle<\/strong> nun <strong>den Benutzer Administrator<\/strong>. Du kannst einen Benutzer mit der Methode <code>db.createUser()<\/code> hinzuf\u00fcgen. Achte darauf, dass der Benutzer mindestens die Rolle <code>userAdminAnyDatabase<\/code> in der Admin-Datenbank hat.<\/p>\n<p>Im folgenden Beispiel wird der Benutzer &#8222;batman&#8220; mit der Rolle <code>userAdminAnyDatabase<\/code> in der Admin-Datenbank angelegt:<\/p>\n<pre><code class=\"language-markdown\">admin = db.getSiblingDB(\"admin\")\nadmin.createUser(\n  {\n    user: \"batman\",\n    pwd: passwordPrompt(), \/\/ or cleartext password\n    roles: [ { role: \"userAdminAnyDatabase\", db: \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Gib das Passwort ein, das du zuvor erstellt hast, wenn du dazu aufgefordert wirst.<\/p>\n<p>Als N\u00e4chstes musst du <strong>dich als Benutzer Administrator authentifizieren<\/strong>. Verwende dazu <code>db.auth()<\/code>, um dich zu authentifizieren. Zum Beispiel:<\/p>\n<p>db.getSiblingDB(&#8222;admin&#8220;).auth(&#8222;batman&#8220;, passwordPrompt()) \/\/ oder Klartextpasswort<\/p>\n<p>Alternativ kannst du eine neue Mongosh-Instanz mit dem prim\u00e4ren Replikationsset-Mitglied verbinden, indem du die Parameter <code>-u &lt;username&gt;<\/code>,<code> -p &lt;password&gt;<\/code> und <code>--authenticationDatabase<\/code> verwendest.<\/p>\n<pre><code class=\"language-markdown\">mongosh -u \"batman\" -p  --authenticationDatabase \"admin\"<\/code><\/pre>\n<p>Auch wenn du das Passwort nicht in das <code>-p<\/code> Kommandozeilenfeld eingibst, fragt mongosh nach dem Passwort.<\/p>\n<p>Zum Schluss <strong>erstellst<\/strong> du <strong>den Cluster-Administrator<\/strong>. Die Rolle <code>clusterAdmin<\/code> erm\u00f6glicht den Zugriff auf Replikationsvorg\u00e4nge, wie z. B. die Konfiguration des Replikatsets.<\/p>\n<p>Wir erstellen einen Cluster-Administrator-Benutzer und weisen ihm die Rolle <code>clusterAdmin<\/code> in der Admin-Datenbank zu:<\/p>\n<pre><code class=\"language-markdown\">db.getSiblingDB(\"admin\").createUser(\n  {\n    \"user\": \"robin\",\n    \"pwd\": passwordPrompt(),     \/\/ or cleartext password\n    roles: [ { \"role\" : \"clusterAdmin\", \"db\" : \"admin\" } ]\n  }\n)<\/code><\/pre>\n<p>Gib das Passwort ein, wenn du dazu aufgefordert wirst.<\/p>\n<p>Wenn du m\u00f6chtest, kannst du weitere Benutzer anlegen, um Clients zuzulassen und mit dem Replikatorset zu interagieren.<\/p>\n<p>Und voila! Du hast die Keyfile-Authentifizierung erfolgreich aktiviert!<\/p>\n\n<h2>Zusammenfassung<\/h2>\n<p>Die Replikation ist eine wichtige Voraussetzung f\u00fcr Datenbanken, vor allem, wenn immer mehr Unternehmen expandieren. Sie verbessert die <a href=\"https:\/\/kinsta.com\/de\/blog\/apm-tools\/\">Leistung<\/a>, die Datensicherheit und die Verf\u00fcgbarkeit des Systems erheblich. Apropos Leistung: F\u00fcr deine WordPress-Datenbank ist es von zentraler Bedeutung, Leistungsprobleme zu \u00fcberwachen und sie rechtzeitig zu beheben, z. B. mit <a href=\"https:\/\/kinsta.com\/de\/apm-tool\/\">Kinsta APM<\/a>, Jetpack und Freshping, um nur einige zu nennen.<\/p>\n<p>Die Replikation hilft dabei, die Daten auf mehreren Servern zu sch\u00fctzen und verhindert, dass deine Server unter schweren Ausfallzeiten leiden (oder noch schlimmer &#8211; deine Daten ganz verloren gehen). In diesem Artikel haben wir die Erstellung eines Replikationssets und einige Tipps zur Fehlerbehebung sowie die Bedeutung der Replikation behandelt. Nutzt du die MongoDB-Replikation in deinem Unternehmen und hat sie sich f\u00fcr dich als n\u00fctzlich erwiesen? Lass es uns im Kommentarbereich unten wissen!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MongoDB ist eine NoSQL-Datenbank, die JSON-\u00e4hnliche Dokumente mit dynamischen Schemata verwendet. Wenn du mit Datenbanken arbeitest, ist es immer gut, einen Notfallplan zu haben, falls einer &#8230;<\/p>\n","protected":false},"author":199,"featured_media":60061,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[991],"class_list":["post-60060","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-web-entwicklungs-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden) - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)\" \/>\n<meta property=\"og:description\" content=\"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-16T07:43:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-28T15:19:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"26\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)\",\"datePublished\":\"2023-03-16T07:43:53+00:00\",\"dateModified\":\"2023-08-28T15:19:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\"},\"wordCount\":5713,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\",\"name\":\"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden) - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\",\"datePublished\":\"2023-03-16T07:43:53+00:00\",\"dateModified\":\"2023-08-28T15:19:20+00:00\",\"description\":\"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webentwicklungs-Tools\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/web-entwicklungs-tools\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden) - Kinsta\u00ae","description":"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/","og_locale":"de_DE","og_type":"article","og_title":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)","og_description":"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!","og_url":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-03-16T07:43:53+00:00","article_modified_time":"2023-08-28T15:19:20+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Jeremy Holcombe","Gesch\u00e4tzte Lesezeit":"26\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)","datePublished":"2023-03-16T07:43:53+00:00","dateModified":"2023-08-28T15:19:20+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/"},"wordCount":5713,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/","url":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/","name":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden) - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","datePublished":"2023-03-16T07:43:53+00:00","dateModified":"2023-08-28T15:19:20+00:00","description":"Ein MongoDB-Replikatset ist eine Gruppe miteinander verbundener MongoDB-Instanzen, die Redundanz und Hochverf\u00fcgbarkeit bieten. Setze Replikats\u00e4tze ein und sichere deine Daten!","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/03\/mongodb-replica-set.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/mongodb-replikaset\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"Webentwicklungs-Tools","item":"https:\/\/kinsta.com\/de\/thema\/web-entwicklungs-tools\/"},{"@type":"ListItem","position":3,"name":"Aufbau eines robusten MongoDB Replikatsets in Rekordzeit (4 Methoden)"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60060","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=60060"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60060\/revisions"}],"predecessor-version":[{"id":65290,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/60060\/revisions\/65290"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/translations\/dk"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/60060\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/60061"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=60060"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=60060"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=60060"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}