Auf dieser Seite wird beschrieben, wie Sie mit der umgekehrten Replikation ein Failover für MySQL einrichten. Mit Fallback ist ein Notfallplan gemeint, mit dem Sie zu Ihrer MySQL-Quelldatenbank zurückkehren können, falls Probleme mit Spanner auftreten.
Die umgekehrte Replikation ist nützlich, wenn unerwartete Probleme auftreten und Sie mit minimalen Unterbrechungen des Dienstes zur ursprünglichen MySQL-Datenbank zurückkehren müssen. Mit der umgekehrten Replikation können Sie ein Fallback durchführen, indem Sie Daten, die in Spanner geschrieben wurden, in Ihre MySQL-Quelldatenbank replizieren. So wird sichergestellt, dass beide Datenbanken letztendlich konsistent sind.
Der Ablauf der umgekehrten Replikation umfasst die folgenden Schritte, die von der Spanner_to_SourceDb-Dataflow-Vorlage ausgeführt werden:
Änderungen aus Spanner mit Spanner-Änderungsstreams lesen.
Prüfen Sie, ob der Filtermodus
forward_migrationist.Mit dem Spanner-Migrationstool können Sie Spanner-Daten so transformieren, dass sie mit dem Schema Ihrer Quelldatenbank kompatibel sind. Weitere Informationen finden Sie unter Benutzerdefinierte Transformation.
Prüfen Sie, ob die Quelldatenbank bereits neuere Daten für den angegebenen Primärschlüssel enthält.
Schreiben Sie die Daten in Ihre Quelldatenbank.
Spanner_to_SourceDb-Dataflow-Vorlage verwenden
Das Dataflow-Template sorgt für Konsistenz auf Primärschlüsselebene. Mit der Vorlage werden Metadatentabellen, sogenannte Schatten-Tabellen, in Spanner erstellt, die den Commit-Zeitstempel der letzten Schreibtransaktion für den Shard für diese bestimmte Tabelle enthalten.
Der Schreibvorgang ist bis zum Commit-Zeitstempel des Primärschlüssels konsistent.
Sie können den Dataflow-Job, der die Reverse-Replikation ausführt, so konfigurieren, dass er in einem der folgenden Modi ausgeführt wird:
Regulär: Dies ist der Standardmodus. Der Dataflow-Job liest Ereignisse aus Spanner-Änderungsstreams, konvertiert sie in Datentypen, die mit dem Quelldatenbankschema kompatibel sind, und wendet sie auf die Quelldatenbank an. Der Job wiederholt Fehler automatisch. Nachdem alle Wiederholungsversuche fehlgeschlagen sind, werden die Fehler in den Ordner
severedes DLQ-Verzeichnisses (Dead-Letter-Warteschlange) im Cloud Storage-Bucket verschoben. Außerdem werden alle dauerhaften Fehler in den Ordnersevereverschoben.RetryDLQ: In diesem Modus liest der Dataflow-Job Ereignisse aus dem Ordner
severeder Dead-Letter-Warteschlange und versucht, sie noch einmal zu verarbeiten. Führen Sie diesen Modus aus, nachdem Sie alle dauerhaften Fehler behoben haben. In diesem Modus werden nur Daten aus der DLQ gelesen, nicht aus den Spanner-Änderungsstreams. Wenn Datensätze, die aus dem Ordnersevereverarbeitet wurden, in den Ordnerretryverschoben werden, werden sie im Job noch einmal verarbeitet.
Hinweise
Sorgen Sie für eine Netzwerkverbindung zwischen Ihrer MySQL-Quelldatenbank und IhremGoogle Cloud -Projekt, in dem Ihre Dataflow-Jobs ausgeführt werden.
Setzen Sie die IP-Adressen der Dataflow-Worker auf die Zulassungsliste Ihrer MySQL-Zielinstanz.
Prüfen Sie, ob die MySQL-Anmeldedaten in
source shards filerichtig angegeben sind.Prüfen Sie, ob Ihre MySQL-Instanz online ist und ausgeführt wird.
Prüfen Sie, ob der MySQL-Nutzer die Berechtigungen
INSERT,UPDATEundDELETEfür die MySQL-Datenbank hat.Prüfen Sie, ob Sie die erforderlichen IAM-Berechtigungen zum Ausführen einer Dataflow-Flex-Vorlage haben. Weitere Informationen finden Sie unter Flex-Vorlage erstellen und ausführen.
Prüfen Sie, ob der Port
12345für die Kommunikation zwischen den Dataflow-Worker-VMs geöffnet ist.
Erforderliche Rollen
-
Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für die Instanz zuzuweisen, damit Sie die nötigen Berechtigungen zum Starten der umgekehrten Replikation haben:
-
Cloud Spanner-Datenbank-Nutzer (
roles/spanner.databaseUser) -
Dataflow-Entwickler (
roles/dataflow.developer)
-
Cloud Spanner-Datenbank-Nutzer (
-
Damit das Compute Engine-Dienstkonto die erforderlichen Berechtigungen zum Starten der umgekehrten Replikation hat, bitten Sie Ihren Administrator, dem Compute Engine-Dienstkonto die folgenden IAM-Rollen für die Instanz zuzuweisen:
-
Cloud Spanner-Datenbank-Nutzer (
roles/spanner.databaseUser) -
Zugriffsperson für Secret Manager-Secret (
roles/secretmanager.secretAccessor) -
Secret Manager-Betrachter (
roles/secretmanager.viewer)
-
Cloud Spanner-Datenbank-Nutzer (
Rückwärtsreplikation ausführen
So führen Sie die umgekehrte Replikation aus:
Laden Sie die Sitzungsdatei in den Cloud Storage-Bucket hoch.
Erstellen Sie eine Pub/Sub-Benachrichtigung für den Ordner
retrydes DLQ-Verzeichnisses. Dazu erstellen Sie ein Pub/Sub-Thema und ein Pub/Sub-Abo für dieses Thema.Erstellen Sie die Dataflow-Vorlage und stellen Sie sie bereit. Weitere Informationen finden Sie unter Vorlage erstellen.
Führen Sie das Dataflow-Template für die umgekehrte Replikation mit dem folgenden Google Cloud CLI-Befehl aus:
gcloud dataflow flex-template run "spanner-to-sourcedb-job" \ --project "PROJECT" \ --region "REGION" \ --template-file-gcs-location "TEMPLATE_SPEC_GCSPATH" \ --parameters "changeStreamName=CHANGE_STREAM_NAME" \ --parameters "instanceId=INSTANCE_ID" \ --parameters "databaseId=DATABASE_ID" \ --parameters "spannerProjectId=SPANNER_PROJECT_ID" \ --parameters "metadataInstance=METADATA_INSTANCE" \ --parameters "metadataDatabase=METADATA_DATABASE" \ --parameters "sourceShardsFilePath=SOURCE_SHARDS_FILE_PATH" \ --parameters "startTimestamp=START_TIMESTAMP" \ --parameters "endTimestamp=END_TIMESTAMP" \ --parameters "shadowTablePrefix=SHADOW_TABLE_PREFIX" \ [--parameters "sessionFilePath=SESSION_FILE_PATH"] \ [--parameters "filtrationMode=FILTRATION_MODE"] \ [--parameters "shardingCustomJarPath=SHARDING_CUSTOM_JAR_PATH"] \ [--parameters "shardingCustomClassName=SHARDING_CUSTOM_CLASS_NAME"] \ [--parameters "shardingCustomParameters=SHARDING_CUSTOM_PARAMETERS"] \ [--parameters "sourceDbTimezoneOffset=SOURCE_DB_TIMEZONE_OFFSET"] \ [--parameters "dlqGcsPubSubSubscription=DLQ_GCS_PUB_SUB_SUBSCRIPTION"] \ [--parameters "skipDirectoryName=SKIP_DIRECTORY_NAME"] \ [--parameters "maxShardConnections=MAX_SHARD_CONNECTIONS"] \ [--parameters "deadLetterQueueDirectory=DEAD_LETTER_QUEUE_DIRECTORY"] \ [--parameters "dlqMaxRetryCount=DLQ_MAX_RETRY_COUNT"] \ [--parameters "runMode=RUN_MODE"] \ [--parameters "dlqRetryMinutes=DLQ_RETRY_MINUTES"] \ [--parameters "sourceType=SOURCE_TYPE"] \ [--parameters "transformationJarPath=TRANSFORMATION_JAR_PATH"] \ [--parameters "transformationClassName=TRANSFORMATION_CLASS_NAME"] \ [--parameters "transformationCustomParameters=TRANSFORMATION_CUSTOM_PARAMETERS"] \ [--parameters "filterEventsDirectoryName=FILTER_EVENTS_DIRECTORY_NAME"]
Die erforderlichen Variablen werden in der folgenden Liste beschrieben:
project: die Google Cloud Projekt-ID.region: die Google Cloud Region.template-file-gcs-location: Der Pfad zur Cloud Storage-Datei, in der Sie die Dataflow-Vorlage bereitgestellt haben.changeStreamName: Der Name des Spanner-Änderungsstreams, aus dem der Job liest.instanceId: Die Spanner-Instanz-ID.databaseId: die Spanner-Datenbank-ID.spannerProjectId: die Projekt-ID, in der sich Ihre Cloud Spanner-Instanzen befinden.metadataInstance: Die Instanz, in der die Metadaten gespeichert werden, die der Connector verwendet, um die Nutzung von Änderungsstream-API-Daten zu steuern.metadataDatabase: Die Datenbank, in der die Metadaten gespeichert werden, mit denen der Connector die Nutzung von Änderungsstream-API-Daten steuert.sourceShardsFilePath: der Pfad zur Cloud Storage-Datei, die die Verbindungsprofilinformationen für die Quell-Shards enthält.
Die optionalen Variablen werden in der folgenden Liste beschrieben:
startTimestamp: Der Zeitstempel, ab dem Änderungen gelesen werden sollen. Die Standardeinstellung ist leer.endTimestamp: Der Zeitstempel, bis zu dem Änderungen gelesen werden sollen. Wenn Sie keinen Zeitstempel angeben, werden Änderungen unbegrenzt gelesen. Die Standardeinstellung ist leer.shadowTablePrefix: Das Präfix zum Benennen von Schattentabellen. Die Standardeinstellung istshadow_.sessionFilePath: Der Pfad zur Sitzungsdatei in Cloud Storage, die Zuordnungsinformationen aus dem Spanner-Migrations-Tool enthält.filtrationMode: Der Modus, der bestimmt, wie Datensätze anhand von Kriterien gefiltert werden. Unterstützte Modi sindnoneoderforward_migration.shardingCustomJarPath: Der Speicherort (Pfad) in Cloud Storage der benutzerdefinierten JAR-Datei, die die Logik zum Abrufen der Shard-ID enthält. Die Standardeinstellung ist leer.shardingCustomClassName: Der voll qualifizierte Klassenname mit der benutzerdefinierten Shard-ID-Implementierung. Dieses Feld ist erforderlich, wennshardingCustomJarPathangegeben ist. Die Standardeinstellung ist leer.shardingCustomParameters: Ein String mit allen benutzerdefinierten Parametern, die an die benutzerdefinierte Sharding-Klasse übergeben werden sollen. Die Standardeinstellung ist leer.sourceDbTimezoneOffset: der Zeitzonenversatz von UTC für die Quelldatenbank. Beispiel: +10:00. Standard: +00:00.dlqGcsPubSubSubscription: Das Pub/Sub-Abo, das in einer Cloud Storage-Benachrichtigungsrichtlinie für das DLQ-Wiederholverzeichnis verwendet wird, wenn derregular-Modus genutzt wird. Geben Sie den Namen im Formatprojects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_ID>an. Wenn Sie diesen Parameter festlegen, werdendeadLetterQueueDirectoryunddlqRetryMinutesignoriert.skipDirectoryName: Das Verzeichnis, in das das System Datensätze schreibt, die bei der umgekehrten Replikation übersprungen werden. Standardeinstellung:skipmaxShardConnections: Die maximale Anzahl von Verbindungen, die pro Shard zulässig sind. Standard: 10.000.deadLetterQueueDirectory: Der Pfad zum Speichern der DLQ-Ausgabe. Der Standardwert ist ein Verzeichnis unter dem temporären Speicherort des Dataflow-Jobs.dlqMaxRetryCount: Die maximale Anzahl der Wiederholungsversuche über die DLQ bei vorübergehenden Fehlern. Standardwert: 500runMode: Der Ausführungsmodustyp. Optionen sindregularoderretryDLQ. Verwenden SieretryDLQ, um nur die schwerwiegenden DLQ-Einträge noch einmal zu versuchen. Standard:regular.dlqRetryMinutes: Die Anzahl der Minuten zwischen DLQ-Wiederholungsversuchen. Der Standardwert ist 10.sourceType: Der Typ der Quelldatenbank, in die die Replikation rückgängig gemacht werden soll. Standard:mysql.transformationJarPath: Der Speicherort (Pfad) in Cloud Storage der benutzerdefinierten JAR-Datei, die die benutzerdefinierte Transformationslogik für die Verarbeitung von Datensätzen bei der Rückwärtsreplikation enthält. Die Standardeinstellung ist leer.transformationClassName: Der vollständig qualifizierte Klassenname mit der benutzerdefinierten Transformationslogik. Dieses Feld ist erforderlich, wenntransformationJarPathangegeben ist. Die Standardeinstellung ist leer.transformationCustomParameters: Ein String mit allen benutzerdefinierten Parametern, die an die benutzerdefinierte Transformationsklasse übergeben werden sollen. Die Standardeinstellung ist leer.filterEventsDirectoryName: Das Verzeichnis, in das das System Datensätze schreibt, die bei der umgekehrten Replikation übersprungen werden. Standardeinstellung:skip