Mit der rechenzentrumsübergreifenden Replikation arbeiten

Wählen Sie eine Dokumentationsversion aus:

Auf dieser Seite wird beschrieben, wie Sie die rechenzentrumsübergreifende Replikation verwenden, indem Sie sekundäre Datenbankcluster in Kubernetes erstellen und damit arbeiten.

Eine konzeptionelle Übersicht über die rechenzentrumsübergreifende Replikation finden Sie unter Informationen zur rechenzentrumsübergreifenden Replikation.

Hinweis

  • Prüfen Sie, ob eine zuverlässige Netzwerkverbindung mit geringer Latenz zwischen dem primären und dem sekundären Rechenzentrum besteht. Dies ist entscheidend für die effektive Funktion der rechenzentrumsübergreifenden Replikation.
  • Installieren Sie die neueste Version des AlloyDB Omni-Operators, um AlloyDB Omni in einem Kubernetes-Cluster im primären Rechenzentrum und in einem Kubernetes-Cluster im sekundären Rechenzentrum bereitzustellen. Die rechenzentrumsübergreifende Replikation wird in AlloyDB Omni-Operatorversion 1.5.0 und höher unterstützt.
  • Erstellen Sie einen AlloyDB Omni-Datenbankcluster im Kubernetes-Cluster im primären Rechenzentrum.
  • Achten Sie darauf, dass sowohl der primäre als auch der Standby-Datenbankserver in Ihrem primären Datenbank cluster ausreichend WAL-Speicherplatz (Write-Ahead Logging) hat, um die WAL-Dateien aufzunehmen, die für die Replikation in den sekundären Cluster erforderlich sind. Alle Daten die noch nicht in den sekundären Cluster repliziert wurden, werden als WAL-Dateien im primären Cluster gespeichert. Je nach Verbindungsgeschwindigkeit zwischen dem primären und dem sekundären Cluster benötigen Sie möglicherweise zusätzlichen Festplattenspeicher für diesen Zweck.
  • Beachten Sie die folgenden Informationen zu sekundären Datenbank-Standbys mit Hochverfügbarkeit (Vorschau): Wenn die AlloyDB Omni-Operatorversion und die Version des Steuerungsebenen-Agents 1.7.0 oder höher sind, kann der sekundäre Datenbankcluster Standbys mit Hochverfügbarkeit unterstützen.

    Im Gegensatz zu Standbys mit Hochverfügbarkeit im primären Datenbankcluster sind Standbys mit Hochverfügbarkeit im sekundären Datenbankcluster asynchron, bis der sekundäre Datenbank cluster zu einer primären Datenbank hochgestuft wird. Standbys mit Hochverfügbarkeit werden automatisch synchron oder asynchron, wenn die Datenbankclusterrolle während eines Switchovers geändert wird.

Sekundären Datenbankcluster erstellen

So erstellen Sie einen sekundären AlloyDB Omni-Datenbankcluster und aktivieren die Replikation von Ihrem primären Datenbankcluster:

  1. Prüfen Sie, ob die externe Verbindung in Ihrem primären AlloyDB Omni-Datenbankcluster aktiviert ist. Wenn die externe Konnektivität nicht aktiviert ist, fügen Sie dem Abschnitt „spec“ des Datenbankclustermanifests Folgendes hinzu:

    ...
    spec:
      ...
      allowExternalIncomingTraffic: true
     
  2. Wenn Sie die rechenzentrumsübergreifende Replikation mit einem primären Datenbankcluster verwenden möchten, für den Hochverfügbarkeit (HA) aktiviert ist, prüfen Sie, ob das Feld replayReplicationSlotsOnStandbys im primären Datenbankcluster aktiviert ist:

    ...
    spec:
      ...
      availability:
        ...
        replayReplicationSlotsOnStandbys: true
     

    Wenn Sie dieses Feld zusammen mit logReplicationSlots aktivieren, das im nächsten Schritt erläutert wird, wird der Replikations-Slot, der vom sekundären Datenbankcluster verwendet wird, mit allen Standbys mit Hochverfügbarkeit synchronisiert. Diese Konfiguration trägt dazu bei, dass die neue primäre Instanz mit Hochverfügbarkeit alle WAL-Dateien (Write-Ahead Logging) beibehält, die noch nicht vom sekundären Datenbankcluster verwendet wurden, nachdem ein Failover oder Switchover erfolgt ist. So kann der sekundäre Datenbankcluster die Replikation ohne Unterbrechung fortsetzen.

  3. Wenn Sie die Replikation in Ihrem primären Datenbankcluster aktivieren möchten, wenden Sie ein Manifest, das dem folgenden ähnelt, auf Ihren Kubernetes-Cluster im primären Rechenzentrum an:

    apiVersion: v1
    kind: Secret
    metadata:
      name: ha-rep-pw-DB_CLUSTER_NAME
      namespace: DB_CLUSTER_NAMESPACE
    type: Opaque
    data:
      rep-user-pw: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Replication
    metadata:
      name: REPLICATION_NAME
      namespace: DB_CLUSTER_NAMESPACE
    spec:
      dbcluster:
        name: DB_CLUSTER_NAME
      upstream:
        password:
          name: ha-rep-pw-DB_CLUSTER_NAME
        logReplicationSlot: true

    Ersetzen Sie Folgendes:

    • DB_CLUSTER_NAME: Der Name des Datenbankclusters, z. B. dbc-1.
    • ENCODED_PASSWORD: Das Passwort für den Datenbanknutzer, der für die Replikation aus sekundären Datenbanken verwendet werden soll, codiert als Base64-String, z. B. Q2hhbmdlTWUxMjM= for ChangeMe123. Der Standardwert ist alloydbreplica.
    • REPLICATION_NAME: Der Name der Replikation, z. B. replication-1.
    • LOG_REPLICATION_SLOT: Replikations-Slot-Daten in WAL-Dateien protokollieren. Wenn Sie diese Option aktivieren möchten, legen Sie den Wert auf true fest. Der Standardwert ist false.

    Wir empfehlen, die Option logReplicationSlot mit einem primären Datenbankcluster zu aktivieren, für den Hochverfügbarkeit (HA) aktiviert ist, damit die Replikation nach einem Failover oder Switchover fortgesetzt werden kann.

    Warten Sie, bis der Replikationsstatus „bereit“ lautet.

  4. Führen Sie den folgenden Befehl aus, um die Upstream-Verbindungsinformationen abzurufen, die zum Konfigurieren der Replikation im sekundären Datenbankcluster verwendet werden:

    kubectl get replication REPLICATION_NAME
    kubectl get replication REPLICATION_NAME -o json | jq .status.upstream

    Die Beispielausgabe sieht dann ungefähr so aus:

      {
        "host": "35.230.32.36",
        "password": {
          "name": "ha-rep-pw-dbc-1"
        },
        "port": 5432,
        "replicationSlotName": "dbc_1_replication_1",
        "username": "alloydbreplica"
      }
      
  5. Notieren Sie sich die Ausgabe, da Sie sie im nächsten Schritt benötigen, um die Replikation im sekundären Datenbankcluster zu aktivieren.
  6. Erstellen Sie einen AlloyDB Omni-Cluster in Ihrem Kubernetes-Cluster im sekundären Rechenzentrum mit einer Konfiguration, die mit der Ihres primären Datenbankclusters identisch ist.
  7. Prüfen Sie, ob die externe Verbindung für Ihren sekundären AlloyDB Omni-Datenbankcluster aktiviert ist.
  8. Wenn die externe Konnektivität nicht aktiviert ist, fügen Sie dem Abschnitt „spec“ seines Manifests Folgendes hinzu:

    ...
    spec:
      ...
      allowExternalIncomingTraffic: true
  9. Wenn Sie die Replikation für Ihren sekundären Datenbankcluster aktivieren möchten, wenden Sie ein Manifest, das dem folgenden ähnelt, auf Ihren Kubernetes-Cluster im sekundären Rechenzentrum an:
    apiVersion: v1
    kind: Secret
    metadata:
      name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
      namespace: SECONDARY_DB_CLUSTER_NAMESPACE
    type: Opaque
    data:
      rep-user-pw: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Replication
    metadata:
      name: SECONDARY_REPLICATION_NAME
      namespace: SECONDARY_DB_CLUSTER_NAMESPACE
    spec:
      dbcluster:
        name: SECONDARY_DB_CLUSTER_NAME
      downstream:
        host: PRIMARY_HOST
        port: PRIMARY_PORT
        username: alloydbreplica
        password:
          name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
        replicationSlotName: PRIMARY_REPLICATION_SLOT
        control: setup

    Ersetzen Sie Folgendes:

    • SECONDARY_DB_CLUSTER_NAME: Der Name des sekundären Datenbankclusters, z. B. dbc-2.
    • ENCODED_PASSWORD: Das Passwort für den Datenbanknutzer, der für die Replikation des primären Datenbankclusters verwendet werden soll, codiert als Base64-String, z. B. Q2hhbmdlTWUxMjM= for ChangeMe123. Der Standardwert ist alloydbreplica.
    • SECONDARY_REPLICATION_NAME: Der Name der Replikation, z. B. `replication-2`.
    • PRIMARY_HOST: Der Verbindungsendpunkt des primären Datenbankclusters aus der Ausgabe in Schritt 4, auf den die sekundäre Datenbank für die Replikation zugreifen kann.
    • PRIMARY_PORT: Der Verbindungsport des primären Datenbankclusters aus der Ausgabe in Schritt 4, auf den die sekundäre Datenbank für die Replikation zugreifen kann.
    • PRIMARY_REPLICATION_SLOT: Der Name des Replikations-Slots im primären Datenbankcluster aus der Ausgabe in Schritt 4, den die sekundäre Datenbank für die Replikation verwenden kann.

Replikation im sekundären Datenbankcluster ansehen

Führen Sie die folgenden Befehle aus, um detaillierte Informationen zu einem sekundären AlloyDB Omni-Datenbankcluster und seinem Replikationsstatus aufzurufen:

kubectl get dbcluster SECONDARY_DB_CLUSTER_NAME
kubectl get replication SECONDARY_REPLICATION_NAME

Wenn der sekundäre Datenbankcluster erfolgreich eingerichtet wurde und die Streamingreplikation vom primären Datenbankcluster erfolgt, ist der Replikationsstatus sowohl „bereit“ als auch „fehlerfrei“.

Sekundären Datenbankcluster hochstufen

Wenn Sie einen sekundären Datenbankcluster hochstufen, müssen Sie zuerst prüfen, ob der sekundäre Datenbankcluster alle vom primären Datenbankcluster empfangenen Transaktionen angewendet hat.

  1. Prüfen Sie den Replikationsstatus des sekundären Datenbankclusters, um zu prüfen, ob er sowohl „bereit“ als auch „fehlerfrei“ ist.
    kubectl get replication SECONDARY_REPLICATION_NAME
  2. Beenden Sie alle Schreibvorgänge in den primären Datenbankcluster. Führen Sie einen Prüfpunkt im primären Datenbankcluster aus und führen Sie dann die folgende Abfrage für den primären Datenbankcluster aus, um die Replikationsverzögerung der sekundären Datenbank zu prüfen. Bestätigen Sie, dass das Ergebnis nur eine minimale Verzögerung aufweist.
    1. Führen Sie einen Prüfpunkt aus, um den Arbeitsspeicher auf das Laufwerk zu leeren.
      psql -h PRIMARY_HOST -U postgres -d postgres -c 'CHECKPOINT;'
    2. Prüfen Sie die Replikationsverzögerung. Ein Verzögerungswert von 0 ist optimal. Wenn die Verzögerung größer als 0 ist, können Sie den sekundären Datenbankcluster trotzdem hochstufen. Es besteht jedoch das Risiko, dass die letzten Transaktionen verloren gehen, die bereits im primären Datenbankcluster mit einem Commit übergeben wurden.
      psql -h PRIMARY_HOST -U postgres -d postgres -c 'SELECT application_name, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag FROM pg_stat_replication;'

  3. Stufen Sie einen sekundären Datenbankcluster zu einem primären Datenbankcluster hoch, indem Sie das Feld control des Replikationsmanifests des sekundären Datenbankclusters auf promote aktualisieren. Wenden Sie dann das aktualisierte Replikationsmanifest auf Ihren Kubernetes-Cluster im sekundären Rechenzentrum an.

    apiVersion: v1
    kind: Secret
    metadata:
      name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
      namespace: SECONDARY_DB_CLUSTER_NAMESPACE
    type: Opaque
    data:
      rep-user-pw: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Replication
    metadata:
      name: SECONDARY_REPLICATION_NAME
      namespace: SECONDARY_DB_CLUSTER_NAMESPACE
    spec:
      dbcluster:
        name: SECONDARY_DB_CLUSTER_NAME
      downstream:
        host: PRIMARY_HOST
        port: PRIMARY_PORT
        username: alloydbreplica
        password:
          name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
        replicationSlotName: PRIMARY_REPLICATION_SLOT
        control: promote

Switchover durchführen

Prüfen Sie, bevor Sie einen Wechsel durchführen, ob die primären und sekundären Datenbankcluster, die zu beiden Rechenzentren gehören, online sind und ob die Datenbankcluster in einem fehlerfreien Zustand sind.

Damit die Datenkonsistenz in Ihrem primären und sekundären Datenbankcluster während des Wechsels gewährleistet ist, führen Sie die folgenden Schritte aus, um zu prüfen, ob der sekundäre Datenbankcluster alle vom primären Datenbankcluster empfangenen Transaktionen angewendet hat:

  1. Prüfen Sie den Replikationsstatus des sekundären Datenbankclusters, um zu prüfen, ob er sowohl „bereit“ als auch „fehlerfrei“ ist.
    kubectl get replication SECONDARY_REPLICATION_NAME
  2. Beenden Sie alle Schreibvorgänge in den primären Datenbankcluster. Führen Sie einen Prüfpunkt im primären Datenbankcluster aus und führen Sie dann die folgende Abfrage für den primären Datenbankcluster aus, um die Replikationsverzögerung der sekundären Datenbank zu prüfen.
    1. Führen Sie einen Prüfpunkt aus, um den Arbeitsspeicher auf das Laufwerk zu leeren.
      psql -h PRIMARY_HOST -U postgres -d postgres -c 'CHECKPOINT;'
    2. Bestätigen Sie, dass das Ergebnis einen Verzögerungswert von 0 aufweist.
      psql -h PRIMARY_HOST -U postgres -d postgres -c 'SELECT application_name, pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_lag FROM pg_stat_replication;'
  3. So stufen Sie den sekundären Cluster zum primären Cluster hoch:

    1. Wenn Sie Ihren sekundären AlloyDB Omni-Datenbankcluster in einen primären Datenbankcluster umwandeln möchten, aktualisieren Sie sein Replikationsmanifest in Ihrem Kubernetes-Cluster im sekundären Rechenzentrum. Das Manifest sollte in etwa so aussehen:

      apiVersion: v1
      kind: Secret
      metadata:
        name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
        namespace: SECONDARY_DB_CLUSTER_NAMESPACE
      type: Opaque
      data:
        rep-user-pw: "ENCODED_PASSWORD"
      ---
      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Replication
      metadata:
        name: SECONDARY_REPLICATION_NAME
        namespace: SECONDARY_DB_CLUSTER_NAMESPACE
      spec:
        dbcluster:
          name: SECONDARY_DB_CLUSTER_NAME
        upstream:
          password:
            name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME

      Ersetzen Sie SECONDARY_DB_CLUSTER_NAME durch den Namen Ihres sekundären Datenbankclusters, z. B. dbc-2.

      Warten Sie, bis der Replikationsstatus „bereit“ lautet.

    2. Führen Sie den folgenden Befehl aus, um die Upstream-Verbindungsinformationen für die Replikation abzurufen:

      kubectl get replication SECONDARY_REPLICATION_NAME
      kubectl get replication SECONDARY_REPLICATION_NAME -o json | jq .status.upstream

      Die Beispielausgabe sieht dann ungefähr so aus:

        {
          "host": "34.23.207.137",
          "password": {
            "name": "ha-rep-pw-dbc-2"
          },
          "port": 5432,
          "replicationSlotName": "dbc_2_replication_2",
          "username": "alloydbreplica"
        }
      
    3. Wenn Sie Ihren primären AlloyDB Omni-Datenbankcluster in einen sekundären Datenbankcluster umwandeln möchten, aktualisieren Sie sein Replikationsmanifest in Ihrem Kubernetes-Cluster im primären Rechenzentrum. Das Manifest sollte in etwa so aussehen:

      apiVersion: v1
      kind: Secret
      metadata:
        name: ha-rep-pw-DB_CLUSTER_NAME
      type: Opaque
      data:
        rep-user-pw: "ENCODED_PASSWORD"
      ---
      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Replication
      metadata:
        name: REPLICATION_NAME
      spec:
        dbcluster:
          name: DB_CLUSTER_NAME
        downstream:
          host: SECONDARY_HOST
          port: SECONDARY_PORT
          username: alloydbreplica
          password:
            name: ha-rep-pw-DB_CLUSTER_NAME
          replicationSlotName: SECONDARY_REPLICATION_SLOT
          control: rewind

      Warten Sie, bis der Replikationsstatus „bereit“ und „fehlerfrei“ ist.

    4. Führen Sie den folgenden Befehl aus, um den Replikationsstatus zu prüfen:

      kubectl get replication REPLICATION_NAME

Nicht geplante Notfallwiederherstellung durchführen

Wenn ein Failover zur Notfallwiederherstellung auftritt, führen Sie die folgenden Schritte aus:

  1. Wenn Sie Ihren sekundären AlloyDB Omni-Datenbankcluster in einen primären Datenbankcluster umwandeln möchten, aktualisieren Sie das Replikationsmanifest dieses Clusters in Ihrem Kubernetes-Cluster im sekundären Rechenzentrum. Weitere Informationen finden Sie unter Schritt 3a in Switchover durchführen.
  2. Wenn Sie den ehemaligen primären Datenbankcluster in einen sekundären Datenbankcluster umwandeln möchten, der aus dem neuen primären Cluster repliziert wird (Rollenumkehr), warten Sie, bis der ursprüngliche primäre Cluster wieder verfügbar ist. Verwenden Sie die Steuerung rewind in der Downstream-Replikationskonfiguration, um zu prüfen, ob die Umwandlung wie erwartet funktioniert. Wenn Probleme auftreten, verwenden Sie stattdessen die Steuerung setup.