Criar uma réplica somente leitura

Selecione uma versão da documentação:

Para aumentar a capacidade de processamento de leitura e a disponibilidade, crie um servidor de réplica do AlloyDB Omni para um servidor do AlloyDB Omni. Um servidor de réplica fornece um clone somente leitura do seu servidor de banco de dados primário. Ele atualiza continuamente os próprios dados para refletir alterações nos dados do servidor primário.

Nas seções a seguir, mostramos as etapas para configurar o servidor primário do AlloyDB Omni para replicação, configurar o servidor de réplica e verificar o status da replicação no servidor primário.

Para mais detalhes, consulte Instalar o AlloyDB Omni no Kubernetes.

Configurar o servidor primário para replicação

  1. Atualize as configurações de rede ou firewall do host do servidor principal para permitir o tráfego de entrada do host do servidor de réplica pela porta do Postgres do servidor principal.

  2. Crie um usuário de replicação:

    Docker

    docker exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"

    Substitua:

    • REPLICA_USER: o nome do usuário da réplica.
    • PASSWORD: a senha do usuário da réplica.
    • CONTAINER_NAME: o nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.

    Podman

    podman exec CONTAINER_NAME psql -h localhost -U postgres -c "create user REPLICA_USER with replication password 'PASSWORD'"

    Substitua:

    • REPLICA_USER: o nome do usuário da réplica.
    • PASSWORD: a senha do usuário da réplica.
    • CONTAINER_NAME: o nome que você atribuiu ao contêiner do AlloyDB Omni ao instalá-lo.
  3. Adicione as seguintes linhas ao arquivo /DATA_DIR/pg_hba.conf do servidor principal antes de host all all all scram-sha-256, que já existe no arquivo:

    host alloydbmetadata    alloydbmetadata   IP_RANGE trust
    host replication        REPLICA_USER    IP_RANGE scram-sha-256
    

    Substitua:

    • IP_RANGE: o intervalo de IP, na notação CIDR, da sub-rede em que a máquina de réplica está localizada. Por exemplo, 203.0.113.0/24.
    • DATA_DIR: o caminho do diretório de dados do servidor principal.
  4. Reinicie o servidor primário:

    Docker

    docker restart CONTAINER_NAME

    Podman

    podman restart CONTAINER_NAME

Criar e configurar o servidor de réplica

Para criar e configurar um servidor de réplica do AlloyDB Omni, siga estas etapas:

  1. Verifique se a réplica tem conectividade de rede com o servidor principal:

    ping SOURCE_IP

    Substitua SOURCE_IP pelo endereço IP da instância primária do AlloyDB Omni da qual será feita a replicação.

  2. Verifique se a réplica pode se conectar ao servidor principal:

    Docker

    docker run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"

    Podman

    podman run -it --rm google/alloydbomni psql "host=SOURCE_IP user=REPLICA_USER replication=1" -c "IDENTIFY_SYSTEM;"

    A saída será parecida com esta:

           systemid       | timeline |  xlogpos  | dbname
     ---------------------+----------+-----------+--------
      7376500460465963036 |        1 | 0/454B670 |
      (1 row)
    
  3. A réplica precisa ter um local de armazenamento permanente no disco:

    Docker

     mkdir alloydb && docker run --rm -it \
       -e PGDATA=/var/lib/postgresql/data/pgdata \
       -v "$PWD/alloydb":/var/lib/postgresql/data \
       -p 5432:5432 \
       --user $(id -u):$(id -g) \
       google/alloydbomni \
       /usr/lib/postgresql/15/bin/pg_basebackup \
         --pgdata=/var/lib/postgresql/data/pgdata \
         --checkpoint=fast \
         --host="SOURCE_IP" \
         --port="SOURCE_PORT" \
         --username=REPLICA_USER \
         --create-slot \
         --write-recovery-conf \
         --slot="SLOT_NAME"

    Substitua:

    • SOURCE_PORT: a porta TCP da instância primária do AlloyDB Omni da qual será feita a replicação. Se você não fornecer esse valor, o AlloyDB Omni vai aplicar o valor padrão 5432.
    • SLOT_NAME: o rótulo do nome do slot de replicação.

    Podman

     mkdir alloydb && podman run --rm -it \
       -e PGDATA=/var/lib/postgresql/data/pgdata \
       -v "$PWD/alloydb":/var/lib/postgresql/data \
       -p 5432:5432 \
       --user $(id -u):$(id -g) \
       google/alloydbomni \
       /usr/lib/postgresql/15/bin/pg_basebackup \
         --pgdata=/var/lib/postgresql/data/pgdata \
         --checkpoint=fast \
         --host="SOURCE_IP" \
         --port="SOURCE_PORT" \
         --username=REPLICA_USER \
         --create-slot \
         --write-recovery-conf \
         --slot="SLOT_NAME"

    Substitua:

    • SOURCE_PORT: a porta TCP da instância primária do AlloyDB Omni da qual será feita a replicação. Se você não fornecer esse valor, o AlloyDB Omni vai aplicar o valor padrão 5432.
    • SLOT_NAME: o rótulo do nome do slot de replicação.
  4. Inicie a instância de réplica:

    Docker

    docker run --detach \
      --name pg-service \
      -e POSTGRES_PASSWORD=a \
      -e PGDATA=/var/lib/postgresql/data/pgdata \
      -v "$PWD/alloydb":/var/lib/postgresql/data \
      -v /dev/shm:/dev/shm \
      -p 5432:5432 \
      --user $(id -u):$(id -g) \
      google/alloydbomni

    Podman

    podman run --detach \
      --name pg-service \
      -e POSTGRES_PASSWORD=a \
      -e PGDATA=/var/lib/postgresql/data/pgdata \
      -v "$PWD/alloydb":/var/lib/postgresql/data \
      -v /dev/shm:/dev/shm \
      -p 5432:5432 \
      --user $(id -u):$(id -g) \
      google/alloydbomni

Verificar o status da replicação no servidor primário

Para verificar se a replicação está configurada corretamente, execute o seguinte comando no host do servidor primário:

Docker

  docker exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"

Podman

  podman exec -it CONTAINER_NAME psql -h localhost -U postgres -c "select * from pg_stat_replication"

A tabela de resposta contém uma linha para cada réplica conectada ao servidor de banco de dados primário.

Depois que você configura a replicação, todas as inserções, atualizações e exclusões de linhas no servidor de banco de dados primário ficam legíveis na réplica em poucos segundos.

A seguir