logical decoding
.
Para mais informações sobre a replicação, consulte o artigo Acerca da replicação no Cloud SQL.
Configure a configuração da réplica externa
Antes de começar
Antes de iniciar esta tarefa, tem de ter uma instância do Cloud SQL e uma instância externa do PostgreSQL que cumpra os requisitos para réplicas externas.
Requisitos da instância de origem
A instância de origem de uma réplica de leitura externa tem de ser uma instância principal ou autónoma. Não pode usar uma réplica de leitura do Cloud SQL como a instância de origem para uma réplica de leitura externa. Por vezes, as réplicas de leitura são recriadas a partir do clone do disco da respetiva instância principal, e o respetivo estado de replicação para uma réplica de leitura externa não pode ser mantido pela réplica de leitura.
Configure a instância principal
- Aceda à página Instâncias do Cloud SQL na Google Cloud consola.
- Ative o acesso na instância principal para o endereço IP da réplica externa.
Para obter informações sobre como ativar o acesso por IP, consulte o artigo Configurar o acesso para ligações IP.
- Registe o endereço IP público e o endereço IP público de saída da instância principal para utilização posterior. Pode encontrar estes valores na página Vista geral da instância.
- Clique no ícone do Cloud Shell
no canto superior direito.
- Na linha de comandos do Cloud Shell, use o cliente PostgreSQL incorporado para se
ligar à sua instância principal:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- Introduza a sua palavra-passe de raiz. Em seguida, deve ver o comando postgres.
- Crie um utilizador 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 seguintes flags:
cloudsql.enable_pglogical
cloudsql.logical_decoding
max_replication_slots
max_worker_processes
max_wal_senders
-
Para mais informações acerca destas flags, consulte a página Recursos do PostgreSQL.
Reinicie a base de dados e, em seguida, inicie sessão, mude para o replication_user e crie a extensão
pglogical
:CREATE EXTENSION pglogical;
- Crie um nó pglogical:
Um _node_ pglogical representa uma instância física do PostgreSQL e armazena detalhes de ligaçã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 estiver a começar com uma nova base de dados, crie a mesma base de dados e tabelas nas instâncias principal 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 já tiver uma base de dados na instância principal, tem de criar a mesma na réplica. Para o fazer, exporte a base de dados da instância principal para um contentor do Cloud Storage e importe-a para a réplica. Saiba mais sobre como exportar dados do Cloud SQL para um ficheiro de captura SQL no Cloud Storage.
-
Para suportar a replicação de diferentes conjuntos de dados para diferentes destinos,
o pglogical tem o conceito de um conjunto de replicação. Por exemplo, para adicionar uma tabela
ao conjunto de replicação predefinido:
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
Configure a réplica externa
- Crie um utilizador especial para a replicação e conceda privilégios de replicação:
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD';
- Se estiver a começar com uma nova base de dados, use o comando
REPLICATION_USER para criar a mesma base de dados e
tabelas nas instâncias principal 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 estiver a inicializar a instância de réplica externa
com um ficheiro que exportou da instância principal, transfira o
ficheiro exportado do Cloud Storage. Se a réplica externa estiver numa instância do Compute Engine, pode transferir o ficheiro através do comando
gcloud storage
:gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- Importe o ficheiro para a sua base de dados.
psql --user=postgres --password < DUMP_FILE_NAME.
- Instale a app
pglogical
de acordo com o seu SO. Por exemplo, em sistemas Debian com a versão 13 do PostgreSQL,sudo apt-get install postgresql-13-pglogical
. - Inicie sessão na base 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ó 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 subscrição 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 estado da subscrição:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- Se o estado for apresentado como
replicating
, a configuração foi bem-sucedida. - Insira alguns dados no principal e verifique a réplica para se certificar de que os dados também aparecem aí.
Resolver problemas
Consulte o artigo Resolução de problemas do pglogicalO que se segue?
- Saiba como gerir réplicas.
- Saiba mais sobre os requisitos e as práticas recomendadas para a configuração da réplica externa.
- Saiba mais sobre a replicação do PostgreSQL.
- Saiba mais acerca das definições de configuração da replicação.
- Saiba mais sobre a replicação a partir de um servidor externo.