Schreibgeschütztes Replik erstellen

Um den Lesedurchsatz und die Verfügbarkeit zu erhöhen, können Sie einen AlloyDB Omni-Replikaserver für einen vorhandenen AlloyDB Omni-Server erstellen. Ein Replikatorserver stellt einen schreibgeschützten Klon Ihres primären Datenbankservers bereit. Die Daten des sekundären Servers werden kontinuierlich aktualisiert, um Änderungen an den Daten des primären Servers widerzuspiegeln.

In den folgenden Abschnitten erfahren Sie, wie Sie den AlloyDB Omni-Primärserver für die Replikation konfigurieren, den Replikationsserver konfigurieren und den Replikationsstatus auf dem Primärserver prüfen.

Weitere Informationen finden Sie unter AlloyDB Omni auf Kubernetes installieren.

Primären Server für die Replikation konfigurieren

  1. Aktualisieren Sie die Netzwerk- oder Firewalleinstellungen des Hosts des primären Servers so, dass ein eingehender Traffic vom Host des Replikatservers über den Postgres-Port des primären Servers zugelassen wird.

  2. So erstellen Sie einen Replikationsnutzer:

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"

    Ersetzen Sie Folgendes:

    • REPLICA_USER: der Name des Replikationsnutzers.
    • PASSWORD: das Passwort für den Replikationsnutzer.
    • CONTAINER_NAME: Der Name, den Sie dem AlloyDB Omni-Container bei der Installation zugewiesen haben.

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"

    Ersetzen Sie Folgendes:

    • REPLICA_USER: der Name des Replikationsnutzers.
    • PASSWORD: das Passwort für den Replikationsnutzer.
    • CONTAINER_NAME: Der Name, den Sie dem AlloyDB Omni-Container bei der Installation zugewiesen haben.
  3. Fügen Sie der Datei /DATA_DIR/pg_hba.conf die folgenden Zeilen vor host all all all scram-sha-256 hinzu:

    host alloydbmetadata    alloydbmetadata   IP_RANGE trust
    host replication        REPLICA_USER    IP_RANGE scram-sha-256
    

    Ersetzen Sie Folgendes:

    • IP_RANGE: der IP-Bereich in CIDR-Notation des Subnetzes, in dem sich Ihr Replikationscomputer befindet. Beispiel: 203.0.113.0/24
    • DATA_DIR: Der Dateisystempfad, den dieses Replikat für sein Datenverzeichnis verwenden soll.
  4. Starten Sie den primären Server neu:

    Docker

    docker restart CONTAINER_NAME

    Podman

    podman restart CONTAINER_NAME

Replikationsserver erstellen und konfigurieren

So erstellen und konfigurieren Sie einen AlloyDB Omni-Replikaserver:

  1. Prüfen Sie, ob das Replikat eine Netzwerkverbindung zum primären Server hat:

    ping SOURCE_IP

    Ersetzen Sie SOURCE_IP durch die IP-Adresse der primären AlloyDB Omni-Instanz, von der repliziert werden soll.

  2. Prüfen Sie, ob das Replikat eine Verbindung zum primären Server herstellen kann:

    Docker

    docker run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"

    Podman

    podman run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"

    Die Ausgabe sollte in etwa so aussehen:

           systemid       | timeline |  xlogpos  | dbname
     ---------------------+----------+-----------+--------
      7376500460465963036 |        1 | 0/454B670 |
      (1 row)
    
  3. Das Replikat muss einen dauerhaften Speicherort auf der Festplatte haben:

    Docker

     mkdir alloydb && docker run --rm -it \
       -e PGDATA=/var/lib/postgresql/data/pgdata \
       -v "$PWD/alloydb":/var/lib/postgresql/data \
       -p 5432:5432 \
       --user $(id -u):$(id -g) \
       google/alloydbomni \
       /usr/lib/postgresql/15/bin/pg_basebackup \
         --pgdata=/var/lib/postgresql/data/pgdata \
         --checkpoint=fast \
         --host="SOURCE_IP" \
         --port="SOURCE_PORT" \
         --username=REPLICA_USER \
         --create-slot \
         --write-recovery-conf \
         --slot="SLOT_NAME"

    Ersetzen Sie Folgendes:

    • SOURCE_PORT: der TCP-Port der primären AlloyDB Omni-Instanz, von der repliziert werden soll. Wenn Sie diesen Wert nicht angeben, verwendet AlloyDB Omni den Standardwert 5432.
    • SLOT_NAME: das Label für den Namen des Replikationsslots.

    Podman

     mkdir alloydb && podman run --rm -it \
       -e PGDATA=/var/lib/postgresql/data/pgdata \
       -v "$PWD/alloydb":/var/lib/postgresql/data \
       -p 5432:5432 \
       --user $(id -u):$(id -g) \
       google/alloydbomni \
       /usr/lib/postgresql/15/bin/pg_basebackup \
         --pgdata=/var/lib/postgresql/data/pgdata \
         --checkpoint=fast \
         --host="SOURCE_IP" \
         --port="SOURCE_PORT" \
         --username=REPLICA_USER \
         --create-slot \
         --write-recovery-conf \
         --slot="SLOT_NAME"

    Ersetzen Sie Folgendes:

    • SOURCE_PORT: der TCP-Port der primären AlloyDB Omni-Instanz, von der repliziert werden soll. Wenn Sie diesen Wert nicht angeben, verwendet AlloyDB Omni den Standardwert 5432.
    • SLOT_NAME: das Label für den Namen des Replikationsslots.
  4. Starten Sie die Replikatinstanz:

    Docker

    docker run --detach \
      --name pg-service \
      -e POSTGRES_PASSWORD=a \
      -e PGDATA=/var/lib/postgresql/data/pgdata \
      -v "$PWD/alloydb":/var/lib/postgresql/data \
      -v /dev/shm:/dev/shm \
      -p 5432:5432 \
      --user $(id -u):$(id -g) \
      google/alloydbomni

    Podman

    podman run --detach \
      --name pg-service \
      -e POSTGRES_PASSWORD=a \
      -e PGDATA=/var/lib/postgresql/data/pgdata \
      -v "$PWD/alloydb":/var/lib/postgresql/data \
      -v /dev/shm:/dev/shm \
      -p 5432:5432 \
      --user $(id -u):$(id -g) \
      google/alloydbomni

Replikationsstatus auf dem primären Server prüfen

Führen Sie den folgenden Befehl auf dem Host des primären Servers aus, um zu prüfen, ob die Replikation richtig konfiguriert ist:

Docker

  docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"

Podman

  podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"

Die Ausgabetabelle enthält eine Zeile für jedes Replikat, das mit Ihrem primären Datenbankserver verbunden ist.

Nachdem Sie die Replikation eingerichtet haben, sind alle Einfügungen, Aktualisierungen und Löschungen von Zeilen auf Ihrem primären Datenbankserver innerhalb von Sekunden auf Ihrem Replikat lesbar.

Nächste Schritte