1. Introdução
Este codelab mostra como configurar a replicação lógica entre instâncias independentes do AlloyDB Omni. Você vai implantar várias instâncias do AlloyDB Omni em uma única VM do Compute Engine e configurar a replicação entre elas usando a extensão pglogical.
Executar várias instâncias em um único nó é útil para desenvolvimento, teste ou simulação de ambientes de replicação. Ao final deste codelab, você terá uma configuração de replicação funcional com uma instância atuando como provedor e outra como assinante.
Pré-requisitos
- Acesso a um projeto do Google Cloud e ao Cloud Shell no console do Google Cloud.
- SDK Google Cloud (
gcloud) instalado e configurado. Para detalhes sobre como instalar o gcloud, consulte gcloud-install.
O que você vai aprender
- Como criar e preparar uma VM do Compute Engine para várias instâncias do AlloyDB Omni usando
gcloud. - Como instalar RPMs do AlloyDB Omni.
- Como configurar e inicializar várias instâncias do AlloyDB Omni usando modelos
systemd. - Como configurar a replicação lógica entre instâncias do AlloyDB Omni usando
pglogical. - Como verificar a replicação replicando dados do provedor para o assinante.
O que é necessário
- Receba um link de URL para RPMs do AlloyDB Omni. Os links são enviados para seu e-mail, incluindo um link para o servidor de URL do repositório. Inicialize a seguinte variável de ambiente para manter o URL pronto para uso durante o codelab.
export ALLOYDB_OMNI_REPOSITORY_URL="..." - Um terminal em funcionamento com acesso ao Google Cloud. Você pode usar o Cloud Shell para essa finalidade.
2. Configuração e requisitos
Configurar o projeto
Criar um projeto do Google Cloud
- No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto na nuvem do Google Cloud.
- Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto.
Iniciar o Cloud Shell
Embora seja possível operar o Google Cloud remotamente em um laptop, neste codelab você vai usar o Google Cloud Shell, um ambiente de linha de comando executado na nuvem.

- Abra o console do Google Cloud e clique no ícone do Cloud Shell na barra de ferramentas superior à direita.Também é possível abrir o Cloud Shell de uma das seguintes maneiras:
- Se você estiver usando o console do Google Cloud, pressione G e depois S.
- Clique neste link.
O provisionamento e a conexão com o ambiente do Cloud Shell geralmente levam alguns instantes. Quando essa operação for concluída, você verá uma saída semelhante a esta:

3. Criar a VM do Compute Engine
Nesta seção, crie uma única máquina virtual (VM) do Compute Engine usando a ferramenta de linha de comando gcloud. Use uma imagem do Rocky Linux 9, que é totalmente compatível com os RPMs do AlloyDB Omni.
- Defina variáveis de ambiente para o ID do projeto, o nome da VM, a zona e a região.
export PROJECT="your-project-id" export INSTANCE_NAME="alloydb-omni-multi-vm" export ZONE="us-central1-c" export REGION="us-central1" - Faça login com sua conta do Google Cloud e configure o projeto padrão.
gcloud auth login gcloud config set project $PROJECT - Para permitir conexões SSH à sua VM usando o Identity-Aware Proxy (IAP), crie uma regra de firewall.
gcloud compute firewall-rules create allow-ssh-alloydb-omni \ --project=$PROJECT \ --direction=INGRESS \ --action=allow \ --rules=tcp:22 \ --source-ranges="0.0.0.0/0" - Como a VM é criada sem um endereço IP público, configure um Cloud Router e um gateway do Cloud NAT para permitir que a VM acesse repositórios de pacotes externos e faça o download do software necessário.
gcloud compute routers create alloydb-omni-router \ --project=$PROJECT \ --network=default \ --region=$REGION gcloud compute routers nats create alloydb-omni-nat \ --project=$PROJECT \ --router=alloydb-omni-router \ --region=$REGION \ --nat-all-subnet-ip-ranges \ --auto-allocate-nat-external-ips - Verifique se a rede de nuvem privada virtual (VPC) tem uma rota de gateway de Internet padrão válida. Essa rota é necessária para que o Cloud NAT encaminhe o tráfego de saída para a Internet.
gcloud compute routes create default-internet-route \ --project=$PROJECT \ --network=default \ --destination-range=0.0.0.0/0 \ --next-hop-gateway=default-internet-gateway - Crie a instância de VM do Compute Engine com as especificações necessárias (16 vCPUs, disco permanente equilibrado de 20 GB, Rocky Linux 9). Para aumentar a segurança, use a flag
--no-addresse verifique se a VM não recebeu um endereço IP público.gcloud compute instances create $INSTANCE_NAME \ --project=$PROJECT \ --zone=$ZONE \ --machine-type=n2-highmem-16 \ --image-family=rocky-linux-9 \ --image-project=rocky-linux-cloud \ --boot-disk-size=20GB \ --boot-disk-type=pd-balanced \ --no-address - Depois que a VM for criada, verifique o status dela.
gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
4. Preparar VM
Nesta seção, você se conecta à VM recém-criada e prepara o ambiente do sistema operacional.
- Conecte-se à VM por SSH usando o IAP. Como a VM não tem um endereço IP público, o
gcloudfaz o tunelamento automático da conexão SSH pelo IAP.gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap - Defina uma variável de ambiente para o diretório de dados base.
export BASE_PGDATA="/var/lib/alloydbomni" - Crie o diretório de dados de base.
sudo mkdir -p $BASE_PGDATA - Instale o pacote
policycoreutils-python-utilspara que a política do SELinux possa ser configurada.sudo dnf install -y policycoreutils-python-utils
5. Instalar o AlloyDB Omni
Com a VM preparada, agora é possível configurar o repositório de pacotes e instalar o pacote RPM do AlloyDB Omni.
- Configure o repositório YUM na VM criando o arquivo de configuração do repositório. Substitua
$ALLOYDB_OMNI_REPOSITORY_URLpelo URL que você recebeu.export ALLOYDB_OMNI_REPOSITORY_URL="..." sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF [alloydbomni] name=alloydbomni baseurl=$ALLOYDB_OMNI_REPOSITORY_URL enabled=1 repo_gpgcheck=0 gpgcheck=1 gpgkey=https://dl.google.com/linux/linux_signing_key.pub EOF - Atualize o cache do YUM.
sudo yum makecache - Instale a versão 18 do pacote RPM do AlloyDB Omni.
sudo dnf install -y alloydbomni18
6. Configurar várias instâncias
Nesta seção, configure duas instâncias: inst1 e inst2.
- Para oferecer suporte a várias instâncias, crie o arquivo de serviço de modelo
alloydbomni18@.servicesystemd.sudo tee /etc/systemd/system/alloydbomni18@.service << EOF [Unit] Description=AlloyDB Omni Database server instance %I After=syslog.target After=network-online.target [Service] SyslogIdentifier=alloydbomni-%I Type=notify User=postgres Group=postgres # Load configuration for the instance EnvironmentFile=/etc/alloydbomni/%I.conf OOMScoreAdjust=-1000 Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj Environment=PG_OOM_ADJUST_VALUE=0 ExecStartPre=/usr/lib/postgresql/18/bin/alloydbomni18-check-db-dir \${PGDATA} ExecStart=/usr/lib/postgresql/18/bin/postgres -D \${PGDATA} ExecReload=/bin/kill -HUP \$MAINPID KillMode=mixed KillSignal=SIGINT TimeoutSec=0 TimeoutStartSec=0 TimeoutStopSec=1h [Install] WantedBy=multi-user.target EOF - Recarregue a configuração do gerenciador
systemdpara reconhecer o novo serviço de modelo.sudo systemctl daemon-reload - Crie o diretório de configuração para instâncias do AlloyDB Omni.
sudo mkdir -p /etc/alloydbomni - Configure o diretório de dados para
inst1.sudo tee /etc/alloydbomni/inst1.conf << EOF PGDATA=/var/lib/alloydbomni/inst1 EOF - Configure o diretório de dados para
inst2.sudo tee /etc/alloydbomni/inst2.conf << EOF PGDATA=/var/lib/alloydbomni/inst2 EOF - Defina as permissões adequadas nos arquivos de configuração.
sudo chmod 640 /etc/alloydbomni/*.conf sudo chown postgres:postgres /etc/alloydbomni/*.conf - Crie os diretórios de dados para as duas instâncias e defina a propriedade correta.
sudo mkdir -p /var/lib/alloydbomni/inst1 sudo mkdir -p /var/lib/alloydbomni/inst2 sudo chown -R postgres:postgres /var/lib/alloydbomni sudo chmod 750 /var/lib/alloydbomni/inst1 /var/lib/alloydbomni/inst2 - Opcional: defina limites de recursos para cada instância. Isso impede que uma instância consuma todos os recursos da VM. Crie diretórios e arquivos de substituição
systemdpara ambas as instâncias.Observação:os limites de recursos usados nas configurações a seguir (40%) são valores de exemplo. Ajuste os limites com base na sua carga de trabalho específica e na capacidade da VM.Parainst1: Parasudo mkdir -p /etc/systemd/system/alloydbomni18@inst1.service.d sudo tee /etc/systemd/system/alloydbomni18@inst1.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOFinst2:sudo mkdir -p /etc/systemd/system/alloydbomni18@inst2.service.d sudo tee /etc/systemd/system/alloydbomni18@inst2.service.d/override.conf << EOF [Service] CPUQuota=40% MemoryMax=40% EOF
7. Inicializar e preparar bancos de dados
Inicialize e prepare cada instância de banco de dados separadamente.
- Configure o SELinux para o modo permissivo na configuração.
Atenção:definir o SELinux como permissivo desativa a restrição e precisa ser usado com cuidado. Ele é usado neste codelab para simplificar a instalação. Em produção, configure as políticas adequadas do SELinux para que o AlloyDB Omni seja executado no modo de imposição. É possível reativar a aplicação depois da configuração executandosudo setenforce 0sudo setenforce 1. - Defina uma senha forte para o usuário administrador
postgresdo PostgreSQL. Essa senha é usada para as duas instâncias neste codelab. Observação:o envio de senhas usando variáveis de ambiente na linha de comando (por exemplo,export PGPASSWORD="YourStrongPassword123!"PGPASSWORD=$PGPASSWORD) é usado aqui para simplificar o codelab, mas pode expor a senha em listas de processos. Em produção, use métodos mais seguros, como um arquivo.pgpassou um gerenciador de secrets.
Configurar inst1
- Inicialize o diretório do banco de dados para
inst1.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configure a instância para detectar a atividade na porta
5433atualizando o arquivopostgresql.confdela.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5433/" \ /var/lib/alloydbomni/inst1/postgresql.conf - Prepare a instância de banco de dados para o AlloyDB Omni.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst1 \ PGPORT=5433 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
Configurar inst2
- Inicialize o diretório do banco de dados para
inst2.sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb - Configure a instância para detectar a atividade na porta
5434.sudo sed -i \ "s/^#*[[:space:]]*port[[:space:]]*=[[:space:]]*[0-9]*/port = 5434/" \ /var/lib/alloydbomni/inst2/postgresql.conf - Prepare a instância de banco de dados.
sudo PGPASSWORD=$PGPASSWORD \ PGDATA=/var/lib/alloydbomni/inst2 \ PGPORT=5434 \ /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
8. Iniciar os serviços do AlloyDB Omni
Agora você pode iniciar os serviços systemd para as duas instâncias.
- Para reconhecer a nova configuração e as substituições, recarregue a configuração do gerenciador
systemd.sudo systemctl daemon-reload - Ative e inicie o serviço para
inst1.sudo systemctl enable alloydbomni18@inst1 sudo systemctl start alloydbomni18@inst1 - Ative e inicie o serviço para
inst2.sudo systemctl enable alloydbomni18@inst2 sudo systemctl start alloydbomni18@inst2 - Verifique se os dois serviços estão ativos e em execução.
Verifique se a saída para ambos indicasudo systemctl status alloydbomni18@inst1 sudo systemctl status alloydbomni18@inst2Active: active (running).
9. Verificar instâncias do AlloyDB Omni
Verifique se as duas instâncias estão funcionando corretamente e são independentes.
- Conecte-se a
inst1(porta 5433). Você vai precisar inserir a senha configurada em Inicializar e preparar bancos de dados./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 -U postgres -W - Execute uma consulta para verificar a conexão.
postgres=# SELECT version(); - Desconecte-se da instância.
postgres=# \q - Conecte-se a
inst2(porta 5434)./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 -U postgres -W - Execute uma consulta para verificar a conexão.
postgres=# SELECT version(); - Desconecte-se da instância.
postgres=# \q
10. Configurar para replicação pglogical
Configure a replicação lógica entre as duas instâncias usando a extensão pglogical. Nesse cenário, inst1 atua como o provedor e inst2 atua como o assinante.
Observação:este codelab usa o superusuário postgres para as conexões de replicação. Em um ambiente de produção, crie um usuário de replicação dedicado com privilégios REPLICATION e conceda acesso apenas às tabelas que estão sendo replicadas.
Configurar instâncias para pglogical
- Ative
pglogicalemshared_preload_librariese configure outros parâmetros de replicação empostgresql.confparainst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst1/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst1/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Defina as configurações de
inst2que você configurou parainst1.# Append pglogical to shared_preload_libraries sudo sed -i \ "s/\(shared_preload_libraries\s*=\s*'\)\([^']*\)'/\1\2,pglogical'/" \ /var/lib/alloydbomni/inst2/postgresql.conf # Append replication settings sudo tee -a /var/lib/alloydbomni/inst2/postgresql.conf << EOF wal_level = logical max_replication_slots = 10 max_wal_senders = 10 max_worker_processes = 20 track_commit_timestamp = on alloydb.enable_pglogical = on alloydb.logical_decoding = on EOF - Para aplicar as mudanças de configuração, reinicie as duas instâncias.
sudo systemctl restart alloydbomni18@inst1 sudo systemctl restart alloydbomni18@inst2
Configurar papéis e tabelas de replicação
- Em
inst1(provedor, porta 5433), crie uma função de replicação e a tabela a ser replicada./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; " - Em
inst2(assinante, porta 5434), crie a mesma função e estrutura de tabela./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_catalog.pg_roles WHERE rolname = 'app_owner') THEN CREATE ROLE app_owner WITH LOGIN PASSWORD 'Password123'; END IF; END \$\$; GRANT ALL ON SCHEMA public TO app_owner; CREATE TABLE IF NOT EXISTS replication_test ( id SERIAL PRIMARY KEY, data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); ALTER TABLE replication_test OWNER TO app_owner; "
Configurar nós e assinaturas pglogical
- Inicialize o nó do provedor pglogical em
inst1./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.replication_set_add_table('default', 'replication_test'); " - Inicialize o nó de assinante da pglogical e crie a assinatura em
inst2. Observação:depois de criar a assinatura, pode levar um tempo para que a sincronização inicial seja concluída./usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c " CREATE EXTENSION IF NOT EXISTS pglogical; SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=127.0.0.1 port=5434 dbname=postgres user=postgres password=YourStrongPassword123!' ); SELECT pglogical.create_subscription( subscription_name := 'test_subscription', provider_dsn := 'host=127.0.0.1 port=5433 dbname=postgres user=postgres password=YourStrongPassword123!' ); "
11. Verificar a replicação do pglogical
Verifique se a replicação está funcionando como esperado inserindo dados no provedor e consultando-os no assinante.
- Verifique se a assinatura está ativa. A transição para
replicatingpode levar alguns segundos./usr/lib/postgresql/18/bin/psql -t -A -h localhost -p 5434 \ -U postgres -d postgres -c " SELECT status FROM pglogical.show_subscription_status() WHERE subscription_name = 'test_subscription'; " - Confirme se a saída mostra
replicatingantes de continuar. - Insira uma linha de teste no provedor (
inst1)./usr/lib/postgresql/18/bin/psql -h localhost -p 5433 \ -U postgres -d postgres -c " INSERT INTO replication_test (data) VALUES ('Hello from replication provider!'); " - Para verificar se os dados foram replicados, consulte a tabela em
inst2. Confirme se a linha inserida aparece em/usr/lib/postgresql/18/bin/psql -h localhost -p 5434 \ -U postgres -d postgres -c "SELECT * FROM replication_test;"inst1.
12. Limpeza
Limpar os recursos. Primeiro, destrua as instâncias do AlloyDB Omni na VM e, em seguida, exclua os recursos do Google Cloud.
Destruir instâncias do AlloyDB Omni
Antes de excluir a VM, você pode limpar as instâncias do AlloyDB Omni interrompendo e desativando os serviços e removendo a configuração e os dados deles.
- Interrompa e desative o serviço para
inst1e remova os dados e a configuração dele.sudo systemctl stop alloydbomni18@inst1 sudo systemctl disable alloydbomni18@inst1 sudo rm -rf /var/lib/alloydbomni/inst1 sudo rm -f /etc/alloydbomni/inst1.conf - Interrompa e desative o serviço para
inst2e remova os dados e a configuração dele.sudo systemctl stop alloydbomni18@inst2 sudo systemctl disable alloydbomni18@inst2 sudo rm -rf /var/lib/alloydbomni/inst2 sudo rm -f /etc/alloydbomni/inst2.conf - Atualize a configuração do gerenciador systemd e redefina as unidades com falha.
sudo systemctl daemon-reload sudo systemctl reset-failed
Limpar recursos do Google Cloud
Depois de limpar as instâncias, exclua a VM do Compute Engine e outros recursos.
- Desconecte-se da sessão SSH.
exit - Exclua a instância de VM do Compute Engine.
gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet - Exclua a regra de firewall.
gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet - Exclua o Cloud NAT e o roteador.
gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet - Exclua a rota padrão da Internet.
gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
13. Parabéns
Você implantou e configurou várias instâncias do AlloyDB Omni em uma única VM do Compute Engine.
O que aprendemos
- Como provisionar e preparar uma VM do Compute Engine.
- Como instalar RPMs do AlloyDB Omni.
- Como configurar modelos
systemdpara várias instâncias. - Como inicializar, configurar e iniciar vários serviços independentes em portas diferentes.
- Como verificar a independência de cada instância.
Saiba mais
- Consulte a documentação do AlloyDB Omni para mais informações sobre instalação e configuração.
- Para detalhes sobre a extensão de replicação usada neste codelab, consulte a documentação do pglogical.