SlideShare a Scribd company logo
Потоковая репликация
в PostgreSQL.
Alexey Lesovsky
alexey.lesovsky@dataegret.com
dataegret.com
Введение
• Что такое репликация и зачем.
• Какая бывает репликация.
• Как устроена потоковая репликация в PostgreSQL.
Настройка
• Настройка потоковой репликации.
• Проверка результата.
• Особенности эксплуатации.
02
01
Введение
01
Что такое репликация01
dataegret.com
Синхронизация объектов.
Изменения распространяются на копии.
Репликация может быть физической или логической.
Зачем нужна репликация01
dataegret.com
Отказоустойчивость базы данных.
Масштабирование на чтение/запись.
Аналитика и BI.
Логическая репликация01
dataegret.com
Плюсы:
● Работает между разными версиями и архитектурами.
● Позволяет реплицировать отдельные наборы таблиц.
Минусы:
● Сложность в реализации синхронной репликации.
● Утилизация CPU (триггеры, преобразование текста, ...).
Примеры:
● Slony, Londiste (Skytools), Bucardo, Pglogical.
Физическая репликация01
dataegret.com
Плюсы:
● Небольшие накладные расходы на использование ресурсов.
● Легкость установки и обслуживания.
Минусы:
● Запасные узлы доступны только для чтения.
● Не работает между разными версиями и архитектурами.
● Не умеет реплицировать наборы таблиц.
REDO журнал01
dataegret.com
Необходимость подтверждать все изменения (Durability в ACID).
Все (почти) изменения записываются в REDO журнал.
REDO журнал это история «последних» изменений.
REDO журнал используется:
● При аварийном восстановлении;
● При резервном копировании;
● При репликации.
REDO журнал в PostgreSQL01
dataegret.com
В PostgreSQL, REDO журнал называется Write Ahead Log (WAL).
WAL гарантирует что информация об изменениях будет
зафиксирована ДО реальных изменений.
Как это работает:
● LSN (log sequence number) – положение записи внутри WAL;
● Страницы маркируются LSN;
● Перед записью страницы на диск, проверяем что LSN уже
записан в журнал.
Упрощенная схема01
dataegret.com
клиент клиент клиент автовауум ...
WAL writer*
WAL
Startup/Recovery
SR/Archiving/Hot Standby
Point in Time
WAL Sender/WAL Receiver
* - опционально
Startup процесс01
dataegret.com
Главный компонент который запускает СУБД.
Запускается восстановление по WAL журналу.
Чтение конфигурации и определение источника WAL.
REDO цикл:
● Чтение WAL из pg_xlog/ или WAL архива;
● Установка соединения с upstream.
WAL Receiver процесс01
dataegret.com
WAL receiver:
● Определение с какого места начать прием WAL;
● Подключение к мастеру и отправка LSN отметки;
● Принимает WAL и записывает на диск;
● Обновляет особую переменную в shared memory;
● Отправляет статистику на мастер.
Startup процесс использует особую переменную чтобы
воспроизвести WAL до этого места.
WAL Sender процесс01
dataegret.com
Для каждого клиента, создается отдельный backend-процесс.
WAL sender это тоже backend.
WAL sender запускает репликацию.
Отправляет WAL журнал клиенту.
Или спит если нет новых журналов.
Упрощенный порядок работы01
dataegret.com
Мастер Реплика
Запуск WAL sender и получение позиции
Проверка наличия журнала
Отправка журнала
Обновление статистики
Проверка источника XLOG
Запуск WAL receiver
Вычисление стартовой позиции
Подключение к мастеру, отправка
позиции
Запись журнала на диск
Обновление «отметки»
Отправка статистики
Воспроизведение журнала
Начальная фаза
Цикл репликации
Настройка
02
План02
dataegret.com
Варианты настройки.
Подготовка мастера.
Запуск репликации.
Проверка результата.
Особенности эксплуатации.
Варианты настройки02
dataegret.com
Синхронная или асинхронная репликация.
Каскадная конфигурация.
Стандартный алгоритм02
dataegret.com
Подготовка мастера (настройка конфигурации).
Копирование каталога DATADIR.
Подготовка реплики (настройка конфигурации).
Запуск реплики.
Проверка результата.
Настройка мастера02
dataegret.com
Создание отдельного пользователя для репликации.
Правка postgresql.conf.
Правка pg_hba.conf.
Создание слота репликации (необязательно).
Настройка мастера02
dataegret.com
Отдельный пользователь для репликации (psql или createuser).
● CREATE ROLE replica WITH LOGIN REPLICATION PASSWORD '123';
Правка postgresql.conf.
Правка pg_hba.conf.
Создание слота репликации (необязательно).
Настройка мастера02
dataegret.com
Выделенный пользователь для репликации.
Правка postgresql.conf.
● wal_level = replica (or logical)
● max_wal_senders = 8
● wal_keep_segments = 200
● Рестарт обязателен.
Правка pg_hba.conf.
Создание слота репликации (необязательно).
Настройка мастера02
dataegret.com
Отдельный пользователь для репликации.
Правка postgresql.conf.
Правка pg_hba.conf.
● host replication username client_addr/mask authtype
● host replication replica 10.1.0.99/32 md5
● Требуется reload.
Создание слота репликации (необязательно).
Настройка мастера02
dataegret.com
Выделенный пользователь для репликации.
Правка postgresql.conf.
Правка pg_hba.conf.
Создание слота репликации (опциональный шаг).
● postgresql.conf — max_replication_slots = 4.
● Создание слота с pg_create_physical_replication_slot('name');
● recovery.conf — primary_slot_name = 'name'.
Копирование DATADIR02
dataegret.com
pg_basebackup (с версии 9.1)
-h, --host=…; -p, --port=…; -U, --username=…; -d, --dbname=…; -D,
--pgdata=...
-c, --checkpoint=fast | spread
-X, --xlog-method=fetch | stream – stream c версии 9.2
-R, --write-recovery-conf – c версии 9.3
-r, --max-rate=… – c версии 9.4
--xlogdir=… – c версии 9.4
-T, --tablespace-mapping=olddir=newdir – c версии 9.4
-P, --progress
pg_basebackup -P -R -X stream -c fast -h 1.2.3.4 -U replica -D /pgdb
Копирование DATADIR02
dataegret.com
Утилиты файлового копирования - cp, scp, tar, rsync...
Снимки:
● ZFS send/receive;
● LVM + dd.
pg_start_backup() + pg_stop_backup().
Настройка реплики02
dataegret.com
Файлы конфигурации:
● Должны быть одинаковыми (желательно);
● postgresql.conf;
● recovery.conf.
Настройка реплики02
dataegret.com
Файлы конфигурации (postgresql.conf):
● hot_standby = on;
Настройка реплики02
dataegret.com
Файлы конфигурации (recovery.conf):
● primary_conninfo = 'host=… port=…' – обязателен
● standby_mode = on – обязателен
● primary_slot_name = 'slotname' - слоты?
● trigger_file = '…' – рекомендуется
● recovery_min_apply_delay. - отложенная реплика
Запуск реплики02
dataegret.com
pg_ctl – штатная утилита PostgreSQL.
pg_ctlcluster – perl обертка над pg_ctl в Debian/Ubuntu Linux.
sysvinit, upstart, openrc, systemd…
Проверка результата02
dataegret.com
Наличие процессов WAL sender и WAL receiver.
Проверка системного журнала.
Простое подключение через psql.
Системное представление pg_stat_replication.
Проверка результата02
dataegret.com
Наличие процессов WAL sender и WAL receiver.
master $ ps aux |grep -i wal
postgres: wal sender process postgres [10.1.0.99] streaming 4/EA000060
standby $ ps aux |grep -i wal
postgres: wal receiver process streaming 4/EA000060
Проверка результата02
dataegret.com
Проверка системного журнала.
LOG: database system was interrupted; last known up at 2017-02-10 12:28:54
LOG: entering standby mode
LOG: redo starts at 4/E9000028
LOG: consistent recovery state reached at 4/E9000130
LOG: database system is ready to accept read only connections
LOG: started streaming WAL from primary at 4/EA000000 on timeline 1
Проверка результата02
dataegret.com
Подключение через psql.
$ psql -h replica -U postgres
psql (9.6.2)
Type "help" for help.
postgres=# select pg_is_in_recovery();
true
Проверка результата02
dataegret.com
Системное представление pg_stat_replication.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 29351
usesysid | 10
usename | postgres
application_name | walreceiver
client_addr | 10.1.0.99
client_hostname |
client_port | 5432
backend_start | 2017-04-15 12:52:54.639356+05
backend_xmin |
state | streaming
sent_location | 4/EA000060
write_location | 4/EA000060
flush_location | 4/EA000060
replay_location | 4/EA000060
sync_priority | 0
sync_state | async
Особенности эксплуатации02
dataegret.com
Поставил и забыл.
Особенности эксплуатации02
dataegret.com
Мониторинг и поиск проблем:
● pg_stat_replication — лаг репликации.
● pg_current_xlog_location(), pg_xlog_location_diff().
● pg_stat_activity — запросы на реплике.
Особенности эксплуатации02
dataegret.com
Использование слотов:
● wal_keep_segments не нужен.
● pg_replication_slots – мониторинг слотов.
● мониторинг дискового пространства.
Особенности эксплуатации02
dataegret.com
Долгие запросы на реплике могут быть причиной лага:
● Неизбежное зло.
● Переписывать запросы или отстреливать их.
● Или вообще забить.
Особенности эксплуатации02
dataegret.com
DDL и autovacuum может аффектить запросы на реплике:
● Конфликты репликации.
● pg_stat_database_conflicts.
● hot_standby_feedback = on.
● max_standby_streaming_delay = ...
Особенности эксплуатации02
dataegret.com
Нет встроенных средств автофайловера.
● trigger_file (recovery.conf).
● Скрипты на Shell/Python/Ansible/whatever.
● Repmgr, Patroni, Stolon.
Особенности эксплуатации02
dataegret.com
Бэкап:
● Реплика != Бэкап.
● pg_basebackup + WAL архив.
● pgBarman, pgBackRest.
Резюме02
dataegret.com
Репликация это нужно и полезно.
Настроить репликацию легко.
Репликация проста в обслуживании.
Спасибо за внимание!
dataegret.com alexey.lesovsky@dataegret.com

More Related Content

PDF
Call of Postgres: Advanced Operations (part 2)
PDF
Call of Postgres: Advanced Operations (part 1)
PDF
Call of Postgres: Advanced Operations (part 3)
PDF
Call of Postgres: Advanced Operations (part 5)
PDF
Streaming replication in practice
PDF
PostgreSQL Vacuum: Nine Circles of Hell
PDF
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
PDF
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 2)
Call of Postgres: Advanced Operations (part 1)
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 5)
Streaming replication in practice
PostgreSQL Vacuum: Nine Circles of Hell
Девять кругов ада или PostgreSQL Vacuum / Алексей Лесовский (PostgreSQL-Consu...
Call of Postgres: Advanced Operations (part 4)

What's hot (19)

PDF
Отладка и устранение проблем в PostgreSQL Streaming Replication.
PDF
Реализация восстановления после аварий / Сергей Бурладян (Avito)
PDF
Hacking PostgreSQL. Разделяемая память и блокировки.
PDF
Расширения для PostgreSQL
PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
PDF
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
PDF
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
PPTX
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
PDF
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
PDF
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
PDF
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
PDF
Современная операционная система: что надо знать разработчику / Александр Кри...
ODP
Hacking PostgreSQL. Физическое представление данных
PDF
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
PDF
Hacking PostgreSQL. Обзор исходного кода
PDF
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
PDF
RootConf 2015
PPTX
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Отладка и устранение проблем в PostgreSQL Streaming Replication.
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Hacking PostgreSQL. Разделяемая память и блокировки.
Расширения для PostgreSQL
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
"Отказоустойчивый standby PostgreSQL (HAProxy + PgBouncer)" Виктор Ягофаров (...
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
nginx.CHANGES.2015 / Игорь Сысоев, Валентин Бартенев (Nginx)
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Современная операционная система: что надо знать разработчику / Александр Кри...
Hacking PostgreSQL. Физическое представление данных
Отказоустойчивая обработка 10M OAuth токенов на Tarantool / Владимир Перепели...
Hacking PostgreSQL. Обзор исходного кода
Кластеры баз данных делаем сложные вещи просто / Андрей Тихонов (Avito)
RootConf 2015
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ad

Similar to PostgreSQL Streaming Replication (20)

PDF
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
PDF
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
PDF
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
PDF
Перевод новостного приложения на БД PostgreSQL
PDF
PostgreSQL в высоконагруженных проектах
PDF
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
PDF
Postgresql v509
PDF
История небольшого успеха с PostgreSQL – Владимир Бородин
PDF
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
PDF
Multimaster2
PDF
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
PDF
Hacking PostgreSQL. Обзор архитектуры.
PDF
Andrey Borodin "Architecture of online backup for various DBMS"
PDF
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PDF
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
PDF
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
ODP
Postgre Sql в веб приложениях иван золотухин
PDF
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
ODP
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
PDF
Dancing cluster
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Отладка и устранение проблем в PostgreSQL Streaming Replication / Алексей Лес...
Дмитрий Кремер, МИА «Россия сегодня» (РИА Новости). «Построение новостного we...
Перевод новостного приложения на БД PostgreSQL
PostgreSQL в высоконагруженных проектах
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Postgresql v509
История небольшого успеха с PostgreSQL – Владимир Бородин
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Multimaster2
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
Hacking PostgreSQL. Обзор архитектуры.
Andrey Borodin "Architecture of online backup for various DBMS"
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
PostgreSQL: вчера, сегодня, завтра, Олег Бартунов, Postgres Professional, Мо...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Postgre Sql в веб приложениях иван золотухин
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
SECON'2016. Сигаев Федор, Pg в кластере. Скандалы, интриги, расследования
Dancing cluster
Ad

More from Alexey Lesovsky (15)

PDF
Troubleshooting PostgreSQL with pgCenter
PDF
GitLab PostgresMortem: Lessons Learned
PDF
Troubleshooting PostgreSQL Streaming Replication
PDF
Tuning Linux for Databases.
PDF
Managing PostgreSQL with PgCenter
PDF
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
PDF
Deep dive into PostgreSQL statistics.
PDF
Streaming replication in practice
PDF
PostgreSQL Streaming Replication Cheatsheet
PDF
Deep dive into PostgreSQL statistics.
PDF
Deep dive into PostgreSQL statistics.
PDF
Pgcenter overview
PDF
Highload 2014. PostgreSQL: ups, DevOps.
PDF
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PDF
Linux tuning for PostgreSQL at Secon 2015
Troubleshooting PostgreSQL with pgCenter
GitLab PostgresMortem: Lessons Learned
Troubleshooting PostgreSQL Streaming Replication
Tuning Linux for Databases.
Managing PostgreSQL with PgCenter
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
Deep dive into PostgreSQL statistics.
Streaming replication in practice
PostgreSQL Streaming Replication Cheatsheet
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
Pgcenter overview
Highload 2014. PostgreSQL: ups, DevOps.
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
Linux tuning for PostgreSQL at Secon 2015

PostgreSQL Streaming Replication