Externe Replikate konfigurieren

Auf dieser Seite wird beschrieben, wie Sie eine Cloud SQL-Instanz konfigurieren, die mit der pglogical-Erweiterung mit logical decoding auf ein Replikat außerhalb von Cloud SQL repliziert.

Weitere Informationen zur Konfiguration von externen Replikaten finden Sie unter Informationen zur externen Replikation.

Konfiguration externer Replikate einrichten

Hinweis

Bevor Sie mit dieser Aufgabe starten, sollten Sie eine Cloud SQL-Instanz und eine externe PostgreSQL-Instanz haben, die die Anforderungen für externe Replikate erfüllen.

Primäre Instanz konfigurieren

  1. Rufen Sie in der Google Cloud Console die Seite Cloud SQL-Instanzen auf.
  2. Aktivieren Sie den Zugang für die IP-Adresse des externen Replikats auf der primären Instanz.

    Weitere Informationen zur Aktivierung des IP-Zugriffs finden Sie unter Zugriff für IP-Verbindungen konfigurieren.

  3. Notieren Sie sich die öffentliche IP-Adresse und die öffentliche ausgehende IP-Adresse der primären Instanz zur späteren Verwendung. Sie finden diese Werte auf der Seite Übersicht der Instanz.
  4. Klicken Sie rechts oben auf das Cloud Shell-Symbol .
  5. Stellen Sie über die Cloud Shell-Eingabeaufforderung mit dem integrierten PostgreSQL-Client eine Verbindung zur primären Instanz her:
    
    gcloud sql connect PRIMARY_INSTANCE_NAME \
    --user=postgres
    
       
  6. Geben Sie das Rootpasswort ein. Anschließend sollten Sie die Postgres-Eingabeaufforderung sehen.
  7. Erstellen Sie einen PostgreSQL-Nutzer mit dem Attribut REPLICATION.
    CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  8. Installieren und konfigurieren Sie die pglogical-Erweiterung:

    Bearbeiten Sie die Cloud SQL-Instanz, um die folgenden Flags hinzuzufügen und festzulegen:

    • cloudsql.enable_pglogical
    • cloudsql.logical_decoding
    • max_replication_slots
    • max_worker_processes
    • max_wal_senders
    • Weitere Informationen zu diesen Flags finden Sie auf der Seite PostgreSQL-Ressourcen.

    Starten Sie die Datenbank neu, melden Sie sich an, wechseln Sie zum Replikationsnutzer und erstellen Sie die Erweiterung pglogical:

    CREATE EXTENSION pglogical;
       
  9. Erstellen Sie einen pglogical-Knoten:

    Ein pglogical-Knoten stellt eine physische PostgreSQL-Instanz dar und speichert Verbindungsdetails für diese Instanz.

    SELECT pglogical.create_node(
      node_name := 'provider',
      dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
       );
       
  10. Wenn Sie mit einer neuen Datenbank beginnen, erstellen Sie dieselbe Datenbank und dieselben Tabellen sowohl auf der primären Instanz als auch auf der Replikatinstanz. Beispiel:
    CREATE DATABASE test;
    
    \connect test;
    
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
    
    CREATE EXTENSION pglogical;
    
    
  11. Wenn auf der primären Instanz bereits eine Datenbank vorhanden ist, müssen Sie dieselbe auf dem Replikat erstellen. Exportieren Sie dazu die Datenbank aus der primären Instanz in einen Cloud Storage-Bucket und importieren Sie sie in das Replikat. Daten aus Cloud SQL in eine SQL-Dumpdatei in Cloud Storage exportieren.
  12. Um die Replikation verschiedener Datasets an verschiedene Ziele zu unterstützen, hat pglogical das Konzept eines Replikations-Datasets. So fügen Sie dem Standard-Replikations-Dataset beispielsweise eine Tabelle hinzu:
    SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
       

Externes Replikat konfigurieren

  1. Erstellen Sie einen speziellen Nutzer für die Replikation und gewähren Sie Replikationsberechtigungen:
    CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
       
  2. Wenn Sie mit einer neuen Datenbank beginnen, verwenden Sie den REPLICATION_USER, um dieselbe Datenbank und dieselben Tabellen sowohl auf der primären als auch auf der Replikat-Instanz zu erstellen. Beispiel:
    CREATE DATABASE test;
    \connect test;
    CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);
    INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
      
  3. Wenn Sie die externe Replikatinstanz mit einer Datei belegen, die Sie aus der primären Instanz exportiert haben, laden Sie die exportierte Datei aus Cloud Storage herunter. Wenn sich das externe Replikat auf einer Compute Engine-Instanz befindet, können Sie die Datei mit dem Befehl gsutil herunterladen:
    gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
        
  4. Importieren Sie die Datei in Ihre Datenbank.
    psql --user=postgres --password < DUMP_FILE_NAME.
    
  5. Installieren Sie pglogical entsprechend Ihrem Betriebssystem. Auf Debian-Systemen, auf denen PostgreSQL Version 13 läuft, installieren Sie zum Beispiel sudo apt-get install postgresql-13-pglogical.
  6. Melden Sie sich bei der Datenbank als Replikationsnutzer an und legen Sie die folgenden Parameter fest:
    ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
    ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).
    ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).
    # Logout of the database and restart it. For example,
    # sudo /etc/init.d/postgresql restart
    # Log back in the database as the replication_user.
    # Since the pglogical extension is created local to each database, you need to
    # execute CREATE EXTENSION pglogical in each database you create, so if you
    # haven't already done that:
    CREATE EXTENSION pglogical;
       

    For more information about these flags, see the PostgreSQL resources page.

  7. Erstellen Sie einen pglogical-Knoten:
    SELECT pglogical.create_node(
      node_name := 'subscriber',
      dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
      );
      
  8. Erstellen Sie ein pglogical-Abo:
    SELECT pglogical.create_subscription(
        subscription_name := 'SUBSCRIPTION_NAME',
        provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD'
    );
      
  9. Prüfen Sie den Status des Abos:
    SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
       
  10. Wenn der Status replicating lautet, ist die Einrichtung erfolgreich.
  11. Fügen Sie einige Daten in das Primärsystem ein und prüfen Sie das Replikat, um sicherzustellen, dass die Daten auch dort erscheinen.

Fehlerbehebung

Siehe pglogical-Fehlerbehebung

Nächste Schritte