Переносим базу PostgreSQL используя репликацию

Сегодня мы поговорим как перенести боевую базу данных PostgreSQL без простоя нашего приложения. Для этого мы будем использовать репликацию.

Для начала нам нужен наш второй сервер, на который мы будем переносить базу, обратите вниманеи что для избежания большенства проблем, вам нужно использовать сервера с одинаковым программным обеспечением и версией PostgreSQL.

Для упрощения исходный сервер я буду называть master, а сервер на который мы будем переносить базу replica.

  1. СДЕЛАЙТЕ БЕКАП БАЗЫ ДАННЫХ И КОНФИГУРАЦИИ НА МАСТЕР СЕРВЕРЕ
  2. Включаем репликацию на мастер сервере, для этого в конфиг postgresql.conf добавляем следующие строки:
wal_level = replica
max_wal_senders = 3
wal_keep_size = 1024
  1. Разрешаем доступ к репликации, для этого в конфиг pg_hba.conf добавляем следующие строки:
host    replication all <replica IP>    scram-sha-256
  1. Производим первичную репликацию, при этом процессе у нас копируется вся информация с мастер сервера на реплику:
pg_basebackup -h <master IP> -D /var/lib/postgresql/data -U <replication_user> -Fp -Xs -P
  1. После этого мы можем запустить нашу реплику.
  2. Подготавливаем наши приложения к переносу, для этого мы должны изменить конфигурацию наших приложений, чтобы они использовали новый сервер.
  3. Останавливаем запись данных на мастер сервере:
SELECT pg_switch_wal();
  1. Переносим приложения на новый сервер.
  2. Повышаем реплику до мастера:
pg_ctl promote -D /var/lib/postgresql/data

Если что-то пошло не так

The database was initialized with LC_COLLATE “en_US.UTF-8”, which is not recognized by setlocale().

sudo locale-gen en_US.UTF-8
localedef -f UTF-8 -i en_US en_US.UTF-8
sudo update-locale

database “postgres” has a collation version mismatch

ALTER DATABASE guard REFRESH COLLATION VERSION;

Уменьшаем размер диска контейнера в Proxmox

Порой наступает момент когда контейнер в Proxmox становится бесполезно большим, и его размер нужно ...

Чистка места на диске после докера

Используя докер на вашем компьютере, вы можете заметить как активно он использует место для контейн...

Java №1. Java — не просто название в версии майна

Что тут сказать, я обещал вам Java, время исполнять обещание. Надеюсь на хорошую обратную связь, а ...

Размышляем о Головоломке: важность печали и опасность экстремального оптимизма

Совсем недавно (как минимум по меркам даты написания этого сценария), на большие экраны вышла Голов...

Java №2. Чем помогла Minecraft-у java

Как мне кажется, одной из важных частей успеха Minecraft — тот факт что он написан на Java. Да, ин...

Этика игр №4. Читеры

Говорить о политке конечно весело, но боюсь это не единственный вопрос *этики*, который затрагивает...

Отчёт о сбое Подпольного транскриптора 01.08.23-02.08.23

> Совсем не дают спокойствия в отпуске ## 01.08.23 (GMT+3) - 10:00 - Один из пользователей отправл...

Пожар на лыжном спуске в Капруне 2000 года

Технологическая катастрофа на фуникулёре произошедшая 11 ноября 2000 года в Капруне. В результате т...

Катастрофа DHC-6-400 в Непале 2016 года

Авиационная катастрофа самолёта DHC-6 произошедшая 24 февраля 2016 года в Непале, около деревни Дан...