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

Навигация

⇒ FreeBSD and Nix ⇐

CISCO

Voice(Asterisk\Cisco)

Microsoft

Powershell

Python

SQL\T-SQL

Общая

WEB Разработка

ORACLE SQL \ JAVA

Мото

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

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


PostgreSQL репликация


PostgreSQL репликация


Репликация

Репликация — механизм синхронизации бд с ее копиями

Имеется 2 вида репликации

Синхронная репликация

Существует лишь одна версия данных на серверах
Недостатком обновления реплик является повышенная нагрузка при выполнении транзакций
Возможны проблемы с доступностью данных

Асинхронная репликация

Обновления реплик распространяются в промежутке времени, а не в рамках транзакции
Т.е. происходит задержка, в течение которой реплики становятся идентичными
В течении этого промежутка может наблюдаться рассинхрон данных на репликах


Журнал транзакций

При выполнении обработки команды, изменяющей данные в БД, PostgreSQL записывает данные на диск
Это необходимо для сохранения в случае отказа

Посмотреть директорию сервера:
$ psql
postgres=# show all;
postgres=# show data_directory;

Идентичные данные записываются в 2 места:
Файлы данных например в /var/lib/postgresql/<version>/main/base (таблицы, индексы, временные таблицы и др.)
Журнал транзакций например в /var/lib/postgresql/<version>/main/pg_wal (информация о последних изменениях)


Потоковая репликация (Streaming Replication)

Работает поверх трансляции журналов или без трансляции журналов
Дает возможность непрерывно отправлять и применять WAL записи на slave-сервера для создания копии master
Простой, надежный, используется в большинстве высоконагруженных приложений
Поддерживает асинхронный или синхронный механизмы репликации
По умолчанию репликация асинхронная

Нюансы:
репликация только всего инстанса PostgreSQL
master может обслуживать большое количество slave ввиду минимальной нагрузки
нельзя реплицировать определенную БД


Пример настройки

Разрешить порт postgres 5432 с мастера для репликации:
$ sudo firewall-cmd --permanent --zone=trusted --add-source=192.168.1.10/32
$ sudo firewall-cmd --permanent --zone=trusted --add-port=5432/tcp
$ sudo firewall-cmd --reload

Создим роль для репликации:
postgres=# CREATE USER walstreamer REPLICATION;

Мастер 192.168.1.10

$ vi /var/lib/pgsql/13/data/pg_hba.conf
...
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
host    replication     postgres        192.168.1.15/32         trust
host    replication     walstreamer     192.168.1.15/32         trust

Пример настройки, в файле найдете комментарии к опциям:
$ vi /var/lib/pgsql/13/data/postgresql.conf
...
listen_addresses = '*'
logging_collector = on
log_directory = '/var/log'
log_filename = 'postgresql.log'
log_rotation_size = 300MB
client_min_messages = notice
log_min_messages = warning
log_min_error_statement = error
log_checkpoints = on
log_connections = on
log_disconnections = on
log_hostname = on
log_line_prefix = '%t'
wal_level = replica
wal_log_hints = on
max_wal_senders = 5
max_replication_slots = 1
wal_keep_size = 100
archive_mode = on
hot_standby = on
...
Самостоятельно прочитайте и поймите, за что отвечают опции выше

Создадим log_filename и дадим права пользователю postgres:
$ touch /var/log/postgresql.log
$ chmod a-r,u+r /var/log/postgresql.log
$ chown postgres:postgres /var/log/postgresql.log

Перегружаем PostgreSQL:
systemctl restart postgresql-13

Слэйв 192.168.1.15

$ vi /var/lib/pgsql/13/data/pg_hba.conf
...
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
host    replication     postgres        192.168.1.10/32         trust
host    replication     walstreamer     192.168.1.10/32         trust

Создание точной копии с master на slave с помощью pg_basebackup:
$ pg_basebackup -h 192.168.1.10 -U postgres -p 5432 -D /var/lib/pgsql/13/backups -Fp -Xs -P -R

Файл standby.signal должен существовать в резервном каталоге данных
Определяет состояние сервера как slave, создается автоматически, если указана опция -R

Узнать состояние репликации:
$ psql -c "SELECT * from pg_stat_replication";
$ psql -c  "SELECT * from pg_stat_database_conflicts";

 


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

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

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

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

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





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