logical decoding
.Para obtener más información sobre la replicación, consulte Acerca de la replicación en Cloud SQL .
Configurar la configuración de réplica externa
Antes de empezar
Antes de comenzar esta tarea, debe tener una instancia de Cloud SQL y una instancia externa de PostgreSQL que cumpla con los requisitos para réplicas externas .
Configurar la instancia principal
- Vaya a la página Instancias de Cloud SQL en el Google Cloud consola.
- Habilite el acceso en la instancia principal para la dirección IP de la réplica externa.
Para obtener información sobre cómo habilitar el acceso IP, consulte Configurar el acceso para conexiones IP .
- Registre la dirección IP pública y la dirección IP pública saliente de la instancia principal para su uso posterior. Puede encontrar estos valores en la página "Descripción general" de la instancia.
- Haga clic en el icono de Cloud Shell
en la esquina superior derecha.
- En el indicador de Cloud Shell, use el cliente PostgreSQL integrado para conectarse a su instancia principal:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Introduce tu contraseña de root. Deberías ver el mensaje de Postgres.
- Cree un usuario PostgreSQL con el atributo
REPLICATION
.CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Instalar y configurar la extensión pglogical:
Edite la instancia de Cloud SQL para agregar y configurar los siguientes indicadores:
-
cloudsql.enable_pglogical
-
cloudsql.logical_decoding
-
max_replication_slots
-
max_worker_processes
-
max_wal_senders
Para obtener más información sobre estos indicadores, consulte la página de recursos de PostgreSQL .
Reinicie la base de datos, luego inicie sesión, cambie a replication_user, cree la extensión
pglogical
:CREATE EXTENSION pglogical;
-
- Crear un nodo pglogical:
Un _nodo_ pglogical representa una instancia física de PostgreSQL y almacena detalles de conexión para esa instancia.
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' );
- Si comienza con una base de datos nueva, cree la misma base de datos y las mismas tablas tanto en la instancia principal como en la réplica. Por ejemplo:
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;
- Si ya tiene una base de datos en la instancia principal, debe crearla en la réplica. Para ello, exporte la base de datos de la instancia principal a un bucket de Cloud Storage e impórtela a la réplica. Obtenga más información sobre cómo exportar datos de Cloud SQL a un archivo de volcado de SQL en Cloud Storage .
- Para permitir la replicación de diferentes conjuntos de datos a distintos destinos, pglogical utiliza el concepto de conjunto de replicación. Por ejemplo, para agregar una tabla al conjunto de replicación predeterminado:
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
Configurar la réplica externa
- Cree un usuario especial para la replicación y otorgue privilegios de replicación:
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Si comienza con una nueva base de datos, use REPLICATION_USER para crear la misma base de datos y tablas tanto en la instancia principal como en la réplica. Por ejemplo:
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- Si va a sembrar la instancia de réplica externa con un archivo que exportó desde la instancia principal, descargue el archivo exportado desde Cloud Storage. Si su réplica externa está en una instancia de Compute Engine, puede descargar el archivo con el comando
gcloud storage
:gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importa el archivo a tu base de datos.
psql --user=postgres --password < DUMP_FILE_NAME.
- Instale
pglogical
según su sistema operativo. Por ejemplo, en sistemas Debian con PostgreSQL versión 13,sudo apt-get install postgresql-13-pglogical
. - Inicie sesión en la base de datos como replication_user y configure los siguientes parámetros:
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 # executeCREATE 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.
- Crear un nodo pglogical:
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' );
- Crear una suscripción pglogical:
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' );
- Comprobar el estado de la suscripción:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Si el estado aparece como
replicating
, entonces la configuración es exitosa. - Inserte algunos datos en el archivo principal y verifique la réplica para asegurarse de que los datos también aparezcan allí.
Solucionar problemas
Consulte Solución de problemas pglogical¿Qué sigue?
- Aprenda a administrar réplicas .
- Obtenga información sobre los requisitos y las mejores prácticas para la configuración de réplica externa .
- Obtenga más información sobre la replicación de PostgreSQL .
- Obtenga más información acerca de la configuración de replicación .
- Obtenga más información sobre cómo replicar desde un servidor externo .