Образовательный проект «SnakeProject» Михаила Козлова

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

Стрельба, пневматика, оружие

Саморазвитие и психология


Настройка репликации master slave PostgreSQL 17


Настройка репликации master slave PostgreSQL 17


Установка PostgreSQL на Debian или Ubuntu

Вариант 1:
sudo apt update
sudo apt install -y wget gnupg lsb-release
wget -qO - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
echo "deb http://apt.postgresql.org/pub/repos/apt/ \$(lsb_release -cs)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
sudo apt update
sudo apt install -y postgresql-17

Вариант 2:
sudo apt install -y curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt -y install postgresql-17 postgresql-client-17

sudo systemctl enable postgresql
sudo systemctl start postgresql
psql --version


Настройка master-slave PostgreSQL

Допустим:
master: 192.168.1.16
slave: 192.168.1.25

--- На мастере

sudo su postgres
psql
CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'bk321MZ^&*';

vi /etc/postgresql/17/main/postgresql.conf
listen_addresses = '*'
max_wal_senders = 10
wal_level = replica
wal_keep_size = 512MB
max_replication_slots = 10
hot_standby = on

sudo systemctl restart postgresql && sudo systemctl status postgresql

echo "host replication replicator 192.168.1.25/32 md5" >> /etc/postgresql/17/main/pg_hba.conf

su postgres
psql -c "select pg_reload_conf();"

--- На слейве

telnet 192.168.1.16 5432

sudo systemctl stop postgresql

sudo su postgres
cp -R /var/lib/postgresql/17/main/ /var/lib/postgresql/17/main_bak/
rm -rf /var/lib/postgresql/17/main/

pg_basebackup -h 192.168.1.16 -D /var/lib/postgresql/17/main/ -U replicator -P -v -R -X stream -C -S replicaslot1
Возникнет запрос пароля

Обратите внимание, что создан файл standby.signal, указывающий на то, что этот сервер находится в режиме ожидания.

В качестве альтернативы вы можете создать файл standby.signal, если он недоступен:
sudo touch /var/lib/postgresql/17/main/standby.signal

Проверьте наличие standby.signal:
ls -ltrh /var/lib/postgresql/17/main/

sudo chown -R postgres:postgres /var/lib/postgresql/17/main/
sudo chmod 700 /var/lib/postgresql/17/main/

sudo systemctl start postgresql
sudo systemctl status postgresql

Если проблемы с локалью

database locale is incompatible with operating system DETAIL:
The database was initialized with LC_COLLATE "ru_RU.UTF-8"

locale-gen ru_RU.UTF-8
sudo systemctl restart postgresql


Проверка потоковой репликации

После настройки реплики протестируйте, создав бд и таблицы на основном сервере и проверив их наличие в реплике.

--- На мастере

sudo -u postgres psql -c "SELECT * FROM pg_stat_replication;"

CREATE DATABASE testing_db;
\c testing_db
CREATE TABLE users (id serial primary key, username text);
INSERT INTO users (username) VALUES ('Superman');
INSERT INTO users (username) VALUES ('Spiderman');

--- На слейве

sudo -u postgres psql -c "SELECT pg_is_in_recovery();"
На выходе должно быть значение t, указывающее на то, что сервер находится в режиме восстановления (standby).
sudo -u postgres psql -c "select * from pg_stat_wal_receiver;"

\c testing_db
SELECT * FROM users;


Настройка синхронной фиксации (необязательно)

По умолчанию репликация является асинхронной, что означает, что первичная репликация не ожидает подтверждения записи данных от реплики.

--- На мастере

Чтобы убедиться, что данные записаны в реплику перед подтверждением, включите синхронную фиксацию:
sudo -u postgres psql
SELECT * FROM pg_stat_replication;
ALTER SYSTEM SET synchronous_standby_names TO '*';
SELECT pg_reload_conf();
systemctl reload postgresql


Тестирование аварийного переключения (необязательно)

Желательно в тесовой среде!!!

--- На мастере

sudo systemctl stop postgresql

--- На слейве

Сделаем его основным:
sudo -i -u postgres
pg_ctlcluster 17 main promote

В качестве альтернативы можно создать файл триггера:
sudo -i -u postgres
touch /var/lib/postgresql/17/main/promote.signal

psql
SELECT pg_is_in_recovery();
На выходе должно быть значение f, указывающее на то, что он больше не находится в режиме восстановления.

Проверяем возможность записи:
CREATE DATABASE testing_db2;
\c testing_db2
CREATE TABLE users (id serial primary key, username text);
INSERT INTO users (username) VALUES ('Superman');
INSERT INTO users (username) VALUES ('Spiderman');

Перенастроить исходный основной сервер в режим ожидания

Чтобы повторно интегрировать исходный основной сервер в качестве резервного, вам потребуется:
Перенастроить его в режим ожидания.
Выполните базовое резервное копирование с нового основного сервера.
Выполните действия, аналогичные настройке резервного сервера.

 


Комментарии пользователей

Эту новость ещё не комментировалиНаписать комментарий
Анонимам нельзя оставоять комментарии, зарегистрируйтесь!

Контакты Группа ВК Сборник материалов по Cisco, Asterisk, Windows Server, Python и Django, SQL и T-SQL, FreeBSD и LinuxКод обмена баннерами Видео к IT статьям на YoutubeВидео на другие темы Смотреть
Мои друзья: Советы, помощь, инструменты для сис.админа, статическая и динамическая маршрутизация, FreeBSD

© Snakeproject.ru создан в 2013 году.
При копировании материала с сайта - оставьте ссылку.
Весь материал на сайте носит ознакомительный характер,
за его использование другими людьми, автор ответственности не несет.

Рейтинг@Mail.ru
Рейтинг@Mail.ru Яндекс.Метрика





Поддержать автора и проект