---
title: AIOPS - Replicação Postgres em Container
slug: knowledge-base-internal/aiops-replicacao-postgres-em-container
createdAt: 2025-07-30T12:24:27.737Z
---

:::hint{type="warning"}
AVISO: Após esse procedimento, o comand&#x6F;**&#x20;\`simonctl masternode\`** não poderá mais ser utilizado, pois esta ação irá desfazer as mudanças realizadas.
:::

## Cenário de exemplo

**1 - Master Principal:**
**IP:** 192.168.68.26

**2 - Master Secundária (StandBy):**
**IP:** 192.168.68.27

### Credencial do Postgres (default):

| **Usuário** | **Senha**           |
| ----------- | ------------------- |
| replicator  | repl1c4-us3rs-410p3 |

***

# Preparação dos ambientes

As ações a seguir devem ser realizadas nos dois nós (principal e secundário)

### 1 - Instalação utilitário de yaml `yq`:

```bash
wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq
chmod +x /usr/bin/yq
```

### 2 - Assegurar um backup antes dos procedimentos de migração:

Ações: Dump, copia do deployment, copia dos dados do postgres
**Atenção:** Executar apenas na master, pois os dados serão replicados

```bash
simonctl backup
cd /opt/apps/simon/docker
cp docker-compose.yml docker-compose.backup.yml
cp -rp /dados/var/lib/postgresql/data /dados/backup/postgres_data_$(date +%Y%m%d_%H%M%S)
```

### 3 - Atualizar o deployment do postgres nas duas instancias (master principal e secundária)

**Nó 1 - Master Principal:**

```bash
curl -o /tmp/pg-replica-primary.yml https://repo.simonops.com/deployments/docker-files/pg-replica-primary.yml
yq -i '.services.postgres = load("/tmp/pg-replica-primary.yml").services.postgres' docker-compose.yml
```

**Nó 2 - Master  Secundária \*\* StandBy:**

```bash
curl -o /tmp/pg-replica-standby.yml https://repo.simonops.com/deployments/docker-files/pg-replica-standby.yml
yq -i '.services.postgres = load("/tmp/pg-replica-standby.yml").services.postgres' docker-compose.yml
```

### 4 - Atualizar o deployment da pasta docker

```bash
cd /opt/apps/simon/docker
vi docker-compose.yml
```

Altere as linhas do extra\_hosts (adicione o seu ip), veja um exemplo:&#x20;

```yaml
# Editar o extra_hosts do postgres
postgres:
...
    extra_hosts:
      - "postgres_primary:192.168.68.26"
      - "postgres_secondary:192.168.68.27"
```

### 5 - Remova o container do postgres anterior e seus dados

:::hint{type="warning"}
Prossiga somente se já efetuou o backup no passo **2 - Assegurar um backup...**
:::

```bash
docker stop postgres
docker rm postgres
rm -rf /dados/var/lib/postgresql
docker volume prune -f
docker system prune -f
```

### 6A - Atualize o container do postgres

**Nó 1 - Master Principal:**

Inicializar o diretorio ***(Atenção: apenas na master principal)***:

```bash
docker run --rm --tty -ti \
-e POSTGRES_HOST_AUTH_METHOD="scram-sha-256" \
-e POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256" \
-v /dados/var/lib/postgresql/data:/var/lib/postgresql/data --name postgres-init docker.simonops.com/simonops/space-postgres:pg17

echo -e "host replication all 0.0.0.0/0 md5" >> /dados/var/lib/postgresql/data/pg_hba.conf
```

Atualizar o container principal:

```bash
docker compose pull postgres
docker compose up -d postgres
```

Restaurar a partir do backup:

```bash
gunzip -c /dados/backup/db-dump.backup | docker exec -i postgres psql -U postgres -d simon_data
docker exec -i postgres psql -U postgres -d simon_data -c "GRANT ALL ON SCHEMA public TO simon_user;"
```

(Opcional) Restaurar o inventory:

```bash
gunzip -c /dados/backup/inv-db-dump.backup | docker exec -i postgres psql -U postgres -d inventory_data
docker exec -i postgres psql -U postgres -d inventory_data -c "GRANT ALL ON SCHEMA public TO inventory_user;"
```

Migração e restart dos containers:

```bash
simonctl migrate
docker restart app app-ws app-vibes celery celerybeat
```

(Opcional) Migração e restart dos containers do inventory:

```bash
cd /opt/apps/simon/docker-inventory
docker compose restart
```

### 6B - Atualize o container do postgres (secundária)

**Nó 2 - Master Secundária (StandBy):**

Inicializar os diretórios com o nível do usuário postgres e realizar o primeiro backup:&#x20;
**Atenção: Trocar o IP do postgres\_primary**

```bash
docker run --rm --tty -ti \
--add-host "postgres_primary:192.168.68.26" \
-e PGUSER="replicator" \
-e PGPASSWORD="repl1c4-us3rs-410p3" \
-e POSTGRES_HOST_AUTH_METHOD="scram-sha-256" \
-e POSTGRES_INITDB_ARGS="--auth-host=scram-sha-256" \
-v /dados/var/lib/postgresql/data:/var/lib/postgresql/data --name postgres-init docker.simonops.com/simonops/space-postgres:pg17 \
/bin/sh -c "echo 'Starting backup...' && pg_basebackup -D /var/lib/postgresql/data --progress -R --slot=replication_slot --host=postgres_primary --port=5432 && chmod 0700 /var/lib/postgresql/data && chown -R postgres:postgres /var/lib/postgresql/data && echo 'Concluido'"

```

```bash
docker compose up -d postgres 
```





