logical decoding
.Para obter mais informações sobre replicação, consulte Sobre replicação no Cloud SQL .
Configurar a configuração da réplica externa
Antes de começar
Antes de iniciar esta tarefa, você deve ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que atenda aos requisitos para réplicas externas .
Configurar a instância primária
- Acesse a página Instâncias do Cloud SQL no Google Cloud console.
- Habilite o acesso na instância primária para o endereço IP da réplica externa.
Para obter informações sobre como habilitar o acesso IP, consulte Configurando o acesso para conexões IP .
- Registre o endereço IP público e o endereço IP público de saída da instância primária para uso posterior. Você pode encontrar esses valores na página Visão Geral da instância.
- Clique no ícone do Cloud Shell
no canto superior direito.
- No prompt do Cloud Shell, use o cliente PostgreSQL integrado para se conectar à sua instância primária:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Digite sua senha de root. Você deverá ver o prompt do postgres.
- Crie um usuário do PostgreSQL com o atributo
REPLICATION
.CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Instale e configure a extensão pglogical:
Edite a instância do Cloud SQL para adicionar e definir os seguintes sinalizadores:
-
cloudsql.enable_pglogical
-
cloudsql.logical_decoding
-
max_replication_slots
-
max_worker_processes
-
max_wal_senders
Para obter mais informações sobre esses sinalizadores, consulte a página de recursos do PostgreSQL .
Reinicie o banco de dados, faça login, mude para replication_user e crie a extensão
pglogical
:CREATE EXTENSION pglogical;
-
- Crie um nó pglógico:
Um _nó_ pglogical representa uma instância física do PostgreSQL e armazena detalhes de conexão para essa instância.
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' );
- Se você estiver começando com um novo banco de dados, crie o mesmo banco de dados e tabelas nas instâncias primária e de réplica. Por exemplo:
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;
- Se você já tiver um banco de dados na instância primária, precisará criá-lo na réplica. Para isso, exporte o banco de dados da instância primária para um bucket do Cloud Storage e importe-o para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um arquivo de despejo SQL no Cloud Storage .
- Para oferecer suporte à replicação de diferentes conjuntos de dados para diferentes destinos, o pglogical utiliza o conceito de conjunto de replicação. Por exemplo, para adicionar uma tabela ao conjunto de replicação padrão:
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
Configurar a réplica externa
- Crie um usuário especial para replicação e conceda privilégios de replicação:
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Se você estiver começando com um novo banco de dados, use REPLICATION_USER para criar o mesmo banco de dados e tabelas nas instâncias primária e de réplica. Por exemplo:
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- Se você estiver propagando a instância da réplica externa com um arquivo exportado da instância primária, baixe o arquivo exportado do Cloud Storage. Se a sua réplica externa estiver em uma instância do Compute Engine, você pode baixar o arquivo usando o comando
gcloud storage
:gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importe o arquivo para seu banco de dados.
psql --user=postgres --password < DUMP_FILE_NAME.
- Instale
pglogical
de acordo com o seu sistema operacional. Por exemplo, em sistemas Debian executando o PostgreSQL versão 13,sudo apt-get install postgresql-13-pglogical
. - Efetue login no banco de dados como replication_user e defina os seguintes 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.
- Crie um nó pglógico:
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' );
- Crie uma assinatura 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' );
- Verifique o status da assinatura:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Se o status aparecer como
replicating
, a configuração foi bem-sucedida. - Insira alguns dados no primário e verifique a réplica para garantir que os dados também apareçam lá.
Solução de problemas
Veja Solução de problemas pglogicalO que vem a seguir
- Aprenda a gerenciar réplicas .
- Saiba mais sobre requisitos e práticas recomendadas para a configuração de réplica externa .
- Saiba mais sobre a replicação do PostgreSQL .
- Saiba mais sobre as definições de configuração de replicação .
- Saiba mais sobre replicação de um servidor externo .