PostgreSQL 14 налаштування простої реплікації
Колеги всім привіт.
У сьогоднішній статті ми поговоримо про те, як налаштувати реплікацію в PostgreSQL. Якщо сказати по-простому, то реплікація це копіювання стан одного сервера на інший за допомогою wal журналів. Ну а якщо сказати точніше, то абсолютно будь-які зміни, які відбуваються на основному сервер будуть скопійовані на сервер репліку.
Завантажити та встановити Postgresql 14 на Linux CentOS/RHEL 8/7 TAR
Я використовуватиму такі поняття у статті як джерело та репліка. Джерело це основний сервер, його ще можуть називати master, а репліка це той сервер, який прийматиме всі зміни з основного сервера, його ще можуть називати standby.
Сервера, які я використовуватиму.
postgresql1.local - 192.168.2.231 джерело
postgresql2.local - 192.168.2.232 репліка
Зміст статті:
- Налаштування параметрів postgresql.conf на джерелі.
- Створюємо користувача реплікації на джерелі.
- Налаштування параметрів pg_hba.conf на джерелі.
- Перенесення даних із джерела на репліку.
- Налаштування прав.
- Запуск репліки та перевірка стану реплікації.
1. Налаштування параметрів postgresql.conf на джерелі.
Для найпростішого налаштування реплікації нам всього лише потрібно налаштувати два параметри в конфігураційному файлі postgresql.conf на джерелі.
Знаходимо параметр wal_level та встановлюємо значення replica.
wal_level = replica
Знаходимо параметр max_wal_senders та встановлюємо значення 100.
max_wal_senders = 100
Після внесених змін обов'язково перезапустіть базу даних.
$. pg_ctl restart
2. Створюємо користувача реплікації на джерелі.
Реплікація в PostgreSQL реалізована за допомогою передачі wal журналів, а за передачу цих журналів у нас буде відповідати обліковий запис, який ми зараз будемо створювати. Зазвичай ім'я обліковий запис, який відповідає за реплікацію, називають наприклад user_slave, slave або replica. Ми створимо обліковий запис з ім'ям replicator.
sql> CREATE ROLE replicator WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE NOINHERIT REPLICATION CONNECTION LIMIT -1 PASSWORD 'Qwerty123';
Головне не забути вказати, щоб у цього користувача було право реплікації. За реплікацію у PostgreSQL відповідає привілей REPLICATION.
3. Налаштування параметрів pg_hba.conf на джерелі.
Тепер нам потрібно налаштувати доступ, щоб з сервера репліки був доступ до сервера джерела і навпаки з сервера джерела на сервер репліку. Файл pg_hba.conf відповідає за налаштування доступу. Знаходимо його та додаємо до нього:
host replication replicator 192.168.2.231/32 trust
host replication replicator 192.168.2.232/32 trust
Після змін, що вносяться, нам потрібно або перезапустити базу даних або виконати службову функцію щоб перечитувався базою даних файл pg_hba.conf. Я ж використовую службову функцію.
sql> SELECT pg_reload_conf();
4. Перенесення даних із джерела на репліку.
Тепер настала черга перенести весь вміст із сервера джерела на сервер репліку. Для цих цілей я використовуватиму утиліту pg_basebackup. На сервері репліки виконуємо перенесення даних:
$. pg_basebackup -h 192.168.2.231 -U replicator -D /app/postgresql/pgdatabase/data --write-recovery-conf --progress --verbose
5. Налаштування прав.
Після перенесення даних з джерела на репліку на сервері репліки потрібно призначити власника postgres всіх перенесених директорій.
$. chmod -R 0700 /app/postgresql/pgdatabase/data
6. Запуск репліки та перевірка стану реплікації.
Тепер можемо запустити базу даних на сервері репліки.
$. pg_ctl start
База даних на репліці успішно запустилася.
Тепер на джерелі нам потрібно перевірити чи підключитися до нього сервер репліка, для цього на джерелі виконуємо запит:
sql> select application_name, state, sent_lsn, write_lsn, sync_state from pg_stat_replication;
Сервер репліка успішно підключився до сервера джерела і реплікація у нас запрацювала.
Всім дякую, я сподіваюся, що вам моя стаття хоч чимось допомогла.