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
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.
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.
Adicione as seguintes linhas no ficheiro
/DATA_DIR/pg_hba.conf
do servidor principal antes dehost 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.
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:
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.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)
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 de5432
.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 de5432
.SLOT_NAME
: a etiqueta para o nome do espaço de replicação.
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.