Mit der datacenterübergreifenden Replikation arbeiten

Wählen Sie eine Dokumentationsversion aus:

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

Eine konzeptionelle Übersicht über die datenbankübergreifende Replikation finden Sie unter Datenbankübergreifende Replikation.

Hinweise

  • Achten Sie darauf, dass Sie eine zuverlässige Netzwerkverbindung mit niedriger Latenz zwischen dem primären und dem sekundären Rechenzentrum haben. Dies ist entscheidend für eine effektive replizierte Datenübertragung zwischen den Rechenzentren.
  • Installieren Sie die aktuelle 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 datenbankübergreifende Replikation wird in AlloyDB Omni-Operatorversion 1.5.0 oder höher unterstützt.
  • Erstellen Sie einen AlloyDB Omni-Datenbankcluster im Kubernetes-Cluster im primären Rechenzentrum.
  • Achten Sie darauf, dass die primären und Standby-Datenbankserver in Ihrem primären Datenbankcluster über ausreichend Write-Ahead Logging-Speicherplatz (WAL) verfügen, um die für die Replikation in den sekundären Cluster erforderlichen WAL-Dateien aufzunehmen. Alle Daten, die noch nicht in den sekundären Cluster repliziert wurden, werden im primären Cluster als WAL-Dateien gespeichert. Je nach Verbindungsgeschwindigkeit zwischen dem primären und dem sekundären Cluster benötigen Sie dafür möglicherweise zusätzlichen Speicherplatz.

Sekundären Datenbankcluster erstellen

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

Kubernetes

  1. Achten Sie darauf, dass die externe Verbindung für Ihren 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:

      kind: DBCluster
      spec:
       allowExternalIncomingTraffic: true
    
  2. Wenn Sie die datenzentrumsü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 für den primären Datenbankcluster aktiviert ist:

    kind: DBCluster
      spec:
        availability:
          replayReplicationSlotsOnStandbys: true
    

    Wenn Sie dieses Feld zusammen mit dem im nächsten Schritt erläuterten Feld logReplicationSlots aktivieren, wird der vom sekundären Datenbankcluster verwendete Replikations-Slot mit allen HA-Standby-Instanzen synchronisiert. Diese Konfiguration trägt dazu bei, dass die neue primäre HA-Instanz nach einem Failover oder Switchover alle Write-Ahead-Logging-Dateien (WAL) beibehält, die noch nicht vom sekundären Datenbankcluster verwendet wurden. So kann die Replikation ohne Unterbrechung fortgesetzt werden.

  3. Wenn Sie die Replikation für Ihren primären Datenbankcluster aktivieren möchten, wenden Sie ein Manifest an, 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
     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
       upstream:
         password:
           name: ha-rep-pw-DB_CLUSTER_NAME
         logReplicationSlot: LOG_REPLICATION_SLOT
    

    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: Log-Replikationsslot-Daten in WAL-Dateien. Wenn Sie diese Option aktivieren möchten, legen Sie ihren Wert auf true fest. Der Standardwert ist false.

    Es wird empfohlen, die Option logReplicationSlot für den 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 in etwa 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. Achten Sie darauf, dass 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“ des Manifests Folgendes hinzu:

     allowExternalIncomingTraffic: true
    
  9. Wenn Sie die Replikation für Ihren sekundären Datenbankcluster aktivieren möchten, wenden Sie ein Manifest an, 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
      type: Opaque
      data:
        rep-user-pw: "ENCODED_PASSWORD"
      ---
      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Replication
      metadata:
        name: SECONDARY_REPLICATION_NAME
      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 3, 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 3, 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 3, 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:

Kubernetes

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

Bevor Sie einen sekundären Datenbankcluster hochstufen, 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:

Kubernetes

  • Prüfen Sie den Replikationsstatus des sekundären Datenbankclusters, um sicherzustellen, dass er bereit und fehlerfrei ist.

    kubectl get replication SECONDARY_REPLICATION_NAME
  • Beenden Sie alle Schreibvorgänge in den primären Datenbankcluster. Führen Sie die folgende Abfrage für den primären Datenbankcluster aus, um die Replikationsverzögerung der sekundären Datenbank zu prüfen. Prüfen Sie, ob das Ergebnis nur eine minimale Verzögerung aufweist.

    Ein Verzögerungswert von 0 ist ideal. Wenn die Verzögerung größer als 0 ist, können Sie den sekundären Datenbankcluster trotzdem hochstufen. Dabei besteht jedoch das Risiko, dass einige der letzten Transaktionen verloren gehen, die bereits im primären Datenbankcluster committet 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;'

Wenn Sie einen sekundären Datenbankcluster zu einem primären Datenbankcluster hochstufen möchten, aktualisieren Sie das Feld control des Replikationsmanifests des sekundären Datenbankclusters auf promote und wenden Sie es auf Ihren Kubernetes-Cluster im sekundären Rechenzentrum an.

Kubernetes

    apiVersion: v1
    kind: Secret
    metadata:
      name: ha-rep-pw-SECONDARY_DB_CLUSTER_NAME
    type: Opaque
    data:
      rep-user-pw: "ENCODED_PASSWORD"
    ---
    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Replication
    metadata:
      name: SECONDARY_REPLICATION_NAME
    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 vor dem Switchover, ob die primären und sekundären Datenbankcluster, die zu beiden Rechenzentren gehören, online sind und ob sich die Datenbankcluster in einem fehlerfreien Zustand befinden.

Damit die Daten in Ihrem primären und sekundären Datenbankcluster während der Umstellung konsistent sind, 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:

Kubernetes

  • Prüfen Sie den Replikationsstatus des sekundären Datenbankclusters, um sicherzustellen, dass er bereit und fehlerfrei ist.

    kubectl get replication SECONDARY_REPLICATION_NAME
  • Beenden Sie alle Schreibvorgänge in den primären Datenbankcluster. Führen Sie die folgende Abfrage für den primären Datenbankcluster aus, um die Replikationsverzögerung der sekundären Datenbank zu prüfen. Prüfen Sie, ob das Ergebnis einen Verzögerungswert von 0 enthält.

     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;'

So führen Sie einen Switchover durch:

Kubernetes

  1. Wenn Sie Ihren sekundären AlloyDB Omni-Datenbankcluster in einen primären Datenbankcluster umwandeln möchten, aktualisieren Sie das Replikationsmanifest im Kubernetes-Cluster im sekundären Rechenzentrum so:

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

    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 in etwa 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 das Replikationsmanifest im 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“ lautet.

  4. So prüfen Sie den Replikationsstatus:

    kubectl get replication REPLICATION_NAME