docker-compose и репликация БД postgresql 16

Помогите разобраться как организовать репликацию данных между контейнерами с postgresql в docker-compose.

Задача такая: Есть проект на Django Python, используется БД postgresql 16. Необходимо добавить еще один контейнер с postgresql 16 и настроить репликацию данных между ними так что бы у второго контейнера был доступ только на чтение. Это необходимо для тестирования запросов из django проекта.

Имеется:

version: "3.9"
services:
  postgresql_main:
    image: postgres:16.1-alpine3.19
    container_name: ${POSTGRES_HOST}
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_DB: ${POSTGRES_NAME}
    volumes:
      - db_data:/var/lib/postgresql/data
    expose:
      - 5433
    hostname: ${POSTGRES_HOST}
    networks:
      example_net:
        ipv4_address: ${POSTGRES_MAIN_IP}
    healthcheck:
      test: ["CMD-SHELL", "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
      interval: 10s
      timeout: 5s
      retries: 2

  postgresql_second:
    depends_on:
      postgresql_main:
        condition: service_healthy
    image: postgres:16.1-alpine3.19
    container_name: ${POSTGRES_SEC_HOST}
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_SEC_PASSWORD}
      POSTGRES_USER: ${POSTGRES_SEC_USER}
    volumes:
      - replca_data:/var/lib/postgresql/data
    expose:
      - 5433
    hostname: ${POSTGRES_SEC_HOST}
    networks:
      example_net:
        ipv4_address: ${POSTGRES_SEC_IP}
    healthcheck:
      test: ["CMD-SHELL", "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
      interval: 10s
      timeout: 5s
      retries: 2



Я правил добавил replication_user на основном сервере (postgresql_main) такой командой:

CREATE USER replication_user REPLICATION LOGIN CONNECTION LIMIT 10 ENCRYPTED PASSWORD 'replication_password';

Затем изменил postgresql.conf и pg_hba.conf

postgresql.conf

wal_level = replica
max_wal_senders = 2
max_replication_slots = 2
hot_standby = on
hot_standby_feedback = on

и

pg_hba.conf

host project_db     replication_user             10.10.10.10/32           md5

Также я добавил изменения для password_encryption В ОБОИХ КОНТЕЙНЕРАХ.

password_encryption = md5

Далее я иду во второй контейнер и использую

pg_basebackup --host=postgresql_main --username=replication_user --pgdata=/var/lib/postgresql/data --wal-method=stream --write-recovery-conf -W

После растарта контейнеров я захожу в первый контейнер и ввожу

SELECT * FROM pg_stat_replication;

но получаю пустую таблицу и при создании таблицы в основной БД во второй ни чего не появляется. Помогите понять что я упустил.


Ответы (0 шт):