Как стать автором
Обновить

Репликация в PostgreSQL без проблем

Небольшой туториал для свитчеров, начинающих и неопытных, а также всех, кому ломает глаза официальная документация. Так что попрошу тех, кто собаку съел на PostgreSQL, не кидать в меня тапками за такой формат подачи материала.

Итак, что такое репликация? Простыми словами, это синхронизация данных между серверами. В данном примере рассмотрим кейс, когда у нас 2 сервера: один из них главный (master, primary), и с него мы будем реплицировать данные на второй (slave/standby).

1.На primary-сервере заходим в оболочку postgresql (psql) и там создаем пользователя, от имени которого будет выполняться репликация:

CREATE USER replicator REPLICATION LOGIN CONNECTION LIMIT 1000 ENCRYPTED PASSWORD 'password';

2. Выходим из оболочки и там же, на primary в конфигурационном файле pg_hba.conf разрешаем подключения пользователю replicator к primary:

host replication replicator айпишникstandby/32 password

Забегая наперед, скажу, что на стендбае в этом же конфиге в этой же строке тоже нужно прописать ip-адрес стендбая, и таким образом, конфигурятина на обоих серверах должна содержать айпишник стендбая.

3.Редактируем кофигурационный файл postgresql.conf на primary, настроив следующие параметры:

wal_level = logical

wal_log_hints = on

archive_mode = on

archive_command = 'cp -i %p /app/postgresql/pgdatabase/data/archive/%f'

max_wal_senders = 100

hot_standby = on

подсказка для новичков: в midnight commander можно скопировать название параметра, найти его, нажав сочетание клавиш fn+f7, а затем shift+insert

4.Создаем директорию archive в каталоге где установлен сам postgresql на primary, в данном примере каталог выглядит вот так:

mkdir -p /app/postgresql/pgdatabase/data/archive

именно эта директория прописывается выше в параметре archive_command в postgresql.conf, так что будьте внимательны. Если же у вас postgresql установлен по другому пути, укажите его, но папка archive быть должна

5. Делаем рестарт primary

pgctl stop

pgctl start

6.Заходим на Slave и там выполняем восстанoвлениe всех каталогов с данными и архивами с primary при помощи следующей команды:

pg_basebackup -h айпишникprimary -U replicator -D /app/postgresql/pgdatabase/data --write-recovery-conf

Примечание: если при выполнении данной команды система ругнётся, что папка data не пустая, удалите все данные из этой папки, сделав ее пустой, и повторите команду. И да, под айпишникprimary имело в виду не что иное, как ip-адрес primary-сервера, который надо прописать в команде

7.Старт slave:

pg_ctl start

8.Смотрим в корневом каталоге postgres на slave должен появится файл standby.signal

9.Проверяем, установилась или нет связь на Primary:

psql

select application_name, state, sync_priority, sync_state from pg_stat_replication;

select * from pg_stat_replication;

Если выдаст хоть одну строку - поздравляю, репликация удалась.

Надеюсь, кому-нибудь это поможет

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.