Налаштування кластера реплікації PostgreSQL на сервері Ubuntu 20.04
Крок 1 — Встановлення PostgreSQL
apt update
Потім встановіть пакет Postgres разом із -contribпакетом, який додає деякі додаткові утиліти та функції:
sudo apt install postgresql postgresql-contrib
Переконайтеся, що служба запущена:
sudo systemctl start postgresql.service
Крок 2 — Використання ролей і баз даних PostgreSQL
За замовчуванням Postgres використовує концепцію під назвою «ролі» для обробки аутентифікації та авторизації. Вони в чомусь схожі на звичайних користувачів і груп у стилі Unix.
Після встановлення Postgres налаштовується на використання ідентифікаційної автентифікації, що означає, що він пов’язує ролі Postgres із відповідним системним обліковим записом Unix/Linux. Якщо в Postgres існує роль, ім’я користувача Unix/Linux з тим самим ім’ям може ввійти як ця роль.
Процедура встановлення створила обліковий запис користувача під назвою postgres , яка пов’язана з роллю Postgres за замовчуванням. Існує кілька способів використовувати цей обліковий запис для доступу до Postgres. Один із способів — перейти до облікового запису postgres на вашому сервері, виконавши таку команду:
sudo -i -u postgres
Тоді ви можете отримати доступ до підказки Postgres, запустивши:
psql
Щоб вийти з підказки PostgreSQL, виконайте наступне:
\q
Для забезпечення високої доступності, надійності та відмовостійкості сервер баз даних PostgreSQL підтримує реплікацію. Це процес копіювання даних у режимі реального часу на кількох серверах для створення резервних копій для відновлення. У цьому типі налаштування первинний вузол називають головним , а сервери, які отримують репліковані дані, відомі як репліки або резервні вузли, як показано нижче.
У більшості випадків ви налаштовуєте резервні репліки PostgreSQL, щоб забезпечити надлишковість даних і запобігти єдиній точці збою (SPOF). У випадку, якщо головний сервер виходить з ладу, ви можете підвищити будь-яку з реплік, щоб вона стала новим головним. За конструкцією PostgreSQL дозволяє запускати репліки в режимі гарячого очікування . Це здатність резервних вузлів приймати підключення та операції лише для читання. Це дозволяє розподілити тягар операцій інтенсивного читання на весь кластер.
server-1: Master 10.10.10.100
server-2: Slave1 10.10.10.101
server-3: Slave2 10.10.10.102 (при потребі)
1. Налаштовуємо головний вузол (Master)
SSH на головний сервер (10.10.10.100) і виконайте наведені нижче дії, щоб внести зміни в конфігурацію.
sudo -u postgres psql
Введіть пароль postgresкористувача та натисніть ENTER, щоб продовжити. Далі введіть CREATE ROLEкоманду нижче, щоб налаштувати виділений repl_userобліковий запис з REPLICATIONпривілеями. Замінити EXAMPLE_PASSWORDна сильне значення. Пізніше ваш вузол репліки використовуватиме облікові дані repl_userдля підключення до головного вузла для отримання даних реплікації.
postgres-# CREATE ROLE repl_user WITH REPLICATION LOGIN PASSWORD 'My_PASSWORD';
Вийдіть із бази даних PostgreSQL.
postgres-# \q
Далі скористайтеся, nanoщоб відкрити файл конфігурації PostgreSQL за замовчуванням.
$ sudo nano /etc/postgresql/12/main/postgresql.conf
Відкривши наведений вище файл, знайдіть listen_addresses директиву. Цей параметр дозволяє вказати інтерфейс, за яким сервер прослуховує з’єднання. Для цього налаштування ви хочете, щоб сервер бази даних слухав інтерфейс приватної IP-адреси.
... listen_addresses = '10.10.10.100' ... # what IP address(es) to listen on; ...
Далі знайдіть wal_level. Цей параметр визначає, скільки інформації записується до файлу Write Ahead Log(WAL).
... wal_level = logical ...
Далі знайдіть wal_log_hintsдирективу. За замовчуванням це значення дорівнює off.
... wal_log_hints = on ...
Збережіть та закрийте /etc/postgresql/12/main/postgresql.confфайл, коли завершите редагування.
Далі ви внесете кілька змін у /etc/postgresql/12/main/pg_hba.confфайл, який все ще знаходиться під головним вузлом. У цьому файлі ви включите IP-адресу вузла репліки, щоб він міг підключитися до головного вузла. Відкрийте /etc/postgresql/12/main/pg_hba.confфайл за допомогою nanoдля редагування.
$ sudo nano /etc/postgresql/12/main/pg_hba.conf
Далі додайте записи нижче в нижній частині файлу, щоб дозволити вашій репліці node( 10.106.0.2) підключитися до головного repl_userоблікового запису.
host replication repl_user 10.10.10.101/32 md5
Збережіть і закрийте /etc/postgresql/12/main/pg_hba.confфайл. Потім перезапустіть сервер PostgreSQL на головному вузлі, щоб застосувати нові зміни.
$ sudo systemctl restart postgresql
Тепер ви налаштували головний сервер і тепер можете підключити резервний сервер, щоб почати реплікацію даних у режимі реального часу.
2. Налаштовуємо вузол репліки (Slave)
Сервер репліки( 10.10.10.101) повинен десь почати, перш ніж він зможе почати реплікацію даних з головного.
Найкращий спосіб ініціалізації або завантаження сервера репліки - скопіювати файли даних головного сервера за допомогою pg_basebackupутиліти. SSH до сервера репліки та виконайте наведений нижче процес, щоб створити базову копію даних головного сервера.
Переконайтеся, що сервер PostgreSQL не працює на сервері репліки, зупинивши postgresqlслужбу.
$ sudo systemctl stop postgresql
Все ще на сервері репліки скористайтеся командою Linux rm, щоб видалити всі файли в каталозі даних PostgreSQL /var/lib/postgresql/12/main/
$ sudo rm -rv /var/lib/postgresql/12/main/
Далі запустіть pg_basebackupна сервері репліки, щоб скопіювати дані з головного сервера, використовуючи наступні параметри.
sudo pg_basebackup -h 10.10.10.100 -U repl_user -X stream -C -S replica_1 -v -R -W -D /var/lib/postgresql/12/main/
Далі виконайте таку команду на своєму вузлі репліки, щоб переконатися, що файли даних належним чином належать postgresкористувачу.
$ sudo chown postgres -R /var/lib/postgresql/12/main/
Тепер у вашому вузлі репліки є правильні файли даних, тепер ви можете відкрити його як вузол гарячого очікування.
$ sudo systemctl start postgresql
У цьому посібнику ви дізналися про різні методи реплікації, які підтримуються сервером баз даних PostgreSQL, а також їх плюси, мінуси та варіанти використання. Ближче до кінця посібника ви налаштували кластер реплікації за допомогою моделі обробки потоку PostgreSQL і зможете реплікувати дані на двох серверах. Використовуйте цей посібник для впровадження резервного копіювання PostgreSQL в реальному часі, кластерів аварійного відновлення та налаштувань високої доступності.
додаткові джерела: