Crie uma réplica só de leitura

Selecione uma versão da documentação:

Para aumentar o débito de leitura e a disponibilidade, pode criar um servidor de réplica do AlloyDB Omni para um servidor do AlloyDB Omni existente. Um servidor de réplica fornece um clone só de leitura do servidor de base de dados principal. Atualiza continuamente os seus próprios dados para refletir as alterações aos dados do servidor principal.

As secções seguintes fornecem passos para configurar o servidor principal do AlloyDB Omni para replicação, configurar o servidor de réplica e validar o estado da replicação no servidor principal.

Para mais detalhes, consulte o artigo Instale o AlloyDB Omni no Kubernetes.

Configure o servidor principal para a replicação

  1. Atualize as definições de rede ou firewall do anfitrião do servidor principal para que permita o tráfego de entrada do anfitrião do servidor de réplica através da porta Postgres do servidor principal.

  2. Crie um utilizador de replicação:

    Docker

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

    Substitua o seguinte:

    • REPLICA_USER: o nome do utilizador da réplica.
    • PASSWORD: a palavra-passe do utilizador da réplica.
    • CONTAINER_NAME: o nome que atribuiu ao contentor do AlloyDB Omni quando o instalou.

    Podman

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

    Substitua o seguinte:

    • REPLICA_USER: o nome do utilizador da réplica.
    • PASSWORD: a palavra-passe do utilizador da réplica.
    • CONTAINER_NAME: o nome que atribuiu ao contentor do AlloyDB Omni quando o instalou.
  3. Adicione as seguintes linhas no ficheiro /DATA_DIR/pg_hba.conf do servidor principal antes de host all all all scram-sha-256 que existe no ficheiro:

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

    Substitua o seguinte:

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

    Docker

    docker restart CONTAINER_NAME

    Podman

    podman restart CONTAINER_NAME

Crie e configure o servidor de réplica

Para criar e configurar um servidor de réplica do AlloyDB Omni, conclua os seguintes passos:

  1. Certifique-se de que a réplica tem conetividade de rede com o servidor principal:

    ping SOURCE_IP

    Substitua SOURCE_IP pelo endereço IP da instância principal do AlloyDB Omni a partir da qual quer fazer a replicação.

  2. Certifique-se de que a réplica consegue estabelecer ligação 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;"

    O resultado deve ser semelhante ao seguinte:

           systemid       | timeline |  xlogpos  | dbname
     ---------------------+----------+-----------+--------
      7376500460465963036 |        1 | 0/454B670 |
      (1 row)
    
  3. A réplica tem de ter uma localização de armazenamento persistente 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 o seguinte:

    • SOURCE_PORT: a porta TCP da instância primária do AlloyDB Omni a partir da qual replicar. Se não fornecer este valor, o AlloyDB Omni aplica um valor predefinido de 5432.
    • SLOT_NAME: a etiqueta para o nome do espaço 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 o seguinte:

    • SOURCE_PORT: a porta TCP da instância primária do AlloyDB Omni a partir da qual replicar. Se não fornecer este valor, o AlloyDB Omni aplica um valor predefinido de 5432.
    • SLOT_NAME: a etiqueta para o nome do espaço 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

Valide o estado da replicação no servidor principal

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

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 saída contém uma linha para cada réplica ligada ao servidor de base de dados principal.

Depois de configurar a replicação, todas as inserções, atualizações e eliminações de linhas no servidor de base de dados principal ficam legíveis na réplica em segundos.

O que se segue?