Pull to refresh

Репликация в 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;

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

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

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.