Einige oder alle Informationen auf dieser Seite gelten möglicherweise nicht für Trusted Cloud von S3NS. Weitere Informationen finden Sie unter
Unterschiede zu Google Cloud.
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 Replikation finden Sie unter Replikation in Cloud SQL.
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.
Anforderungen an die Quellinstanz
Die Quellinstanz für ein externes Lesereplikat muss eine primäre oder eigenständige Instanz sein. Sie können kein Cloud SQL-Lesereplikat als Quellinstanz für ein externes Lesereplikat verwenden. Lesereplikate werden manchmal aus dem Festplattenklon ihrer primären Instanz neu erstellt und ihr Replikationsstatus für ein externes Lesereplikat kann nicht vom Lesereplikat beibehalten werden.
- Rufen Sie in der Trusted Cloud Console die Seite Cloud SQL-Instanzen auf.
- 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.
- 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.
- Klicken Sie rechts oben auf das Cloud Shell-Symbol
.
- 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
- Geben Sie das Rootpasswort ein. Anschließend sollten Sie die Postgres-Eingabeaufforderung sehen.
- Erstellen Sie einen PostgreSQL-Nutzer mit dem Attribut
REPLICATION
.
CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Installieren und konfigurieren Sie die pglogical-Erweiterung:
Bearbeiten Sie die Cloud SQL-Instanz, um die folgenden Flags hinzuzufügen und festzulegen:
Starten Sie die Datenbank neu, melden Sie sich an, wechseln Sie zum Replikationsnutzer und erstellen Sie die Erweiterung pglogical
:
CREATE EXTENSION pglogical;
- 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'
);
- 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;
- 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.
-
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);
- 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';
- 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');
- 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
gcloud storage
herunterladen:
gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importieren Sie die Datei in Ihre Datenbank.
psql --user=postgres --password < DUMP_FILE_NAME.
- 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
.
- 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.
- 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'
);
- 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'
);
- Prüfen Sie den Status des Abos:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Wenn der Status
replicating
lautet, ist die Einrichtung erfolgreich.
- 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
Sofern nicht anders angegeben, sind die Inhalte dieser Seite unter der Creative Commons Attribution 4.0 License und Codebeispiele unter der Apache 2.0 License lizenziert. Weitere Informationen finden Sie in den Websiterichtlinien von Google Developers. Java ist eine eingetragene Marke von Oracle und/oder seinen Partnern.
Zuletzt aktualisiert: 2025-09-03 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-09-03 (UTC)."],[],[],null,["# Configure external replicas\n\n\u003cbr /\u003e\n\n[MySQL](/sql/docs/mysql/replication/configure-external-replica \"View this page for the MySQL database engine\") \\| PostgreSQL \\| [SQL Server](/sql/docs/sqlserver/replication/configure-external-replica \"View this page for the SQL Server database engine\")\n\n\u003cbr /\u003e\n\nThis page describes how to configure a Cloud SQL instance that replicates to a replica external to Cloud SQL using the [pglogical extension](/sql/docs/postgres/replication/configure-logical-replication) with `logical decoding`.\n\nFor more information about replication, see\n[About replication in Cloud SQL](/sql/docs/postgres/replication).\n\nSet up the external replica configuration\n-----------------------------------------\n\n### Before you begin\n\nBefore you start this task, you must have a Cloud SQL instance and an\nexternal PostgreSQL instance that meets the [requirements for external\nreplicas](/sql/docs/postgres/replication#external-read-replicas).\n\n### Configure the primary instance\n\n1. Go to the [Cloud SQL Instances page](https://console.cloud.google.com/sql/instances) in the Google Cloud console.\n2. Enable access on the primary instance for the IP address of the external replica. For information about enabling IP access, see\n [Configuring access for IP connections](/sql/docs/postgres/configure-ip).\n\n3. Record the public IP address and the public outgoing IP address of the primary instance for later use. You can find these values on the instance's **Overview** page.\n4. Click the Cloud Shell icon in the upper right corner.\n5. At the Cloud Shell prompt, use the built-in PostgreSQL client to connect to your primary instance: \n\n ```bash\n \n gcloud sql connect PRIMARY_INSTANCE_NAME \\\n --user=postgres\n \n \n ```\n6. Enter your root password. You should then see the postgres prompt.\n7. Create a PostgreSQL user with the `REPLICATION` attribute. \n\n CREATE USER \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD '\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e';\n \n8. Install and configure the pglogical extension: Edit the Cloud SQL instance to add and set the following flags:\n\n - `cloudsql.enable_pglogical`\n - `cloudsql.logical_decoding`\n - `max_replication_slots`\n - `max_worker_processes`\n - `max_wal_senders`\n - For more information about these flags, see the [PostgreSQL resources](/sql/docs/postgres/replication/configure-logical-replication#postgresql-resources) page.\n\n Restart the database, then login, change to the replication_user,\n create the `pglogical` extension: \n\n ```sql\n CREATE EXTENSION pglogical;\n \n ```\n9. Create a pglogical node:\n A pglogical _node_ represents a physical PostgreSQL instance, and stores\n connection details for that instance.\n\n ```sql\n SELECT pglogical.create_node(\n node_name := 'provider',\n dsn := 'host=\u003cvar translate=\"no\"\u003ePRIMARY_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n10. If you are starting with a new database, create the same database and tables on both the primary and replica instances. For example: \n\n ```sql\n CREATE DATABASE test;\n\n \\connect test;\n\n CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);\n INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');\n\n CREATE EXTENSION pglogical;\n ```\n11. If you already have a database on the primary instance, you must create the same on the replica. To do this, export the database from the primary instance to a Cloud Storage bucket and import it into the replica. Learn more about [Exporting data from Cloud SQL to a SQL dump file in Cloud Storage](/sql/docs/postgres/import-export/exporting#cloud-sql).\n12. To support replicating different sets of data to different destinations, pglogical has the concept of a replication set. For example, to add a table to the default replication set: \n\n ```sql\n SELECT pglogical.replication_set_add_table('default', 'replica_test', true);\n \n ```\n\n### Configure the external replica\n\n1. Create a special user for replication and grant replication privileges: \n\n CREATE USER \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e WITH REPLICATION SUPERUSER LOGIN PASSWORD '\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e';\n \n2. If you are starting with a new database, use the \u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e to create the same database and tables on both the primary and replica instances. For example: \n\n ```sql\n CREATE DATABASE test;\n \\connect test;\n CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text);\n INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');\n \n ```\n3. If you are seeding the external replica instance with a file you exported file from the primary instance, download the exported file from Cloud Storage. If your external replica is on a Compute Engine instance, you can download the file using the `gcloud storage` command: \n\n ```bash\n gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .\n \n ```\n4. Import the file into your database. \n\n ```\n psql --user=postgres --password \u003c DUMP_FILE_NAME.\n ```\n5. Install `pglogical` according to your OS. For example, on Debian systems running PostgreSQL version 13, `sudo apt-get install postgresql-13-pglogical`.\n6. Login to the database as the replication_user and set the following parameters: \n\n ALTER SYSTEM SET shared_preload_libraries = 'pglogical';\n ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary).\n ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary).\n # Logout of the database and restart it. For example,\n # sudo /etc/init.d/postgresql restart\n # Log back in the database as the replication_user.\n # Since the pglogical extension is created local to each database, you need to\n # execute CREATE EXTENSION pglogical in each database you create, so if you\n # haven't already done that:\n CREATE EXTENSION pglogical;\n For more information about these flags, see the /sql/docs/postgres/replication/configure-logical-replication#postgresql-resources page.\n \n7. Create a pglogical node: \n\n ```sql\n SELECT pglogical.create_node(\n node_name := 'subscriber',\n dsn := 'host=\u003cvar translate=\"no\"\u003eREPLICA_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n8. Create a pglogical subscription: \n\n ```sql\n SELECT pglogical.create_subscription(\n subscription_name := '\u003cvar translate=\"no\"\u003eSUBSCRIPTION_NAME\u003c/var\u003e',\n provider_dsn := 'host=\u003cvar translate=\"no\"\u003ePRIMARY_PUBLIC_IP_ADDRESS\u003c/var\u003e port=5432 dbname=\u003cvar translate=\"no\"\u003eDATABASE_NAME\u003c/var\u003e user=\u003cvar translate=\"no\"\u003eREPLICATION_USER\u003c/var\u003e password=\u003cvar translate=\"no\"\u003eREPLICATION_USER_PASSWORD\u003c/var\u003e'\n );\n \n ```\n9. Check the status of the subscription: \n\n ```sql\n SELECT * FROM pglogical.show_subscription_status('\u003cvar translate=\"no\"\u003eSUBSCRIPTION_NAME\u003c/var\u003e');\n \n ```\n10. If the status appears as `replicating`, then the setup is successful.\n11. Insert some data into the primary and check the replica to make sure the data appears there as well.\n\nTroubleshoot\n------------\n\nSee [Troubleshooting pglogical](/sql/docs/postgres/replication/configure-logical-replication#troubleshooting-pglogical)\n\nWhat's next\n-----------\n\n- Learn how to [manage replicas](/sql/docs/postgres/replication/manage-replicas).\n- Learn about [requirements and best practices for the external replica configuration](/sql/docs/postgres/replication#external-read-replicas).\n- Learn more about [PostgreSQL replication](https://www.postgresql.org/docs/current/static/logical-replication.html).\n- Learn more about [replication configuration settings](https://www.postgresql.org/docs/current/static/runtime-config-replication.html).\n- Learn more about [replicating from an external server](/sql/docs/postgres/replication/replication-from-external)."]]