pglogical
.
Para mais informações, consulte Sobre a extensão pglogical
e
Terminologia e componentes fundamentais do pglogical
.
Métodos de autenticação compatíveis
Os dois principais métodos de autenticação usados com a extensão pglogical
são os métodos de autenticação por senha e por confiança.
O método de autenticação recomendado é o de confiança. Para mais informações, consulte Métodos de autenticação aceitos.
Antes de começar
É possível instalar o pglogical
como uma extensão em um banco de dados específico.
Antes de implementar a extensão pglogical
no AlloyDB Omni, verifique se você atende aos seguintes requisitos do sistema:
- Acesso ao cluster PostgreSQL que não é do AlloyDB como um
superuser
. - A extensão
pglogical
está instalada no cluster do PostgreSQL que não é do AlloyDB. Para instruções de instalação específicas de lançamento e distribuição, consulte o pglogical. - Um servidor do AlloyDB Omni instalado e configurado. Para instruções sobre como instalar o AlloyDB Omni, consulte Instalar o AlloyDB Omni.
- Os endereços IP do cluster PostgreSQL não AlloyDB e do servidor host do AlloyDB Omni.
- Uma rede estabelecida e protegida entre o cluster PostgreSQL não AlloyDB e o servidor host do AlloyDB Omni. É necessária conectividade TCP na porta padrão do PostgreSQL, que é 5432.
Ajustar parâmetros no provedor que não é do AlloyDB
Defina o parâmetro
wal_level
comological
e anexepglogical
ao parâmetroshared_preload_libraries
no arquivopostgresql.conf
. A extensãopglogical
requer um conjunto mínimo de ajustes de parâmetros no cluster do provedor que não é do AlloyDB.cp postgresql.conf postgresql.bak
sed -r -i "s|(\#)?wal_level\s*=.*|wal_level=logical|" postgresql.conf
sed -r -i "s|(\#)?(shared_preload_libraries\s*=\s*)'(.*)'.*$|\2'\3,pglogical'|" postgresql.conf
sed -r -i "s|',|'|" postgresql.conf
Verifique se os parâmetros estão definidos corretamente:
grep -iE 'wal_level|shared_preload_libraries' postgresql.conf
Reinicie o cluster que não é do AlloyDB para que as mudanças de parâmetro entrem em vigor.
Outros parâmetros podem já estar definidos com valores suficientes ou exigir ajustes dependendo da sua distribuição e versão não AlloyDB.
Verifique os seguintes parâmetros:
max_worker_processes
: um por banco de dados do provedor e pelo menos um por nó assinante. O padrão para esse parâmetro é pelo menos 10.max_replication_slots
: um por nó nos nós do provedor.max_wal_senders
: um por nó nos nós do provedor.track_commit_timestamp
: defina comoon
se a última ou a primeira atualização vencer a resolução de conflitos for necessária.listen_addresses
: precisa incluir o endereço IP do AlloyDB Omni ou mencionar por um bloco CIDR abrangente.
(Opcional) Se o provedor que não é do AlloyDB for o Amazon RDS ou o Aurora, a extensão pglogical precisará ser ativada e os parâmetros necessários ajustados por meio de ajustes de
cluster parameter group
.Em um grupo de parâmetros de cluster novo ou atual, defina os seguintes parâmetros:
rds.logical_replication
a1
- De
max_replication_slots
para50
- De
max_wal_senders
para50
- De
max_worker_processes
para64
shared_preload_libraries
apg_stat_statements, pglogical
Reinicie o cluster do Amazon RDS ou do Aurora para que os ajustes do grupo de parâmetros do cluster entrem em vigor.
Confirme se todos os valores de parâmetro são relevantes:
SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name;
Ajustes de autenticação baseada em host no cluster de provedor não AlloyDB Omni
O pglogical
faz conexões TCP locais com o banco de dados do provedor. Portanto, adicione o endereço IP do servidor host ao arquivo DATA_DIR/pg_hba.conf
do AlloyDB Omni, em que DATA_DIR
é o caminho do sistema de arquivos para o diretório de dados. Por exemplo, /home/$USER/alloydb-data
.
Adicione uma entrada de autenticação de confiança para o servidor local, específica para um novo usuário
pglogical_replication
, ao arquivoDATA_DIR/pg_hba.conf
.Além disso, os nós assinantes precisam se autenticar nos nós provedores. Adicione o endereço IP de cada nó de assinante ou o intervalo de IP do bloco CIDR apropriado ao arquivo
DATA_DIR/pg_hba.conf
:echo -e "# pglogical entries: host all pglogical_replication samehost trust host all pglogical_replication SERVER_IP_ADDRESS/32 trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Substitua
SERVER_IP_ADDRESS
pelo endereço IP da instância primária do AlloyDB Omni da qual será feita a replicação.Verifique se as entradas estão corretas:
tail -3 DATA_DIR/pg_hba.conf
Reinicie o cluster que não é do AlloyDB para que as mudanças de parâmetro entrem em vigor.
Ajustar parâmetros para o cluster assinante do AlloyDB Omni
O pglogical
também exige um conjunto mínimo de ajustes de parâmetros no cluster assinante do AlloyDB Omni. Anexe pglogical
ao parâmetro shared_preload_libraries
no arquivo DATA_DIR/postgresql.conf
. Se algum banco de dados no cluster atuar como um banco de dados de provedor, faça as mudanças de parâmetro necessárias para bancos de dados de provedor.
Ajuste os parâmetros:
sudo sed -r -i "s|(shared_preload_libraries\s*=\s*)'(.*)'.*$|\1'\2,pglogical'|" DATA_DIR/postgresql.conf
Verifique se o parâmetro está definido corretamente:
grep -iE 'shared_preload_libraries' DATA_DIR/postgresql.conf
Reinicie o AlloyDB Omni para que a mudança de parâmetro entre em vigor:
Docker
docker container restart CONTAINER_NAME
Substitua
CONTAINER_NAME
pelo nome que você atribuiu ao contêiner do AlloyDB Omni ao iniciá-lo.Podman
podman container restart CONTAINER_NAME
Substitua
CONTAINER_NAME
pelo nome que você atribuiu ao contêiner do AlloyDB Omni ao iniciá-lo.Defina os valores padrão do AlloyDB Omni para outros parâmetros de banco de dados do provedor:
max_worker_processes
: um por banco de dados do provedor e um por nó do assinante.track_commit_timestamp
: defina comoon
se a resolução de conflitos da última/primeira atualização for necessária.
Confirme se todos os valores de parâmetro são relevantes:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -c " SELECT name, setting FROM pg_catalog.pg_settings WHERE name IN ('listen_addresses', 'wal_level', 'shared_preload_libraries', 'max_worker_processes', 'max_replication_slots', 'max_wal_senders', 'track_commit_timestamp') ORDER BY name; "
Ajustes de autenticação baseada em host no cluster assinante do AlloyDB Omni
O pglogical
faz conexões TCP locais com o banco de dados
assinante do AlloyDB Omni. Portanto, adicione o endereço IP do servidor host do assinante ao arquivo DATA_DIR/pg_hba.conf
do AlloyDB Omni.
Adicione uma entrada de autenticação de confiança para o servidor local, específica para um novo usuário
pglogical_replication
, ao arquivoDATA_DIR/pg_hba.conf
:echo -e "# pglogical entries: host all pglogical_replication samehost trust " | column -t | sudo tee -a DATA_DIR/pg_hba.conf
Verifique se a entrada está correta:
tail -2 DATA_DIR/pg_hba.conf
Reinicie o AlloyDB Omni para que a mudança de autenticação entre em vigor:
docker container restart CONTAINER_NAME
Crie um usuário pglogical
nos clusters de provedor e assinante.
Você precisa criar um novo usuário no cluster do provedor e do assinante.
pglogical
exige que o usuário tenha os atributos superuser
e replication
.
No cluster do provedor do AlloyDB Google Cloud , crie a função de usuário:
CREATE USER pglogical_replication LOGIN PASSWORD 'secret'; ALTER USER pglogical_replication WITH replication; ALTER USER pglogical_replication WITH superuser;
(Opcional) Se o provedor não AlloyDB for o Amazon RDS ou o Aurora, conceda o seguinte papel:
GRANT rds_superuser TO replication_user;
Adicionar pglogical
e nós ao banco de dados do provedor que não é do AlloyDB
Conceda os privilégios necessários.
É necessário instalar a extensão
pglogical
em cada banco de dados e conceder a permissãousage
ao usuário do banco de dados pglogical.Por exemplo, se o banco de dados for
my_test_db
, execute o seguinte comando:CREATE EXTENSION IF NOT EXISTS pglogical; GRANT usage ON SCHEMA pglogical TO pglogical_replication;
Crie um nó
pglogical
para os bancos de dados do provedor. Onode_name
é arbitrário, e a stringdsn
precisa ser uma conexão TCP válida de volta ao mesmo banco de dados.Por exemplo, para o banco de dados
my_test_db
, execute o seguinte comando:SELECT pglogical.create_node(node_name := 'provider', dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret');
Criar uma tabela e adicioná-la ao conjunto de replicação padrão
Crie uma tabela e adicione-a ao conjunto de replicação padrão no banco de dados do provedor que não é do AlloyDB.
Crie uma tabela de teste chamada
test_table_1
no banco de dados do provedor:CREATE TABLE test_table_1 (col1 INT PRIMARY KEY); INSERT INTO test_table_1 VALUES (1),(2),(3);
Adicione manualmente a tabela de teste ao conjunto de replicação padrão. É possível criar conjuntos de replicação pglogical personalizados ou usar os conjuntos de replicação padrão. Vários conjuntos de replicação padrão, como
default
,default_insert_only
eddl_sql
, foram criados quando você criou a extensão. É possível adicionar tabelas e sequências aos conjuntos de replicação individualmente ou todas de uma vez para um esquema especificado.-- Add the specified table to the default replication set: SELECT pglogical.replication_set_add_table(set_name := 'default', relation := 'test_table_1', synchronize_data := TRUE); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table;
(Opcional) Adicione todas as tabelas em um esquema especificado, como
public
:-- Add all "public" schema tables to the default replication set: SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']); -- Check which tables have been added to all replication sets: SELECT * FROM pglogical.replication_set_table; -- Add all "public" schema sequences to the default replication: SELECT pglogical.replication_set_add_all_sequences('default', ARRAY['public']); -- Check which sequences have been added to all replication sets: SELECT * FROM pglogical.replication_set_seq;
Remova a tabela do conjunto de replicação
default
. Se houver tabelas no esquema que não tenham uma chave primária ou uma identidade de réplica, somente as instruçõesINSERT
poderão ser replicadas. Se você adicionou essas tabelas ao conjunto de replicaçãodefault
automaticamente usando a funçãoreplication_set_add_all_tables
, remova-as manualmente desse conjunto e adicione-as ao conjuntodefault_insert_only
.-- Remove the table from the **default** replication set: SELECT pglogical.replication_set_remove_table(set_name := 'default', relation := 'test_table_2'); -- Manually add to the **default_insert_only** replication set: SELECT pglogical.replication_set_add_table(set_name := 'default_insert_only', relation := 'test_table_2');
Se quiser adicionar automaticamente as tabelas recém-criadas ao conjunto de replicação, adicione o gatilho
pglogical_assign_repset
conforme sugerido napglogical
origem.
Copiar o banco de dados para o cluster assinante do AlloyDB Omni
Crie um backup somente de esquema do banco de dados de origem usando o utilitário
pg_dump
.Execute o comando
pg_dump
no servidor assinante do AlloyDB Omni usando o endereço IP ou o endpoint do servidor que não é do AlloyDB.pg_dump -h SERVER_IP_ADDRESS -U postgres --create --schema-only my_test_db > my_test_db.schema-only.sql
Importe o backup para o banco de dados do assinante no servidor do AlloyDB Omni do assinante:
Docker
docker exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Podman
podman exec -i CONTAINER_NAME psql -h localhost -U postgres < my_test_db.schema-only.sql
Isso cria o banco de dados e o esquema, sem nenhum dos dados de linha. Os dados de linha são replicados pela extensão pglogical
. Copie ou recrie manualmente os outros usuários ou funções necessários.
Criar um nó e uma assinatura no banco de dados assinante do AlloyDB Omni
Crie um nó no banco de dados assinante do AlloyDB Omni. Adicione a senha ao seu
dsn
se você escolher usar a autenticação por senha.Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_node(node_name := 'subscriber', dsn := 'host=localhost port=5432 dbname=my_test_db user=pglogical_replication'); "
Crie uma assinatura no banco de dados do assinante, apontando de volta para o banco de dados do provedor no servidor do provedor do AlloyDB Omni.
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT pglogical.create_subscription(subscription_name := 'test_sub_1', provider_dsn := 'host=SERVER_IP_ADDRESS port=5432 dbname=my_test_db user=pglogical_replication password=secret'); "
Em alguns segundos ou minutos, os dados iniciais serão replicados do provedor para o assinante:
Docker
docker exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT * FROM test_table_1 ORDER BY 1; "
Podman
podman exec CONTAINER_NAME psql -h localhost -U postgres -d my_test_db -c "
SELECT * FROM test_table_1 ORDER BY 1; "
Outras linhas adicionadas ao banco de dados do provedor também são replicadas em tempo real em segundos.
Outras considerações sobre a implantação do pglogical
A extensão pglogical
tem muitos recursos avançados que não são abordados neste documento. Muitos desses recursos são aplicáveis à sua implementação. Você pode considerar os seguintes recursos avançados:
- Resolução de conflitos
- Replicação multimaster e bidirecional
- Inclusão de sequências
- Procedimentos de alternância e failover
A seguir
- Replicar dados entre o Google Cloud AlloyDB e o AlloyDB Omni
- Switchover e failover com replicação
pglogical