Checklisten für den Betrieb und die Entwicklung von MongoDB sollen Datenbankadministratoren helfen, Probleme in der MongoDB-Produktionsumgebung zu vermeiden. Eine Entwicklungs-Checkliste sollte folgende Punkte ansprechen:
- Schemadesign
- Dauerhaftigkeit der Daten
- Replikation
- Laufwerke
- Sharding
Eine Operations-Checkliste hingegen befasst sich mit...
- Replikation
- Dateisystem
- Sharding
- Hardware
- Journaling (WiredTiger Storage Engine)
- Betriebssystemkonfigurationen
- Bereitstellung auf Cloud-Hardware
- Überwachung
- Backups und Lastverteilung
Bevor Sie ein Projekt starten, ist es ratsam, an einer Betriebs- und Entwicklungscheckliste zu arbeiten, um einen reibungslosen Betrieb von MongoDB in der Produktion zu ermöglichen. In diesem Artikel wird die Betriebs- und Entwicklungscheckliste vor der Bereitstellung von MongoDB erläutert.
Checkliste für den MongoDB-Betrieb
Replikation
Alle nicht ausgeblendeten Replikat-Mitgliedersätze sollten in Bezug auf Festplatte, RAM, Netzwerkeinrichtung und CPU identisch bereitgestellt werden.
Die Oplog-Größe sollte richtig konfiguriert werden, um Betriebsanforderungen zu erfüllen, wie z. B.:
- Um die Notwendigkeit einer vollständigen Neusynchronisierung zu vermeiden, sollte das Replikat-Oplog-Anwendungsfenster die reguläre Ausfallzeit und das Wartungsfenster abdecken.
- Um ein Replikationssatzmitglied wiederherzustellen, sollte das Replikat-Oplog-Fenster immer die benötigte Zeit abdecken.
Der Produktionssatz sollte mindestens drei datentragende Knoten enthalten, die mit aktiviertem Journaling ausgeführt werden. Außerdem sollten Schreibvorgänge mit w:„majority“ Write Concern ausgegeben werden, um die Datenverfügbarkeit und -dauerhaftigkeit zu gewährleisten.
Die Bereitstellung sollte eine ungerade Anzahl an stimmberechtigten Mitgliedern enthalten, um den Abstimmungsprozess zu erleichtern, wenn der primäre Knoten im Cluster ausfällt.
Anstatt IP-Adressen zu verwenden, die möglicherweise eine Änderung der Konfiguration aufgrund von IP-Änderungen erforderlich machen, wird die Verwendung logischer DNS-Hostnamen empfohlen.
Stellen Sie sicher, dass Mongod-Instanzen 0 oder 1 Stimme haben.
Alle Mongod-Instanzen sollten vollständig und bidirektional verbunden sein, sodass die Datenkommunikation zwischen den beteiligten Knoten problemlos möglich ist.
Journal
Dies ist eine Write-Ahead-Logging-Strategie für Journaldateien auf der Festplatte, die verwendet wird, um die Dauerhaftigkeit der Daten im Falle eines Fehlers sicherzustellen. Aus diesem Grund sollte für alle Instanzen das Journaling aktiviert sein, insbesondere bei schreibintensiven Workloads.
Berücksichtigen Sie jedoch, dass dies die Verstärkung im Snapshot-Stil beeinflusst, da die Datensätze, die den Status der Datenbank darstellen, auf partitionierten Volumes verbleiben.
Dateisystem
Verwenden Sie keine NFS-Laufwerke (News File System) für dbPath. NFS-Laufwerke können möglicherweise zu einer destabilisierten Leistung führen. Virtuelle VMware-Laufwerke werden zur Verwendung durch VMware-Benutzer empfohlen.
Stellen Sie sicher, dass Ihre Festplattenpartitionen mit Ihren RAIDON-Konfigurationen übereinstimmen.
Für Linux/Unix-Benutzer wird die Verwendung von XFS empfohlen. Es ist bekannt, dass XFS mit MongoDB besser abschneidet.
Für Benutzer des Windows-Betriebssystems wird das NTFS-Dateisystem empfohlen. Sie sollten die Verwendung eines FAT-Dateisystems vermeiden.
Bereitstellung auf Cloud-Hardware
Windows Azure:Ändern Sie das TCP-Keepalive (tcp_keepalive_time) auf 100-120. Das TCP-Sit-Out-of-Gang-Timeout auf dem Azure-Stack-Balancer ist für das Association-Pooling-Verhalten von MongoDB ebenfalls moderat
Verwenden Sie MongoDB 2.6.4 oder neuere Versionen auf Frameworks mit Speicher mit hoher Latenz, wie z. B. Windows Azure, da diese Versionen Ausführungsverbesserungen für diese Frameworks enthalten.
Sharding
Platzieren Sie Ihre Konfigurationsserver auf dedizierter Hardware für eine ideale Ausführung in ausgedehnten Clustern.
Stellen Sie sicher, dass die Hardware über ausreichend RAM verfügt, um die Informationsaufzeichnungen vollständig im Arbeitsspeicher zu halten, und über dedizierten Speicherplatz verfügt.
Stellen Sie Mongos-Router in Übereinstimmung mit den Generation Setup-Richtlinien bereit.
Synchronisieren Sie die Uhren auf allen Komponenten Ihres Sharding-Clusters mit NTP.
Stellen Sie ein vollständiges bidirektionales Netzwerk zwischen Mongos, Mongod und Konfigurationsservern sicher.
Verwenden Sie CNAMEs, um Ihre Konfigurationsserver im Cluster zu erkennen, sodass Sie Ihre Konfigurationsserver ohne Ausfallzeit umbenennen und neu nummerieren können.
Überwachung
Sie können Tools wie MongoDB Cloud Manager, ClusterControl oder ein anderes Überwachungsframework verwenden, um wichtige Datenbankmetriken zu überprüfen und Alarme einzurichten. Integrieren Sie Warnungen für die Metriken:
- Warteschlangen
- Replikations-Oplog-Fenster
- Behauptungen
- Seitenfehler
- Replikationsverzögerung
Überwachen Sie Hardwaremetriken für Ihre Server. Achten Sie besonders auf den verfügbaren Speicherplatz, die Festplattennutzung und die CPU
Hardware
Verwenden Sie RAID10- und SSD-Laufwerke für optimale Leistung.
SAN und Virtualisierung:
Stellen Sie sicher, dass jede der Mongod-Instanzen IOPS für ihren dbPath bereitgestellt hat oder ihr physisches Laufwerk oder ihre LUN beansprucht.
Vermeiden Sie dynamische Speicher-Highlights, wie z. B. Speicheranschwellen, wenn Sie in virtuellen Umgebungen laufen.
Vermeiden Sie es, alle Copyset-Personen auf dasselbe SAN zu setzen, da das SAN ein einziger Punkt der Enttäuschung sein kann.
Lastenausgleich
Entwerfen Sie Load Balancer, um "Sticky Sessions" oder "Client-Affinität" mit einem angemessenen Timeout für bestehende Verbindungen zu ermöglichen.
Vermeiden Sie es, Load Balancer zwischen den MongoDB-Cluster- oder Replikatsatzkomponenten zu platzieren.
Sicherungen
Planen Sie periodische Tests Ihres Sicherungs- und Wiederherstellungsprozesses, um Zeitmesser zur Hand zu haben und seine Nützlichkeit zu bestätigen.
Betriebssystemkonfiguration
Windows
Erwägen Sie die Deaktivierung von NTFS-Upgrades zum Zeitpunkt des letzten Zugriffs.
Formatieren Sie NTFS-Festplatten, indem Sie die standardmäßige Zuteilungseinheitsgröße von 4096 Byte verwenden.
Linux
Schalte die riesigen transparenten Seiten aus.
Nehmen Sie Anpassungen an den Lesekopfeinstellungen der Würfel vor, in denen Ihre Datenbankdateien gespeichert sind. Der Readahead der WiredTiger-Speicher-Engine sollte zwischen 8 und 32 eingestellt werden.
Wenn Sie tuned auf RHEL / CentOS verwenden, müssen Sie Ihr angepasstes Profil anpassen. Zahlreiche der optimierten Profile, die mit RHEL/CentOS geliefert werden, können die Ausführung mit ihren Standardeinstellungen beeinträchtigen. Passen Sie Ihr ausgewähltes abgestimmtes Profil an:
Direkte Hugepages deaktivieren.
Setzen Sie Readahead zwischen 8 und 32 in jedem Fall der Sortierung von Kapazitätsmedien.
Verwenden Sie die Noop- oder Deadline-Disk-Scheduler für SSD-Laufwerke.
Verwenden Sie den Noop Disk Scheduler für virtualisierte Laufwerke in Gast-VMs.
Deaktivieren Sie NUMA oder setzen Sie vm.zone_reclaim_mode auf 0 und führen Sie Mongod-Vorkommen mit Knotenverschachtelung aus.
Passen Sie die ulimit-Werte auf Ihrer Hardware an Ihren Anwendungsfall an. Für den Fall, dass verschiedene Mongod- oder Mongos-Vorkommen unter demselben Client ausgeführt werden, skalieren Sie die ulimit-Werte auf ähnliche Weise.
Entwerfen Sie geeignete Datensatz-Handles (fs.file-max), Teil-PID-Einschränkungen (kernel.pid_max), maximale Threads pro Prozess (kernel.threads-max) und maximale Anzahl von Speicherumrissbereichen pro Prozess (vm.max_map_count) für Ihre Zusendung. Für expansive Frameworks bieten die folgenden Werte einen guten Ausgangspunkt:
fs.file-max value of 98000,
kernel.pid_max value of 64000,
kernel.threads-max value of 64000, and vm.max_map_count value of 128000
Stellen Sie sicher, dass Ihr Framework Auslagerungsspeicher konfiguriert hat.
Verweis auf die Dokumentation deines Betriebssystems für interessante Punkte bezüglich der richtigen Größe.
Vergewissern Sie sich, dass das Standard-TCP-Keepalive des Systems richtig eingestellt ist. Ein Wert von 300 ergibt häufig eine überlegene Leistung für Replikatsätze und fragmentierte Cluster.
Checkliste für die MongoDB-Entwicklung
Replikation
Verwenden Sie eine ungerade Anzahl von stimmberechtigten Personen, um sicherzustellen, dass die Wahlen effektiv fortgesetzt werden. Sie haben bis zu 7 stimmberechtigte Personen. Für den Fall, dass Sie eine gerade Anzahl von stimmberechtigten Personen haben und Einschränkungen, wie z. B. Kosten, die Einbeziehung eines anderen sekundären Mitglieds als stimmberechtigtes Mitglied verbieten, können Sie einen Schiedsrichter einbeziehen, um eine ungerade Anzahl von Stimmen zu garantieren.
Stellen Sie sicher, dass Ihre Secondaries auf dem neuesten Stand bleiben, indem Sie Überwachungstools verwenden und geeignete Schreibangelegenheiten angeben.
Verwenden Sie keine zusätzlichen Lesevorgänge, um den gesamten Lesedurchsatz zu skalieren.
Schemadesign
Daten in MongoDB enthalten ein dynamisches Muster. Sammlungen halten die Berichtsstruktur nicht aufrecht. Dies fördert die iterative Verbesserung und den Polymorphismus. Auf jeden Fall weisen Sammlungen häufig Aufzeichnungen mit überaus homogenen Strukturen auf.
Legen Sie den Sammlungssatz fest, den Sie benötigen, und die Indizes, die zum Sichern Ihrer Abfragen erforderlich sind. Beim Sonderfall des _id-Index müssen Sie ausdrücklich alle Indizes erstellen:MongoDB erstellt selbstverständlich keine anderen Indizes als _id.
Stellen Sie sicher, dass Ihr Schemaplan Ihre Bereitstellungsart unterstützt:Falls Sie Sharding-Cluster für die horizontale Skalierung verwenden möchten, planen Sie Ihr Schema so, dass es einen starken Shard-Schlüssel enthält. Der Shard-Schlüssel beeinflusst die Lese- und Schreibausführung, indem er entscheidet, wie MongoDB Daten segmentiert. Sie können den Shard-Schlüssel nicht mehr ändern, nachdem er festgelegt wurde.
Stellen Sie sicher, dass Ihr Schemaplan nicht von indizierten Clustern abhängt, deren Länge unbegrenzt anwächst. Normalerweise kann die beste Ausführung erreicht werden, wenn solche indizierten Cluster weniger als 1000 Komponenten haben.
Berücksichtigen Sie beim Entwerfen Ihres Schemas die Grenzen der Dokumentschätzung. Die Beschränkung der BSON-Dokumentschätzung beträgt 16 MB pro Dokument. Falls Sie größere Berichte benötigen, verwenden Sie GridFS.
Treiber
Nutzen Sie das Assoziations-Pooling. Die meisten MongoDB-Treiber unterstützen Zuordnungspooling. Ändern Sie die Größe des Zuordnungspools entsprechend Ihrem Anwendungsfall, beginnend bei 110–115 % der normalen Anzahl gleichzeitiger Datenbankanforderungen.
Stellen Sie sicher, dass Ihre Anwendungen zeitweilige Schreib- und Lesefehler bei Replikat-Set-Wahlen handhaben.
Stellen Sie sicher, dass Ihre Anwendungen fehlgeschlagene Anfragen verarbeiten, und versuchen Sie es gegebenenfalls erneut. Treiber nicht
fehlgeschlagene Anfragen natürlich wiederholen.
Exponentielles Backoff-Prinzip für Wiederholungsversuche bei Datenbankanfragen verwenden.
Verwenden Sie cursor.maxTimeMS() für Lesevorgänge und wtimeout für Schreibvorgänge, falls Sie die Ausführungsdauer für Datenbankoperationen begrenzen möchten.
Datenhaltbarkeit
Stellen Sie sicher, dass Ihr Replikatsatz mindestens drei datentragende Hubs mit w:majority compose-Bedenken enthält. Drei datentragende Hubs sind für eine replikatsatzweite Datensolidität erforderlich.
Garantieren, dass alle Instanzen Journaling verwenden.
Sharding
Stellen Sie sicher, dass Ihr Shard-Schlüssel die Last gleichmäßig auf Ihre Shards überträgt.
Nutzen Sie gezielte Operationen für Workloads, die mit der Anzahl der Shards skaliert werden müssen.
Seit MongoDB 3.6 und höher geben Secondaries keine verwaisten Daten mehr zurück, es sei denn, sie verwenden Lesebedenken „verfügbar“ (das ist das standardmäßige Lesebedenken für Lesevorgänge gegen Secondaries, wenn sie nicht mit kausal zuverlässigen Sitzungen zusammenhängen).
Beginnend mit MongoDB 3.6 behalten alle Mitglieder des Shard-Replikat-Satzes Chunk-Metadaten bei, wodurch sie Waisen herausfiltern können, wenn sie "verfügbar" nicht verwenden. Daher können nicht zielgerichtete oder Broadcast-Anfragen, die "verfügbar" nicht verwenden, sicher für jedes Mitglied ausgeführt werden und geben keine verwaisten Informationen zurück.
Der „zugängliche“ Lesebereich kann verwaiste Dokumente von Hilfsmitgliedern zurückgeben, da er nicht auf überholte Chunk-Metadaten prüft. In jedem Fall, falls die Rückgabe verwaister Dokumente für eine Anwendung unbedeutend ist, gibt der „verfügbare“ Lesebereich die geringstmöglichen Inaktivitäts-Lesevorgänge unter den verschiedenen Lesebereichen an.
Teilen Sie Chunks vorab auf und passen Sie sie manuell an, wenn Sie umfangreiche Datensätze in eine neue nicht gehashte fragmentierte Sammlung einbetten. Das Pre-Splitting und die physische Anpassung ermöglichen die Verteilung des Embed-Stacks auf die Shards, wodurch die Ausführung für die Startlast erweitert wird.
Schlussfolgerung
Die Verwaltung von Betriebs- und Entwicklungs-Checklisten ist ein entscheidender Schritt, den Entwickler einbeziehen müssen, wenn sie MongoDB in der Produktion verwenden. Sie sind wichtige Überlegungen, da sie den Aufgabenfluss für ein Projekt in der Produktion verbessern. Die MongoDB-Produktionsumgebung erfordert stabile und zuverlässige Datenbankfunktionen, da die Datenbank in der Produktion reale Arbeitsdaten speichert. Die Integrität der Daten hängt von der Stabilität der Datenbank ab, die dadurch ermöglicht wird, dass sichergestellt wird, dass alle Punkte auf der Betriebs- und Entwicklungscheckliste vor der Produktion bearbeitet werden.