Replikation aus externen Datenbanken mithilfe eines verwalteten Imports einrichten

Auf dieser Seite wird gezeigt, wie Sie einen verwalteten Import für Daten einrichten und anwenden, wenn Sie von einem externen Server zu Cloud SQL replizieren.

Es müssen dafür alle Schritte auf dieser Seite ausgeführt werden. Nach Abschluss können Sie die Quelldarstellungsinstanz auf die gleiche Weise verwalten und überwachen wie jede andere Cloud SQL-Instanz.

Vorbereitung

Führen Sie zuerst die folgenden Schritte aus:

  1. Externen Server konfigurieren

  2. Erstellen Sie die Quelldarstellungsinstanz.

  3. Richten Sie das Cloud SQL-Replikat ein.

Replikationseinstellungen prüfen

Prüfen Sie nach Abschluss der Einrichtung, ob das Cloud SQL-Replikat aus Daten vom externen Server erstellt werden kann.

Die folgenden Einstellungen für die externe Synchronisierung müssen korrekt sein.

  • Verbindung zwischen dem Cloud SQL-Replikat und dem externen Server
  • Berechtigungen für den Replikationsnutzer
  • Versionskompatibilität
  • Das Cloud SQL-Replikat wurde noch nicht repliziert

Öffnen Sie zum Prüfen dieser Einstellungen ein Cloud Shell-Terminal und geben Sie die folgenden Befehle ein:

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings

Beispiel

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings

Diese Aufrufe geben eine Liste vom Typ sql#externalSyncSettingErrorList zurück.

Wenn die Liste leer ist, gibt es keine Fehler. Eine Antwort ohne Fehler wird so angezeigt:

  {
    "kind": "sql#externalSyncSettingErrorList"
  }
Attribut Beschreibung
SYNC_MODE Stellen Sie sicher, dass Sie das Cloud SQL-Replikat und den externen Server nach der Einrichtung der Replikation synchron halten können. Zu den möglichen Synchronisierungsmodi gehören EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE und OFFLINE.
SYNC_PARALLEL_LEVEL

Prüfen Sie die Einstellung, über die die Geschwindigkeit der Übertragung von Daten aus Tabellen einer Datenbank gesteuert wird. Folgende Werte sind verfügbar:

  • min: beansprucht die geringste Menge an Rechenressourcen in der Datenbank. Dies ist die niedrigste Geschwindigkeit für die Datenübertragung.
  • optimal: bietet eine ausgewogene Leistung bei optimaler Auslastung der Datenbank.
  • max: bietet die höchste Geschwindigkeit für die Datenübertragung, was jedoch zu einer erhöhten Belastung der Datenbank führen kann.

Hinweis:Der Standardwert für diesen Parameter ist optimal, da diese Einstellung eine gute Geschwindigkeit für die Datenübertragung bietet und die Datenbank nur in angemessenem Maße belastet. Wir empfehlen, diesen Standardwert zu verwenden.

PROJECT_ID Die ID Ihres Google Cloud-Projekts.
REPLICA_INSTANCE_ID Die ID des Cloud SQL-Replikats.

Replikation auf dem externen Server starten

Nachdem Sie geprüft haben, ob es möglich ist, Daten vom externen Server zu replizieren, starten Sie die Replikation. Die Replikationsgeschwindigkeit beträgt für den ersten Importvorgang bis zu 500 GB pro Stunde. Diese Geschwindigkeit kann jedoch je nach Maschinenebene, Datenlaufwerkgröße, Netzwerkdurchsatz und Art der Datenbank variieren.

curl

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "SYNC_MODE",
         "skipVerification": "SKIP_VERIFICATION",
         "syncParallelLevel": "SYNC_PARALLEL_LEVEL"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync

Beispiel

gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
     --header 'Content-Type: application/json' \
     --data '{
         "syncMode": "online",
         "syncParallelLevel": "optimal"
       }' \
     -X POST \
     https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
Attribut Beschreibung
SYNC_MODE Bestätigen Sie, dass Sie das Cloud SQL-Replikat und den externen Server nach der Einrichtung der Replikation synchron halten können.
SKIP_VERIFICATION Gibt an, ob der integrierte Bestätigungsschritt vor der Synchronisierung der Daten übersprungen wird. Dieser Parameter wird nur empfohlen, wenn Sie Ihre Replikationseinstellungen bereits geprüft haben.
SYNC_PARALLEL_LEVEL

Geben Sie eine Einstellung an, mit der die Geschwindigkeit der Übertragung von Daten aus Tabellen einer Datenbank gesteuert wird. Folgende Werte sind verfügbar:

  • min: beansprucht die geringste Menge an Rechenressourcen in der Datenbank. Dies ist die niedrigste Geschwindigkeit für die Datenübertragung.
  • optimal: bietet eine ausgewogene Leistung bei optimaler Auslastung der Datenbank.
  • max: bietet die höchste Geschwindigkeit für die Datenübertragung, was jedoch zu einer erhöhten Belastung der Datenbank führen kann.

Hinweis:Der Standardwert für diesen Parameter ist optimal, da diese Einstellung eine gute Geschwindigkeit für die Datenübertragung bietet und die Datenbank nur in angemessenem Maße belastet. Wir empfehlen, diesen Standardwert zu verwenden.

PROJECT_ID Die ID Ihres Google Cloud-Projekts.
REPLICA_INSTANCE_ID Die ID des Cloud SQL-Replikats.

Migration überwachen

Nachdem Sie die Replikation vom externen Server gestartet haben, müssen Sie die Replikation überwachen. Weitere Informationen finden Sie unter Replikation überwachen. Sie können dann die Migration abschließen.

Fehlerbehebung

Optionen zur Fehlerbehebung:

Problem Fehlerbehebung
Beim Erstellen hat das Lesereplikat nicht repliziert. Möglicherweise finden Sie in den Logdateien einen spezifischen Fehler. Prüfen Sie die Logs in Cloud Logging, um den tatsächlichen Fehler zu finden.
Lesereplikat kann nicht erstellt werden – invalidFlagValue-Fehler Eines der Flags in der Anfrage ist ungültig. Dies kann ein Flag sein, das Sie explizit angegeben haben, oder ein Flag, für das ein Standardwert festgelegt wurde.

Prüfen Sie als Erstes, ob der Wert des Flags max_connections größer oder gleich dem Wert auf der primären Instanz ist.

Wenn das Flag max_connections korrekt festgelegt ist, prüfen Sie die Logs in Cloud Logging, um den tatsächlichen Fehler zu finden.

Lesereplikat kann nicht erstellt werden – unbekannter Fehler. Möglicherweise finden Sie in den Logdateien einen spezifischen Fehler. Prüfen Sie die Logs in Cloud Logging, um den tatsächlichen Fehler zu finden.

Lautet der Fehler set Service Networking service account as servicenetworking.serviceAgent role on consumer project, deaktivieren Sie die Service Networking API und aktivieren Sie sie dann wieder. Dadurch wird das Dienstkonto erstellt, das erforderlich ist, um den Prozess fortzusetzen.

Laufwerk ist voll. Das Laufwerk der primären Instanz kann während der Replikaterstellung zu voll werden. Bearbeiten Sie die primäre Instanz, um sie auf ein größeres Laufwerk zu aktualisieren.
Der Speicherplatz wird erheblich erhöht. Ein Slot, der nicht aktiv zum Erfassen von Daten verwendet wird, führt dazu, dass PostgreSQL unbegrenzt auf WAL-Segmente hält. Dadurch wird der Speicherplatz auf unbestimmte Zeit größer. Wenn Sie die Funktionen zur logischen Replikation und Decodierung in Cloud SQL verwenden, werden Replikationsslots automatisch erstellt und gelöscht. Nicht verwendete Replikationsslots können durch Abfrage der Systemansicht pg_replication_slots und Filterung der Spalte active erkannt werden. Nicht verwendete Slots können verworfen werden, um WAL-Segmente mit dem pg_drop_replication_slot-Befehl zu entfernen.
Die Replikatinstanz verwendet zu viel Arbeitsspeicher. Das Replikat verwendet temporären Speicher zum Speichern häufig angeforderter Lesevorgänge im Cache, was dazu führen kann, dass es mehr Speicher als die primäre Instanz verwendet.

Starten Sie die Replikatinstanz neu, um den temporären Speicherplatz freizugeben.

Replikation gestoppt. Das maximale Speicherlimit wurde erreicht und die automatische Speichererweiterung ist nicht aktiviert.

Bearbeiten Sie die Instanz, um automatic storage increase zu aktivieren.

Replikationsverzögerung ist durchgehend hoch. Die Schreiblast ist für das Replikat zu hoch. Die Replikationsverzögerung tritt auf, wenn der SQL-Thread auf einem Replikat nicht mit dem E/A-Thread Schritt halten kann. Einige Arten von Abfragen oder Arbeitslasten können vorübergehend oder dauerhaft zu einer hohen Replikationsverzögerung für ein bestimmtes Schema führen. Typische Ursachen für Replikationsverzögerungen sind:
  • Langsame Abfragen des Replikats. Suchen Sie diese und korrigieren Sie sie.
  • Alle Tabellen müssen einen eindeutigen Schlüssel/Primärschlüssel haben. Jede Aktualisierung einer solchen Tabelle ohne eindeutigen bzw. Primärschlüssel führt zu vollständigen Tabellenscans auf dem Replikat.
  • Abfragen wie DELETE ... WHERE field < 50000000 führen bei der zeilenbasierten Replikation zu einer Replikationsverzögerung, da sich eine große Anzahl von Aktualisierungen auf dem Replikat ansammelt.

Hier einige mögliche Lösungen:

  • Bearbeiten Sie die Instanz, um die Größe des Replikats zu erhöhen.
  • Reduzieren Sie die Belastung der Datenbank.
  • Senden Sie Lesetraffic an das Lesereplikat.
  • Indexieren Sie die Tabellen.
  • Ermitteln und beheben Sie Probleme mit langsamen Schreibabfragen.
  • Erstellen Sie das Replikat neu.
Fehler beim Neuerstellen von Indexen in PostgreSQL 9.6. Sie erhalten von PostgreSQL einen Fehler, der Sie darüber informiert, dass Sie einen bestimmten Index neu erstellen müssen. Dies kann nur auf der primären Instanz durchgeführt werden. Wenn Sie eine neue Replikatinstanz erstellen, erhalten Sie bald wieder denselben Fehler. Hashindexe werden in PostgreSQL-Versionen unter 10 nicht an Replikate weitergegeben.

Wenn Sie Hashindexe verwenden müssen, führen Sie ein Upgrade auf PostgreSQL 10 oder höher durch. Wenn Sie allerdings ebenfalls Replikate verwenden möchten, verwenden Sie in PostgreSQL 9.6 keine Hashindexe.

Die Abfrage auf der primären Instanz wird immer ausgeführt. Nach dem Erstellen eines Replikats wird davon ausgegangen, dass die Abfrage SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' kontinuierlich auf Ihrer primären Instanz ausgeführt wird.
Die Replikaterstellung schlägt bei Zeitüberschreitung fehl. Langlaufende Transaktionen ohne Commit auf der primären Instanz können dazu führen, dass die Lesereplikaterstellung fehlschlägt.

Erstellen Sie das Replikat neu, nachdem alle laufenden Abfragen beendet sind.

Wenn die primäre Instanz und das Replikat unterschiedliche vCPU-Größen haben, kann es zu Problemen bei der Abfrageleistung kommen, da die Abfrageoptimierung die vCPU-Größen berücksichtigt.

So beheben Sie das Problem:

  1. Aktivieren Sie das Flag log_duration und setzen Sie den Parameter log_statement auf ddl. Dadurch erhalten Sie sowohl die Abfragen als auch die Laufzeit für die Datenbank. Je nach Arbeitslast kann dies jedoch zu Leistungsproblemen führen.
  2. Führen Sie sowohl auf der primären Instanz als auch auf dem Lesereplikat explain analyze für die Abfragen aus.
  3. Vergleichen Sie den Abfrageplan und prüfen Sie, ob Unterschiede vorliegen.

Wenn dies eine bestimmte Abfrage ist, ändern Sie diese. Sie können beispielsweise die Reihenfolge der Joins ändern, um zu sehen, ob Sie eine bessere Leistung erzielen.

Replikationslogs prüfen

Beim Prüfen der Replikationseinstellungen werden Logs erstellt.

So können Sie diese Logs abrufen:

  1. Rufen Sie in der Google Cloud Console die Loganzeige auf.

    Zur Loganzeige

  2. Wählen Sie aus dem Drop-down-Menü Instanz das Cloud SQL-Replikat aus.
  3. Wählen Sie die Logdatei replication-setup.log aus.

Prüfen Sie, ob Folgendes zutrifft, wenn das Cloud SQL-Replikat keine Verbindung zum externen Server herstellen kann.

  • Jede Firewall auf dem externen Server ist so konfiguriert, dass Verbindungen von der ausgehenden IP-Adresse des Cloud SQL-Replikats zugelassen sind.
  • Ihre SSL/TLS-Konfiguration ist korrekt.
  • Nutzername, Host und Passwort des Nutzerkontos für die Replikation sind korrekt.

Nächste Schritte