Arbeiten mit MariaDB Read Replicas - Amazon Relational Database Service

Arbeiten mit MariaDB Read Replicas

Dieser Abschnitt enthält spezifische Informationen zum Arbeiten mit Lesereplikaten unter Amazon RDS-MariaDB. Allgemeine Informationen zu Lesereplikaten und Anleitungen zu ihrer Verwendung finden Sie in Arbeiten mit Lesereplikaten.

Konfiguration von Read Replicas mit MariaDB

Bevor eine MariaDB-DB-Instance als Replikationsquelle eingesetzt werden kann, müssen Sie automatische Sicherungen für die DB-Instance aktivieren, indem Sie den Aufbewahrungszeitraum für Sicherungen auf einen anderen Wert als 0 festlegen. Diese Anforderung gilt auch für ein Lesereplikat, das die Quell-DB-Instance für ein anderes Lesereplikat ist.

Sie können bis zu fünf Lesereplikate von einer DB-Instance erstellen. Damit die Replikation effektiv durchgeführt werden kann, sollte jedes Lesereplikat über dieselbe Menge an Rechen- und Speicherressourcen wie die Quell-DB-Instance verfügen. Wenn Sie die Quell-DB-Instance skalieren, skalieren Sie auch die Lesereplikate.

Wenn ein Lesereplikat eine MariaDB-Version ausführt, können Sie diese als die Quell-DB-Instance für ein anderes Lesereplikat festlegen. Sie können beispielsweise ReadReplica1 aus MyDBInstance erstellen und anschließend ReadReplica2 aus ReadReplica1. Updates für MyDBInstance werden auf ReadReplica1 und anschließend von ReadReplica1 auf ReadReplica2 repliziert. Sie können nicht mehr als vier Instances haben, die in einer Replikationskette mitwirken. Sie können beispielsweise ReadReplica1 aus MySourceDBInstance erstellen und anschließend ReadReplica2 aus ReadReplica1 erstellen und anschließend ReadReplica3 aus ReadReplica2 erstellen, aber Sie können nicht ReadReplica4 aus ReadReplica3 erstellen.

Wenn Sie ein MariaDB-Lesereplikat hochstufen, das wiederum in andere Lesereplikate repliziert, bleiben jene Lesereplikate aktiv. Betrachten Sie ein Beispiel, bei dem MyDBInstance1 nach MyDBInstance2 repliziert und MyDBInstance2 nach MyDBInstance3 repliziert. Wenn Sie MyDBInstance2 hochstufen, wird die Replikation von MyDBInstance1 nach MyDBInstance 2 beendet, aber MyDBInstance2 repliziert weiterhin nach MyDBInstance3.

Erstellen Sie zuerst das Lesereplikat und ändern Sie es dann, um automatische Sicherungen für das Lesereplikat für Amazon RDS-MariaDB zu aktivieren.

Sie können mehrere gleichzeitige Lesereplikate erstellen oder Aktionen löschen, die auf dieselbe Quell-DB-Instance verweisen, solange Sie sich innerhalb der Grenze von fünf Lesereplikaten für eine Quell-Instance bewegen.

Updates von Read Replicas mit MariaDB

Lesereplikate wurden zur Unterstützung von Leseabfragen entwickelt. Jedoch könnten gelegentliche Updates notwendig sein. Sie könnten beispielsweise einen Index hinzufügen, um die spezifischen Abfragetypen beim Zugriff auf das Replica zu beschleunigen. Sie können Updates aktivieren, indem Sie den Parameter read_only in der DB-Parametergruppe für das Lesereplikat auf 0 setzen.

Bereitstellungen von Multi-AZ Read Replicas mit MariaDB

Sie können ein Lesereplikat aus Single-AZ- oder Multi-AZ-DB-Instance-Bereitstellungen erstellen. Sie können Multi-AZ-Bereitstellungen verwenden, um die Haltbarkeit und Verfügbarkeit kritischer Daten zu verbessern, aber Sie können Multi-AZ nicht zweitranging noch für schreibgeschützte Abfragen verwenden. Stattdessen können Sie Lesereplikate aus Multi-AZ-DB-Instances mit hohem Datenverkehr erstellen, um schreibgeschützte Abfragen auslagern zu können. Wenn die Quell-Instance einer Multi-AZ-Bereitstellung ein Failover zur sekundären Instance durchführt, werden alle zugehörigen Lesereplikate automatisch auf die Verwendung der sekundären (jetzt primären) Instance als Replikationsquelle umgeschaltet. Weitere Informationen finden Sie unter Hohe Verfügbarkeit (Multi-AZ) für Amazon RDS.

Sie können ein Lesereplikat als Multi-AZ-DB-Instance erstellen. Amazon RDS erstellt eine Standby-Version des Replikats in einer anderen Availability Zone, um ein Failover für das Replikat zu unterstützen. Das Erstellen Ihres Lesereplikats als Multi-AZ-DB-Instance ist unabhängig davon, ob die Quelldatenbank eine Multi-AZ-DB-Instance ist.

Überwachung von MariaDB Read Replicas

Für MariaDB-Lesereplikate können Sie die Replikationsverzögerung in Amazon CloudWatch überwachen, indem Sie die Amazon RDS-Metrik ReplicaLag anzeigen. Die Kennzahl ReplicaLag meldet den Wert des Feldes Seconds_Behind_Master des Befehls SHOW SLAVE STATUS.

Häufige Ursachen für Replikationsverzögerung in MariaDB:

  • Ein Netzwerkausfall.

  • Schreibvorgänge auf Tabellen mit Indizes auf einem Lesereplikat. Wenn der Parameter read_only im Lesereplikat nicht auf 0 gesetzt ist, kann es die Replikation unterbrechen.

  • Die Verwendung einer nicht-transaktionalen Speicher-Engine wie MyISAM: Replikation wird für die InnoDB-Speicher-Engine nur in MariaDB ab 10.2 und für die XtraDB-Speicher-Engine nur in MariaDB bis 10.1 unterstützt.

Wenn die Metrik ReplicaLag 0 erreicht, hat das Replica den Stand der Quell-DB-Instance erreicht. Wenn die Metrik ReplicaLag -1 zurückgibt, ist die Replikation aktuell nicht aktiv. ReplicaLag = -1 ist gleich Seconds_Behind_Master = NULL.

Starten und Stoppen der Replikation mit MariaDB Read Replicas

Sie können den Replikationsvorgang für eine Amazon RDS-DB-Instance anhalten oder neustarten, indem Sie die gespeicherten Systemprozeduren mysql.rds_stop_replication und mysql.rds_start_replication aufrufen. Dies können Sie tun, wenn Sie eine Replikation zwischen Amazon RDS-Instances für langandauernde Operationen, wie dem Erstellen von großen Indexen, durchführen. Sie müssen Replikation auch anhalten und starten, wenn Sie Datenbanken importieren oder exportieren. Weitere Informationen finden Sie unter Importieren von Daten in eine Amazon RDS-MySQL oder MariaDB-DB-Instance mit reduzierter Ausfallzeit und Exportieren von Daten aus einer MySQL DB-Instance mithilfe der Replikation.

Wenn eine Replikation für mehr als 30 aufeinanderfolgende Tage manuell oder aufgrund eines Replikationsfehlers gestoppt wird, beendet Amazon RDS die Replikation zwischen der Quell-DB-Instance und allen Lesereplikaten. um erhöhten Speicheranforderungen in der Quell-DB-Instance vorzubeugen und lange Failover-Zeiten zu vermeiden. Die Lesereplikat-DB-Instance ist weiterhin verfügbar. Die Replikation kann jedoch nicht fortgesetzt werden, da die vom Lesereplikat benötigten Binärprotokolle aus der Quell-DB-Instance nach Beendigung der Replikation gelöscht wurden. Sie können ein neues Lesereplikat für die Quell-DB-Instance erstellen, um die Replikation erneut aufzunehmen.

Fehlerbehebung bei Problemen mit einer MariaDB Read Replica

Die Replikationstechnologien für MariaDB arbeiten asynchron. Da sie asynchron sind, steigt gelegentlich BinLogDiskUsage in der Quell-DB-Instance an und ReplicaLag ist im Lesereplikat zu erwarten. Beispielsweise kann auf der Quell-DB-Instance eine große Anzahl von Schreibvorgängen gleichzeitig ausgeführt werden. Dagegen werden Schreibvorgänge zum Lesereplikat über einen einzigen E/A-Thread seriell abgearbeitet. Dies kann zu einer Verzögerung zwischen der Quell-DB-Instance und dem Lesereplikat führen. Weitere Informationen über schreibgeschützte Replikate in der MariaDB-Dokumentation finden Sie unter Replikation - Übersicht.

Sie können folgende Dinge tun, um die Verzögerungszeit zwischen Aktualisierungen einer Quell-DB-Instance und der nachfolgenden Aktualisierung des Lesereplikats zu reduzieren:

  • Passen Sie die Speichergröße und die DB-Instance-Klasse eines Lesereplikats an die der Quell-DB-Instance an.

  • Stellen Sie sicher, dass Parametereinstellungen in den DB-Parametergruppen, die von der Quell-DB-Instance und den Lesereplikaten verwendet werden, kompatibel sind. Weitere Informationen und ein Beispiel finden Sie in der Beschreibung des max_allowed_packet-Parameters weiter unten in diesem Abschnitt.

Amazon RDS überwacht den Replikationsstatus Ihrer Lesereplikate und setzt den Replication State der Lesereplikat-Instance auf Error, wenn die Replikation aus irgendeinem Grund beendet wird. Ein Beispiel wären auf Ihrem Lesereplikat ausgeführte DML-Abfragen, die mit den Aktualisierungen auf der Quell-DB-Instance in Konflikt treten.

Sie können die Details des von der MariaDB-Engine zurückgegebenen Fehlers im Feld Replication Error überprüfen. Ereignisse, die den Status des Lesereplikats angeben, werden auch generiert, einschließlich RDS-EVENT-0045, RDS-EVENT-0046 und RDS-EVENT-0047. Weitere Informationen über Ereignisse und Abonnements zu Ereignissen finden Sie unter Verwenden von Amazon RDS-Ereignisbenachrichtigungen. Wenn eine MariaDB-Fehlermeldung zurückgegeben wird, überprüfen Sie den Fehler in der MariaDB error message documentation.

Ein häufiges Problem, das Replikationsfehler verursachen kann, besteht, wenn der Wert für den max_allowed_packet-Parameter eines Lesereplikats niedriger ist als der Wert für den max_allowed_packet-Parameter der Quell-DB-Instance. Der max_allowed_packet-Parameter ist ein benutzerdefinierter Parameter, den Sie in einer DB-Parametergruppe festlegen können, mit der die maximale Größe des auf der Datenbank ausführbaren DML-Codes angegeben wird. In einigen Fällen ist der Parameterwert max_allowed_packet in der mit einer Quell-DB-Instance verknüpften DB-Parametergruppe kleiner als der Parameterwert max_allowed_packet in der mit dem Lesereplikat der Quelle verknüpften DB-Parametergruppe. In diesen Fällen kann der Replikationsvorgang einen Fehler zurückgeben (Paket größer als "max_allowed_packet" Bytes) und die Replikation anhalten. Sie können den Fehler beheben, indem Sie die DB-Parametergruppe der Quelle und des Lesereplikats mit denselben Parameterwerten für max_allowed_packet verwenden.

Weitere Situationen, bei denen Replikationsfehler auftreten können, sind die Folgenden:

  • Schreibvorgänge auf Tabellen in einem Lesereplikat. Wenn Sie Indizes für ein Lesereplikat erstellen, müssen Sie den read_only-Parameter auf 0 setzen, um die Indizes zu erstellen. Wenn Sie in dem Lesereplikat in Tabellen schreiben, kann die Replikation unterbrochen werden.

  • Bei Verwendung einer nicht-transaktionalen Speicher-Engine wie MyISAM, erfordern Lesereplikate eine transaktionale Speicher-Engine. Replikation wird für die InnoDB-Speicher-Engine nur in MariaDB ab 10.2 und für die XtraDB-Speicher-Engine nur in MariaDB bis 10.1 unterstützt.

  • Verwenden von nicht-deterministischen Abfragen wie SYSDATE(). Weitere Informationen finden Sie unter Erkennen sicherer und nicht sicherer Anweisungen in der binären Protokollierung.

Wenn Sie entscheiden, dass Sie einen Fehler problemlos überspringen können, folgen Sie den Schritten im Abschnitt Überspringen von Fehlern für die aktuelle Replikation. Andernfalls können Sie das Lesereplikat löschen und eine Instance mit derselben DB-Instance-Kennung erstellen, sodass der Endpunkt mit dem alten Lesereplikat übereinstimmt. Wird ein Replikationsfehler behoben, ändert sich das Feld Replication State zu Replicating.

Bei MariaDB-DB-Instances kann in manchen Fällen nicht auf sekundäre Lesereplikate umgeschaltet werden, wenn während des Fehlers nicht alle Binärprotokollereignisse bereinigt wurden. In diesen Fällen müssen Sie die Lesereplikate manuell löschen und neu erstellen. Sie können das Risiko minimieren, indem Sie die Werte der folgenden dynamischen Variablen einstellen: sync_binlog=1, innodb_flush_log_at_trx_commit=1 und innodb_support_xa=1. Diese Einstellungen könnten die Leistung reduzieren, daher ist es ratsam, sie vor der Implementierung in einer Produktionsumgebung ausgiebig zu testen.