logical decoding
.
Para mais informações sobre a configuração da réplica externa, acesse Sobre a replicação a partir de um servidor externo.
Definir a configuração da réplica externa
Antes de começar
Antes de iniciar essa tarefa, você precisa ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que atendam aos requisitos de réplicas externas.
Configurar a instância principal
- Acesse a página "Instâncias" do Cloud SQL no Console do Google Cloud.
- Ative o acesso na instância principal do endereço IP da réplica externa.
Para informações sobre como ativar o acesso ao IP, consulte Como configurar o acesso para conexões IP.
- Registre o endereço IP público e o endereço IP de saída público da instância principal para usar posteriormente. Encontre esses valores na página de 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 à instância principal:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Insira a senha raiz. O prompt do postgres será exibido.
- 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 as sinalizações a seguir:
cloudsql.enable_pglogical
cloudsql.logical_decoding
max_replication_slots
max_worker_processes
max_wal_senders
-
Para mais informações sobre essas sinalizações, 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ó pglogical:
Um nó pglogical representa uma instância física do PostgreSQL e armazena detalhes de conexão dela.
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 as mesmas tabelas
nas instâncias principal e de réplica. 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 principal, precisará criar o mesmo na réplica. Para fazer isso, exporte o banco de dados da instância principal 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 dump SQL no Cloud Storage.
-
Para aceitar a replicação de diferentes conjuntos de dados para destinos diferentes,
a pglogical tem o conceito de um 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 o
REPLICATION_USER para criar o mesmo banco de dados e
tabelas nas instâncias principal e de réplica. 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 principal, faça o download do
arquivo exportado pelo Cloud Storage. Se a réplica externa estiver em uma
instância do Compute Engine, faça o download do arquivo usando o
comando
gsutil
:gsutil cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importe o arquivo para o banco de dados.
psql --user=postgres --password < DUMP_FILE_NAME.
- Instale
pglogical
de acordo com o SO. Por exemplo, em sistemas Debian que executam a versão 13 do PostgreSQL,sudo apt-get install postgresql-13-pglogical
. - Faça login no banco de dados como o replication_user e defina os
estes 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ó 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' );
- 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 na principal e verifique a réplica para garantir que eles também sejam exibidos.
Resolver problemas
Consulte Solução de problemas pglogicalA seguir
- Saiba como gerenciar réplicas.
- Saiba mais sobre requisitos e práticas recomendadas para a configuração da réplica externa.
- Saiba mais sobre replicação do PostgreSQL.
- Saiba mais sobre as configurações de replicação.
- Saiba mais sobre como replicar a partir de um servidor externo.