SlideShare una empresa de Scribd logo
1 de 70
Descargar para leer sin conexión
Потоковая репликация на практике.
PgConf.Russia 2016, Moscow
Лесовский Алексей
lesovsky@pgco.me
Материалы: http://goo.gl/Yy4UzH
I. Как устроена репликация.
II. Настройка репликации.
Практика.
III. Мониторинг и эксплуатация.
IV. Проблемы и решения.
V. Switchiver и Failover.
Практика.
Содержание.
Что такое репликация и её разновидности.
Write Ahead Log. REDO и реализация REDO в PostgreSQL.
Общий взгляд на архитектуру репликации в PostgreSQL.
Особенности работы процессов отвечающих за репликацию.
Часть I. Как устроена репликация.
Копирование и синхронизация нескольких копий объекта.
Изменение одной копии распространяются на другие копии.
Репликация бывает физическая и логическая.
Что такое репликация.
Плюсы:
● Умеет работать между разными версиями и архитектурами.
● Умеет реплицировать отдельные таблицы и наборы таблиц.
Минусы:
● Крайне сложно реализовать синхронную репликацию.
● Дополнительная нагрузка на CPU (триггеры).
Примеры:
● Slony, Londiste (Skytools), Bucardo, Pglogical.
Логическая репликация.
Плюсы:
● Минимальный накладные расходы на использование ресурсов.
● Легкая настройка и сопровождение.
Минусы:
● Standby сервера доступны только на чтение.
● Не умеет работать между разными версиями и архитектурами.
● Нет возможности реплицировать отдельные таблицы и наборы таблиц.
Физическая репликация.
Фиксирование всех изменений в базе (Durability в ACID).
При COMMIT делается синхронизация (flush) REDO буферов на диск.
Журнал REDO содержит историю всех изменений в БД.
Любое изменение в БД сначала фиксируется в REDO.
Журнал REDO используется:
● при аварийном восстановлении;
● в резервном копировании и Point In Time Recovery;
● в репликации.
Write Ahead Log. REDO.
В PostgreSQL, REDO известен как Write Ahead Log (WAL).
WAL гарантирует запись изменений БД, до момента изменения самих
данных.
Как это гарантировать?
● LSN (log sequence number) - местоположение записи внутри WAL
журнала;
● каждая страница маркируется LSN последней записи журнала которая
затрагивает страницу;
● bufmgr перед записью измененной страницы, должен убедиться что
журнал сброшен на диск до LSN указанного в странице.
Write Ahead Log. REDO implementation in PostgreSQL.
В общих чертах.
backend backend backend autovac ...
WAL writer*
WAL
Startup/Recovery
SR/Archiving/Hot Standby
Point in Time
WAL Sender/WAL Receiver
* - может отсутствовать
Задача startup процесса запустить БД (после чего он завершается).
В standby режиме он инициирует бесконечный replay loop.
При запуске REDO читаем recovery.conf.
REDO:
● чтение сегментов из pg_xlog/archive;
● запуск wal receiver и чтение XLOG с мастера;
При достижении consistency (min recovery ending location) разрешаем
принимать подключения и запускаем checkpointer/bgwriter.
Следование оставшимся recovery параметрам из recovery.conf.
Еще больше конкретики смотрите в StartupXLOG() функции.
Startup process.
Postmaster на каждого клиента создает процесс — backend.
WAL sender это тоже backend (с флагом am_walsender).
Бэкенд запускает exec_replication_command().
exec_replication_command() может делать разные вещи:
● создание/удаление слотов репликации;
● запуск basebackup;
● запуск физической/логической репликации.
В последнем случае, бэкенд отправляет XLOG сегменты клиенту.
Или спит когда новых XLOG нет.
WAL Sender process.
Startup процесс поочередно проверяет источники XLOG.
Startup процесс инициирует запуск WAL receiver'а.
Нужен recovery.conf + primary_conninfo.
WAL receiver:
● определяет стартовую позицию для передачи XLOG;
● подключается к мастеру и передает стартовую позицию;
● принимает XLOG сегменты и записывает их на диск;
● обновляет переменную в shared memory (WalRcv→receivedUpto);
● отправляет статистику + фидбек.
Startup процесс использует переменную чтобы понимать до какой позиции
следует воспроизводить XLOG.
WAL Receiver process.
Вопросы?
backend backend backend autovac ...
WAL writer
WAL
Startup/Recovery
SR/Archiving/Hot Standby
Point in Time
WAL Sender/WAL Receiver
Варианты настройки.
Подготовка серверов к запуску репликации.
Используемые инструменты.
Запуск репликации и проверка успешности запуска.
Специфические особенности.
Часть II. Настройка репликации.
Синхронная/Асинхронная репликация.
Каскадная репликация.
Uni-directional/Bi-directional.
Варианты настройки.
Подготовка мастера.
Копирование DATADIR.
Подготовка standby.
Запуск standby.
Проверка результата.
Общий алгоритм.
Отдельный пользователь для репликации.
Редактирование postgresql.conf.
Редактирование pg_hba.conf.
Создание слотов репликации (только при необходимости).
Настройка мастера.
Отдельный пользователь для репликации.
● CREATE ROLE ... WITH LOGIN REPLICATION PASSWORD '…';
Редактирование postgresql.conf.
Редактирование pg_hba.conf.
Создание слотов репликации (только при необходимости).
Настройка мастера.
Отдельный пользователь для репликации.
Редактирование postgresql.conf.
● wal_level = hot_standby
● max_wal_senders > 0
● Перезапуск PostgreSQL
Редактирование pg_hba.conf.
Создание слотов репликации (только при необходимости).
Настройка мастера.
Отдельный пользователь для репликации.
Редактирование postgresql.conf.
Редактирование pg_hba.conf.
● host replication username client_addr/mask authtype
● host replication replica 10.1.0.99/32 md5
● pg_reload_conf()
Создание слотов репликации (только при необходимости).
Настройка мастера.
Отдельный пользователь для репликации.
Редактирование postgresql.conf.
Редактирование pg_hba.conf.
Создание слотов репликации (только при необходимости).
● max_replication_slots > 0
● pg_create_physical_replication_slot('slotname');
● primary_slot_name = 'slotname' (recovery.conf)
Настройка мастера.
pg_basebackup (с версии 9.1)
-h, --host=...; -p, --port=...; -U, --username=...; -d, --dbname=...; -D, --pgdata=...
-c, --checkpoint=fast | spread
-X, --xlog-method=fetch | stream – stream с 9.2
-R, --write-recovery-conf – с 9.3
-r, --max-rate=… – с 9.4
--xlogdir=… – с 9.4
-T, --tablespace-mapping=olddir=newdir – с 9.4
-P, --progress
pg_basebackup -P -R -X stream -c fast -h 127.0.0.1 -U replica -D /pgdb
Копирование DATADIR.
Копирование через cp, scp, tar, rsync...
Snapshots:
● ZFS send/receive;
● LVM + dd.
pg_start_backup() + pg_stop_backup().
Копирование DATADIR. Альтернативы pg_basebackup.
Идентичность файлов конфигурации.
Файлы конфигурации:
● postgresql.conf;
● recovery.conf.
Настройка Standby.
Идентичность файлов конфигурации:
● Зачем?
● Как?
Файлы конфигурации:
● postgresql.conf;
● recovery.conf.
Настройка Standby.
Идентичность файлов конфигурации.
Файлы конфигурации (postgresql.conf):
● hot_standby = on;
● max_standby_streaming_delay;
● wal_receiver_status_interval;
● hot_standby_feedback;
● wal_receiver_timeout;
Настройка Standby.
Идентичность файлов конфигурации.
Файлы конфигурации (recovery.conf):
● primary_conninfo = 'host=… port=…'
● standby_mode = on
● primary_slot_name = 'slotname'
● trigger_file = '...'
● recovery_min_apply_delay.
Настройка Standby.
pg_ctl — родная утилита от PostgreSQL.
pg_ctlcluster — враппер над pg_ctl в Debian/Ubuntu.
sysvinit, upstart, openrc, systemd…
Запуск Standby.
Наличие процессов wal sender и wal receiver.
Проверка журнала событий.
Проверка через обычное подключение (psql).
Системное представление pg_stat_replication.
Проверка успешности запуска.
DATADIR, конфиги и Debian-based vs. RHEL-based.
pg_ctlcluster и ошибка невозможности подключения.
Подозрительно малое количество процессов в выводе ps.
Разные особенности.
Масштабируемость на чтение.
Полнотекстовый поиск.
Аналитика.
Реплика не значит backup.
Итоги. Практическое назначение реплик.
Вопросы.
root password: pgconf2016
# su - postgres – все задачи делаем от имени postgres
$ ps auxf – что вообще мы имеем?
$ pwd – где мы?
$ ls -l 9.5 – где все будет происходить.
Настройка репликации. Практическая часть.
$ vi 9.5/data/postgresql.conf
● listen_addresses = '*' – слушаем на всех интерфейсах.
● wal_level = hot_standby – подробность WAL журнала.
● max_wal_senders = 4 – лимит на walsender'ы.
● hot_standby = on – разрешить read-only запросы.
Подготовка мастера.
$ psql – создаем отдельного пользователя.
CREATE ROLE replica WITH LOGIN REPLICATION PASSWORD 'rep123';
$ vi .pgpass – настраиваем файл паролей.
*:*:*:replica:rep123
$ chmod 600 .pgpass
$ vi 9.5/data/pg_hba.conf – прописываем правила авторизации.
host replication replica 127.0.0.1/32 md5
$ pg_ctl -D 9.5/data/ -m fast restart – применяем изменения в силу.
Подготовка мастера.
$ pg_basebackup -P -R -c fast -X stream -h 127.0.0.1 -U replica -D 9.5/replica
● -c fast — сделать принудительный checkpoint.
● -X stream — скопировать новые XLOG через выделенное содениние.
● -R — создать минимальный recovery.conf
$ vi 9.5/replica/postgresql.conf – правим номер порт.
port = 5433
$ pg_ctl -D 9.5/replica/ start – запускаем реплику.
Создание standby сервера.
$ ps auxf – наличие sender/receiver процессов.
$ psql -p 5433 – проверяем статус на standby.
select pg_is_in_recovery(); – режим восстановления на standby.
$ psql – проверяем статус на мастере.
select * from pg_stat_replication ; – наличие статистики со standby.
Проверка.
Это все.
Вопросы.
«Настроил и забыл» - это про потоковую репликацию.
Мониторинг:
● внутренняя статистика;
● вспомогательные функции;
● примеры запросов.
Экcплуатация:
● добавление и удаление реплик;
● приостановка репликации;
● добавление и удаление слотов.
Часть III. Мониторинг и эксплуатация.
Системные представление (views):
● pg_stat_replication
● pg_stat_replication_slots
Мониторинг.
pg_is_in_recovery()
pg_current_xlog_location()
pg_last_xact_replay_timestamp()
pg_last_xlog_receive_location()
pg_last_xlog_replay_location()
pg_xlog_location_diff()
Мониторинг. Вспомогательные функции.
Мониторинг репликации на мастере.
select
pid, client_addr,
pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),sent_location)) as
pending_xlog,
pg_size_pretty(pg_xlog_location_diff(sent_location,write_location)) as write,
pg_size_pretty(pg_xlog_location_diff(write_location,flush_location)) as flush,
pg_size_pretty(pg_xlog_location_diff(flush_location,replay_location)) as replay,
pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),replay_location)) as
total_lag
from pg_stat_replication;
pid | client_addr | pending_xlog | write | flush | replay | total_lag
-------+---------------+--------------+----------+---------+------------+------------
21015 | 127.0.0.1 | 0 bytes | 0 bytes | 0 bytes | 48 bytes | 48 bytes
2067 | 192.168.200.4 | 12 GB | 30 MB | 0 bytes | 156 kB | 12 GB
18635 | 192.168.100.2 | 0 bytes | 48 bytes | 0 bytes | 590 MB | 590 MB
Мониторинг. Примеры запросов.
Для standby:
pg_current_xlog_location() → pg_last_xlog_receive_location()
Объем WAL:
● SELECT pg_xlog_location_diff(pg_current_xlog_location, '0/0');
Лаг в секундах:
● SELECT now() - pg_last_xact_replay_timestamp();
Мониторинг.
Добавление новых или отключение standby узлов.
Временная приостановка репликации и возобновление.
Эксплуатация.
Добавление новых или отключение standby узлов.
● max_wal_senders
● max_replication_slots
● pg_create_physical_replication_slot()
● pg_drop_replication_slot()
Временная приостановка репликации и возобновление.
Эксплуатация.
Добавление новых или отключение standby узлов.
Временная приостановка репликации и возобновление.
● pg_is_xlog_replay_paused()
● pg_xlog_replay_pause()
● pg_xlog_replay_resume()
Эксплуатация.
Вопросы.
Лаг репликации.
Полная остановка репликации.
Сетевые и дисковые проблемы.
100% использование места на диске.
Конфликты при восстановлении.
Bloat таблиц и индексов.
pg_xlog/ bloat.
Часть IV. Проблемы и решения.
Симптомы:
● данные на standby отличаются от того что на мастере.
Причины:
● долгие запросы на standby, много записи на мастере;
● проблемы с оборудованием.
Решение:
● оптимизация приложения.
Лаг репликации.
Network lag:
● full_page_writes = off;
● ssh tunnels с компрессией.
Storage lag:
● full_page_writes =off;
● filesystem barriers;
● writethrough/writeback;
● RAID BBU learning;
● ionice (только для cfq elevator).
Networking и Storage.
Симптомы:
● Recovery process использует 100% CPU;
● Лаг увеличивается.
Причины:
● Тяжелые update/delete, много autovacuum.
Решение:
● увеличение wal_keep_segments;
● временное отключение full_page_writes;
● расстановка приоритетов через ionice и renice.
Полная остановка репликации.
Причины:
● Replication slots и выключенный standby → накопление XLOG сегментов;
Решение:
● Удаление слота и использование wal_keep_segments.
Хак на скорую руку:
● Filesystem's reserved blocks percentage и tune2fs.
100% использование места на диске.
Как возникают конфликты:
● Autovacuum;
● XLOG replay.
Решение:
● hot_standby_feedback = on;
● Увеличение max_standby_streaming_delay.
Конфликты при восстановлении.
Причина:
● Длинные транзакции на standby.
Решение:
● pgstattuple;
● VACUUM FULL, pgcompacttable, pg_reorg...;
Bloat таблиц и индексов.
Симптомы:
● Разный размер pg_xlog/ и количество XLOG сегментов.
Решение:
● Уменьшить checkpoint_timeout;
● Уменьшить checkpoint_completion_target.
pg_xlog/ bloat на standby.
Вопросы.
Что это?
Зачем и когда это нужно?
Как это делать?
Часть V. Switchover и Failover.
Switchover и Failover.
Зачем:
● обновление ПО, ОС, оборудования.
● отказ оборудования.
Вводная информация.
Запуск chekpoint на мастере.
Проверка лага репликации.
Выключение мастера.
Удаление recovery.conf и рестарт standby.
Switchover.
Плюсы:
● Быстрое подключение старого мастер в качестве standby;
● Отсутствие потерянных транзакций.
Минусы:
● После рестарта требуется прогрев кэша;
● pg_prewarm extension (с версии 9.4).
Switchover.
Создание триггерного файла
● recovery.conf: trigger_file = '…'
● После изменения recovery.conf нужен рестарт.
Использование pg_ctl
● pg_ctl -D ... promote
Failover.
Плюсы:
● быстро;
● не нужно время на рестарт;
● не нужен прогрев кэша.
Минусы:
● риск потери транзакций;
● нельзя использовать старый мастер в качестве standby (до 9.5).
Failover.
Switchover:
● создание recovery.conf и запуск.
Failover:
● переинициализация (до 9.5);
● pg_rewind (с 9.5).
● timeline должен различаться у мастера и standby.
● cтарый мастер должен быть корректно завершен.
● таки иногда бывают issues.
● pg_rewind --target-pgdata=9.5/main --source-server="host=10.0.0.1"
Повторное использование старого мастера.
Вопросы.
$ vi 9.5/replica/postgresql.conf – заранее поправим конфиг.
port = 5432
$ mv 9.5/replica/recovery.conf /tmp/ – удаляем recovery.conf
$ psql
> CHECKPOINT; – сократим время будущего рестарта.
$ pg_ctl -D 9.5/data -m fast stop – выключаем мастер.
$ pg_ctl -D 9.5/replica -m fast restart – провозглашем нового мастера.
$ tail -f 9.5/replica/pg_log/postgresql-Wed.log
$ ps auxf
Switchover. Практическая часть.
$ vi 9.5/data/postgresql.conf – правим конфиг.
port = 5433
$ mv /tmp/recovery.conf 9.5/data/ – создаем recovery.conf.
$ pg_ctl -D 9.5/data start – запускаем.
$ ps auxf – проверяем.
Switchover. Как быть со старым мастером?
$ vi 9.5/data/postgresql.conf
$ vi 9.5/replica/postgresql.conf
● wal_log_hints = on
● wal_keep_segments = 32
$ pg_ctl -D 9.5/data -m fast restart
$ pg_ctl -D 9.5/replica -m fast restart
Failover. Подготовка.
$ pg_ctl -D 9.5/replica -m immediate stop – «крэшим» мастер.
$ pg_ctl -D 9.5/data promote – создаем новый мастер.
$ psql -p 5433 – вносим изменения.
create database test;
Failover.
$ pg_ctl -D 9.5/replica start
$ pg_ctl -D 9.5/replica stop
$ pg_rewind -D 9.5/replica --source-server="host=127.0.0.1 port=5433"
$ vi 9.5/replica/postgresql.conf
port = 5432
$ mv 9.5/replica/recovery.done 9.5/replica/recovery.conf
$ vi 9.5/replica/recovery.conf
port = 5433
$ pg_ctl -D 9.5/replica start
$ ps auxf
Failover. А что со старым мастером?
Спасибо за внимание.
Алексей Лесовский, PostgreSQL Consulting.
Лаунж зона, стойка PGDay
Вопросы.

Más contenido relacionado

La actualidad más candente

В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...Ontico
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationAlexey Lesovsky
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Alexey Lesovsky
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Ontico
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан КупреевOpenVZ
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахAlexey Vasiliev
 
Беспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLБеспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLДмитрий Васильев
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQLAnastasia Lubennikova
 

La actualidad más candente (19)

В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
PostgreSQL Streaming Replication
PostgreSQL Streaming ReplicationPostgreSQL Streaming Replication
PostgreSQL Streaming Replication
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
RootConf 2015
RootConf 2015RootConf 2015
RootConf 2015
 
Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)Call of Postgres: Advanced Operations (part 3)
Call of Postgres: Advanced Operations (part 3)
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
Мониторинг ожиданий в PostgreSQL / Курбангалиев Ильдус (Postgres Professional)
 
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан КупреевCRIU: ускорение запуска PHP в CloudLinux OS  -- Руслан Купреев
CRIU: ускорение запуска PHP в CloudLinux OS -- Руслан Купреев
 
PostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектахPostgreSQL в высоконагруженных проектах
PostgreSQL в высоконагруженных проектах
 
Беспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQLБеспроблемная эксплуатация PostgreSQL
Беспроблемная эксплуатация PostgreSQL
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Расширения для PostgreSQL
Расширения для PostgreSQLРасширения для PostgreSQL
Расширения для PostgreSQL
 
PostgreSQL on sas/ssd/nvme/nvdimm
PostgreSQL on sas/ssd/nvme/nvdimmPostgreSQL on sas/ssd/nvme/nvdimm
PostgreSQL on sas/ssd/nvme/nvdimm
 

Destacado

Managing PostgreSQL with PgCenter
Managing PostgreSQL with PgCenterManaging PostgreSQL with PgCenter
Managing PostgreSQL with PgCenterAlexey Lesovsky
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practiceAlexey Lesovsky
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationAlexey Lesovsky
 
GitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons LearnedGitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons LearnedAlexey Lesovsky
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
 
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
Nine Circles of Inferno or Explaining the PostgreSQL VacuumNine Circles of Inferno or Explaining the PostgreSQL Vacuum
Nine Circles of Inferno or Explaining the PostgreSQL VacuumAlexey Lesovsky
 
Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015Alexey Lesovsky
 
PostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetPostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetAlexey Lesovsky
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaPostgreSQL-Consulting
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015PostgreSQL-Consulting
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsCommand Prompt., Inc
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL AdministrationEDB
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA EDB
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performancePostgreSQL-Consulting
 
Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014EDB
 
Best Practices of HA and Replication of PostgreSQL in Virtualized Environments
Best Practices of HA and Replication of PostgreSQL in Virtualized EnvironmentsBest Practices of HA and Replication of PostgreSQL in Virtualized Environments
Best Practices of HA and Replication of PostgreSQL in Virtualized EnvironmentsJignesh Shah
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
 
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL-Consulting
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1Federico Campoli
 

Destacado (20)

Managing PostgreSQL with PgCenter
Managing PostgreSQL with PgCenterManaging PostgreSQL with PgCenter
Managing PostgreSQL with PgCenter
 
Streaming replication in practice
Streaming replication in practiceStreaming replication in practice
Streaming replication in practice
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
GitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons LearnedGitLab PostgresMortem: Lessons Learned
GitLab PostgresMortem: Lessons Learned
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
Pgcenter overview
Pgcenter overviewPgcenter overview
Pgcenter overview
 
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
Nine Circles of Inferno or Explaining the PostgreSQL VacuumNine Circles of Inferno or Explaining the PostgreSQL Vacuum
Nine Circles of Inferno or Explaining the PostgreSQL Vacuum
 
Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015Linux tuning for PostgreSQL at Secon 2015
Linux tuning for PostgreSQL at Secon 2015
 
PostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication CheatsheetPostgreSQL Streaming Replication Cheatsheet
PostgreSQL Streaming Replication Cheatsheet
 
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 ViennaAutovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
Autovacuum, explained for engineers, new improved version PGConf.eu 2015 Vienna
 
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
How does PostgreSQL work with disks: a DBA's checklist in detail. PGConf.US 2015
 
PostgreSQL Administration for System Administrators
PostgreSQL Administration for System AdministratorsPostgreSQL Administration for System Administrators
PostgreSQL Administration for System Administrators
 
Mastering PostgreSQL Administration
Mastering PostgreSQL AdministrationMastering PostgreSQL Administration
Mastering PostgreSQL Administration
 
Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA Best Practices for Becoming an Exceptional Postgres DBA
Best Practices for Becoming an Exceptional Postgres DBA
 
Linux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performanceLinux tuning to improve PostgreSQL performance
Linux tuning to improve PostgreSQL performance
 
Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014Postgres in Production - Best Practices 2014
Postgres in Production - Best Practices 2014
 
Best Practices of HA and Replication of PostgreSQL in Virtualized Environments
Best Practices of HA and Replication of PostgreSQL in Virtualized EnvironmentsBest Practices of HA and Replication of PostgreSQL in Virtualized Environments
Best Practices of HA and Replication of PostgreSQL in Virtualized Environments
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya KosmodemianskyPostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
PostgreSQL worst practices, version FOSDEM PGDay 2017 by Ilya Kosmodemiansky
 
Postgresql database administration volume 1
Postgresql database administration volume 1Postgresql database administration volume 1
Postgresql database administration volume 1
 

Similar a Streaming replication in practice

SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноVladislav Bezverhiy
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевAleksander Alekseev
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ruNikolay Samokhvalov
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаAnastasia Lubennikova
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Ontico
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...rit2011
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...Rais Charipov
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Nikita Borzykh
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6Nikolay Samokhvalov
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?phpdevby
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in railssergeymoiseev
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Прессit-people
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStackit-people
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresProit-people
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 

Similar a Streaming replication in practice (20)

SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
SECON'2017, Лесовский Алексей, Потоковая репликация в PostgreSQL.
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
PostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. МолодёжноPostgreSQL. Стильно. Модно. Молодёжно
PostgreSQL. Стильно. Модно. Молодёжно
 
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр АлексеевНовые технологии репликации данных в PostgreSQL - Александр Алексеев
Новые технологии репликации данных в PostgreSQL - Александр Алексеев
 
2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru2014.10.15 Сергей Бурладян, Avito.ru
2014.10.15 Сергей Бурладян, Avito.ru
 
Hacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кодаHacking PostgreSQL. Обзор исходного кода
Hacking PostgreSQL. Обзор исходного кода
 
Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)Реализация восстановления после аварий / Сергей Бурладян (Avito)
Реализация восстановления после аварий / Сергей Бурладян (Avito)
 
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
сотни серверов, десятки компонент. автоматизация раскладки и конфигурирования...
 
Применяем Ansible
Применяем AnsibleПрименяем Ansible
Применяем Ansible
 
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
20160303 Hacking PostgreSQL Тема 02 Сообщество PostgreSQL и инструменты разра...
 
Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.Истинный DevOps. Секрет 42.
Истинный DevOps. Секрет 42.
 
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
#RuPostges в Yandex, эпизод 3. Что же нового в PostgreSQL 9.6
 
PHP 5.4: Что нового?
PHP 5.4: Что нового?PHP 5.4: Что нового?
PHP 5.4: Что нового?
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Batch processing in rails
Batch processing in railsBatch processing in rails
Batch processing in rails
 
Абак Пресс
Абак ПрессАбак Пресс
Абак Пресс
 
Multimaster2
Multimaster2Multimaster2
Multimaster2
 
Михаил Юматов: SaltStack
Михаил Юматов: SaltStackМихаил Юматов: SaltStack
Михаил Юматов: SaltStack
 
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
"Мультимастер для PostgreSQL" Кельвич Станислав, Книжник Константин, PostgresPro
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Más de Alexey Lesovsky

Call of Postgres: Advanced Operations (part 5)
Call of Postgres: Advanced Operations (part 5)Call of Postgres: Advanced Operations (part 5)
Call of Postgres: Advanced Operations (part 5)Alexey Lesovsky
 
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Alexey Lesovsky
 
Troubleshooting PostgreSQL with pgCenter
Troubleshooting PostgreSQL with pgCenterTroubleshooting PostgreSQL with pgCenter
Troubleshooting PostgreSQL with pgCenterAlexey Lesovsky
 
Tuning Linux for Databases.
Tuning Linux for Databases.Tuning Linux for Databases.
Tuning Linux for Databases.Alexey Lesovsky
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Alexey Lesovsky
 
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).Alexey Lesovsky
 

Más de Alexey Lesovsky (6)

Call of Postgres: Advanced Operations (part 5)
Call of Postgres: Advanced Operations (part 5)Call of Postgres: Advanced Operations (part 5)
Call of Postgres: Advanced Operations (part 5)
 
Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)Call of Postgres: Advanced Operations (part 4)
Call of Postgres: Advanced Operations (part 4)
 
Troubleshooting PostgreSQL with pgCenter
Troubleshooting PostgreSQL with pgCenterTroubleshooting PostgreSQL with pgCenter
Troubleshooting PostgreSQL with pgCenter
 
Tuning Linux for Databases.
Tuning Linux for Databases.Tuning Linux for Databases.
Tuning Linux for Databases.
 
Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.Deep dive into PostgreSQL statistics.
Deep dive into PostgreSQL statistics.
 
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
PostgreSQL Troubleshoot On-line, (RITfest 2015 meetup at Moscow, Russia).
 

Streaming replication in practice

  • 1. Потоковая репликация на практике. PgConf.Russia 2016, Moscow Лесовский Алексей lesovsky@pgco.me
  • 2. Материалы: http://goo.gl/Yy4UzH I. Как устроена репликация. II. Настройка репликации. Практика. III. Мониторинг и эксплуатация. IV. Проблемы и решения. V. Switchiver и Failover. Практика. Содержание.
  • 3. Что такое репликация и её разновидности. Write Ahead Log. REDO и реализация REDO в PostgreSQL. Общий взгляд на архитектуру репликации в PostgreSQL. Особенности работы процессов отвечающих за репликацию. Часть I. Как устроена репликация.
  • 4. Копирование и синхронизация нескольких копий объекта. Изменение одной копии распространяются на другие копии. Репликация бывает физическая и логическая. Что такое репликация.
  • 5. Плюсы: ● Умеет работать между разными версиями и архитектурами. ● Умеет реплицировать отдельные таблицы и наборы таблиц. Минусы: ● Крайне сложно реализовать синхронную репликацию. ● Дополнительная нагрузка на CPU (триггеры). Примеры: ● Slony, Londiste (Skytools), Bucardo, Pglogical. Логическая репликация.
  • 6. Плюсы: ● Минимальный накладные расходы на использование ресурсов. ● Легкая настройка и сопровождение. Минусы: ● Standby сервера доступны только на чтение. ● Не умеет работать между разными версиями и архитектурами. ● Нет возможности реплицировать отдельные таблицы и наборы таблиц. Физическая репликация.
  • 7. Фиксирование всех изменений в базе (Durability в ACID). При COMMIT делается синхронизация (flush) REDO буферов на диск. Журнал REDO содержит историю всех изменений в БД. Любое изменение в БД сначала фиксируется в REDO. Журнал REDO используется: ● при аварийном восстановлении; ● в резервном копировании и Point In Time Recovery; ● в репликации. Write Ahead Log. REDO.
  • 8. В PostgreSQL, REDO известен как Write Ahead Log (WAL). WAL гарантирует запись изменений БД, до момента изменения самих данных. Как это гарантировать? ● LSN (log sequence number) - местоположение записи внутри WAL журнала; ● каждая страница маркируется LSN последней записи журнала которая затрагивает страницу; ● bufmgr перед записью измененной страницы, должен убедиться что журнал сброшен на диск до LSN указанного в странице. Write Ahead Log. REDO implementation in PostgreSQL.
  • 9. В общих чертах. backend backend backend autovac ... WAL writer* WAL Startup/Recovery SR/Archiving/Hot Standby Point in Time WAL Sender/WAL Receiver * - может отсутствовать
  • 10. Задача startup процесса запустить БД (после чего он завершается). В standby режиме он инициирует бесконечный replay loop. При запуске REDO читаем recovery.conf. REDO: ● чтение сегментов из pg_xlog/archive; ● запуск wal receiver и чтение XLOG с мастера; При достижении consistency (min recovery ending location) разрешаем принимать подключения и запускаем checkpointer/bgwriter. Следование оставшимся recovery параметрам из recovery.conf. Еще больше конкретики смотрите в StartupXLOG() функции. Startup process.
  • 11. Postmaster на каждого клиента создает процесс — backend. WAL sender это тоже backend (с флагом am_walsender). Бэкенд запускает exec_replication_command(). exec_replication_command() может делать разные вещи: ● создание/удаление слотов репликации; ● запуск basebackup; ● запуск физической/логической репликации. В последнем случае, бэкенд отправляет XLOG сегменты клиенту. Или спит когда новых XLOG нет. WAL Sender process.
  • 12. Startup процесс поочередно проверяет источники XLOG. Startup процесс инициирует запуск WAL receiver'а. Нужен recovery.conf + primary_conninfo. WAL receiver: ● определяет стартовую позицию для передачи XLOG; ● подключается к мастеру и передает стартовую позицию; ● принимает XLOG сегменты и записывает их на диск; ● обновляет переменную в shared memory (WalRcv→receivedUpto); ● отправляет статистику + фидбек. Startup процесс использует переменную чтобы понимать до какой позиции следует воспроизводить XLOG. WAL Receiver process.
  • 13. Вопросы? backend backend backend autovac ... WAL writer WAL Startup/Recovery SR/Archiving/Hot Standby Point in Time WAL Sender/WAL Receiver
  • 14. Варианты настройки. Подготовка серверов к запуску репликации. Используемые инструменты. Запуск репликации и проверка успешности запуска. Специфические особенности. Часть II. Настройка репликации.
  • 16. Подготовка мастера. Копирование DATADIR. Подготовка standby. Запуск standby. Проверка результата. Общий алгоритм.
  • 17. Отдельный пользователь для репликации. Редактирование postgresql.conf. Редактирование pg_hba.conf. Создание слотов репликации (только при необходимости). Настройка мастера.
  • 18. Отдельный пользователь для репликации. ● CREATE ROLE ... WITH LOGIN REPLICATION PASSWORD '…'; Редактирование postgresql.conf. Редактирование pg_hba.conf. Создание слотов репликации (только при необходимости). Настройка мастера.
  • 19. Отдельный пользователь для репликации. Редактирование postgresql.conf. ● wal_level = hot_standby ● max_wal_senders > 0 ● Перезапуск PostgreSQL Редактирование pg_hba.conf. Создание слотов репликации (только при необходимости). Настройка мастера.
  • 20. Отдельный пользователь для репликации. Редактирование postgresql.conf. Редактирование pg_hba.conf. ● host replication username client_addr/mask authtype ● host replication replica 10.1.0.99/32 md5 ● pg_reload_conf() Создание слотов репликации (только при необходимости). Настройка мастера.
  • 21. Отдельный пользователь для репликации. Редактирование postgresql.conf. Редактирование pg_hba.conf. Создание слотов репликации (только при необходимости). ● max_replication_slots > 0 ● pg_create_physical_replication_slot('slotname'); ● primary_slot_name = 'slotname' (recovery.conf) Настройка мастера.
  • 22. pg_basebackup (с версии 9.1) -h, --host=...; -p, --port=...; -U, --username=...; -d, --dbname=...; -D, --pgdata=... -c, --checkpoint=fast | spread -X, --xlog-method=fetch | stream – stream с 9.2 -R, --write-recovery-conf – с 9.3 -r, --max-rate=… – с 9.4 --xlogdir=… – с 9.4 -T, --tablespace-mapping=olddir=newdir – с 9.4 -P, --progress pg_basebackup -P -R -X stream -c fast -h 127.0.0.1 -U replica -D /pgdb Копирование DATADIR.
  • 23. Копирование через cp, scp, tar, rsync... Snapshots: ● ZFS send/receive; ● LVM + dd. pg_start_backup() + pg_stop_backup(). Копирование DATADIR. Альтернативы pg_basebackup.
  • 24. Идентичность файлов конфигурации. Файлы конфигурации: ● postgresql.conf; ● recovery.conf. Настройка Standby.
  • 25. Идентичность файлов конфигурации: ● Зачем? ● Как? Файлы конфигурации: ● postgresql.conf; ● recovery.conf. Настройка Standby.
  • 26. Идентичность файлов конфигурации. Файлы конфигурации (postgresql.conf): ● hot_standby = on; ● max_standby_streaming_delay; ● wal_receiver_status_interval; ● hot_standby_feedback; ● wal_receiver_timeout; Настройка Standby.
  • 27. Идентичность файлов конфигурации. Файлы конфигурации (recovery.conf): ● primary_conninfo = 'host=… port=…' ● standby_mode = on ● primary_slot_name = 'slotname' ● trigger_file = '...' ● recovery_min_apply_delay. Настройка Standby.
  • 28. pg_ctl — родная утилита от PostgreSQL. pg_ctlcluster — враппер над pg_ctl в Debian/Ubuntu. sysvinit, upstart, openrc, systemd… Запуск Standby.
  • 29. Наличие процессов wal sender и wal receiver. Проверка журнала событий. Проверка через обычное подключение (psql). Системное представление pg_stat_replication. Проверка успешности запуска.
  • 30. DATADIR, конфиги и Debian-based vs. RHEL-based. pg_ctlcluster и ошибка невозможности подключения. Подозрительно малое количество процессов в выводе ps. Разные особенности.
  • 31. Масштабируемость на чтение. Полнотекстовый поиск. Аналитика. Реплика не значит backup. Итоги. Практическое назначение реплик.
  • 33. root password: pgconf2016 # su - postgres – все задачи делаем от имени postgres $ ps auxf – что вообще мы имеем? $ pwd – где мы? $ ls -l 9.5 – где все будет происходить. Настройка репликации. Практическая часть.
  • 34. $ vi 9.5/data/postgresql.conf ● listen_addresses = '*' – слушаем на всех интерфейсах. ● wal_level = hot_standby – подробность WAL журнала. ● max_wal_senders = 4 – лимит на walsender'ы. ● hot_standby = on – разрешить read-only запросы. Подготовка мастера.
  • 35. $ psql – создаем отдельного пользователя. CREATE ROLE replica WITH LOGIN REPLICATION PASSWORD 'rep123'; $ vi .pgpass – настраиваем файл паролей. *:*:*:replica:rep123 $ chmod 600 .pgpass $ vi 9.5/data/pg_hba.conf – прописываем правила авторизации. host replication replica 127.0.0.1/32 md5 $ pg_ctl -D 9.5/data/ -m fast restart – применяем изменения в силу. Подготовка мастера.
  • 36. $ pg_basebackup -P -R -c fast -X stream -h 127.0.0.1 -U replica -D 9.5/replica ● -c fast — сделать принудительный checkpoint. ● -X stream — скопировать новые XLOG через выделенное содениние. ● -R — создать минимальный recovery.conf $ vi 9.5/replica/postgresql.conf – правим номер порт. port = 5433 $ pg_ctl -D 9.5/replica/ start – запускаем реплику. Создание standby сервера.
  • 37. $ ps auxf – наличие sender/receiver процессов. $ psql -p 5433 – проверяем статус на standby. select pg_is_in_recovery(); – режим восстановления на standby. $ psql – проверяем статус на мастере. select * from pg_stat_replication ; – наличие статистики со standby. Проверка.
  • 39. «Настроил и забыл» - это про потоковую репликацию. Мониторинг: ● внутренняя статистика; ● вспомогательные функции; ● примеры запросов. Экcплуатация: ● добавление и удаление реплик; ● приостановка репликации; ● добавление и удаление слотов. Часть III. Мониторинг и эксплуатация.
  • 40. Системные представление (views): ● pg_stat_replication ● pg_stat_replication_slots Мониторинг.
  • 42. Мониторинг репликации на мастере. select pid, client_addr, pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),sent_location)) as pending_xlog, pg_size_pretty(pg_xlog_location_diff(sent_location,write_location)) as write, pg_size_pretty(pg_xlog_location_diff(write_location,flush_location)) as flush, pg_size_pretty(pg_xlog_location_diff(flush_location,replay_location)) as replay, pg_size_pretty(pg_xlog_location_diff(pg_current_xlog_location(),replay_location)) as total_lag from pg_stat_replication; pid | client_addr | pending_xlog | write | flush | replay | total_lag -------+---------------+--------------+----------+---------+------------+------------ 21015 | 127.0.0.1 | 0 bytes | 0 bytes | 0 bytes | 48 bytes | 48 bytes 2067 | 192.168.200.4 | 12 GB | 30 MB | 0 bytes | 156 kB | 12 GB 18635 | 192.168.100.2 | 0 bytes | 48 bytes | 0 bytes | 590 MB | 590 MB Мониторинг. Примеры запросов.
  • 43. Для standby: pg_current_xlog_location() → pg_last_xlog_receive_location() Объем WAL: ● SELECT pg_xlog_location_diff(pg_current_xlog_location, '0/0'); Лаг в секундах: ● SELECT now() - pg_last_xact_replay_timestamp(); Мониторинг.
  • 44. Добавление новых или отключение standby узлов. Временная приостановка репликации и возобновление. Эксплуатация.
  • 45. Добавление новых или отключение standby узлов. ● max_wal_senders ● max_replication_slots ● pg_create_physical_replication_slot() ● pg_drop_replication_slot() Временная приостановка репликации и возобновление. Эксплуатация.
  • 46. Добавление новых или отключение standby узлов. Временная приостановка репликации и возобновление. ● pg_is_xlog_replay_paused() ● pg_xlog_replay_pause() ● pg_xlog_replay_resume() Эксплуатация.
  • 48. Лаг репликации. Полная остановка репликации. Сетевые и дисковые проблемы. 100% использование места на диске. Конфликты при восстановлении. Bloat таблиц и индексов. pg_xlog/ bloat. Часть IV. Проблемы и решения.
  • 49. Симптомы: ● данные на standby отличаются от того что на мастере. Причины: ● долгие запросы на standby, много записи на мастере; ● проблемы с оборудованием. Решение: ● оптимизация приложения. Лаг репликации.
  • 50. Network lag: ● full_page_writes = off; ● ssh tunnels с компрессией. Storage lag: ● full_page_writes =off; ● filesystem barriers; ● writethrough/writeback; ● RAID BBU learning; ● ionice (только для cfq elevator). Networking и Storage.
  • 51. Симптомы: ● Recovery process использует 100% CPU; ● Лаг увеличивается. Причины: ● Тяжелые update/delete, много autovacuum. Решение: ● увеличение wal_keep_segments; ● временное отключение full_page_writes; ● расстановка приоритетов через ionice и renice. Полная остановка репликации.
  • 52. Причины: ● Replication slots и выключенный standby → накопление XLOG сегментов; Решение: ● Удаление слота и использование wal_keep_segments. Хак на скорую руку: ● Filesystem's reserved blocks percentage и tune2fs. 100% использование места на диске.
  • 53. Как возникают конфликты: ● Autovacuum; ● XLOG replay. Решение: ● hot_standby_feedback = on; ● Увеличение max_standby_streaming_delay. Конфликты при восстановлении.
  • 54. Причина: ● Длинные транзакции на standby. Решение: ● pgstattuple; ● VACUUM FULL, pgcompacttable, pg_reorg...; Bloat таблиц и индексов.
  • 55. Симптомы: ● Разный размер pg_xlog/ и количество XLOG сегментов. Решение: ● Уменьшить checkpoint_timeout; ● Уменьшить checkpoint_completion_target. pg_xlog/ bloat на standby.
  • 57. Что это? Зачем и когда это нужно? Как это делать? Часть V. Switchover и Failover.
  • 58. Switchover и Failover. Зачем: ● обновление ПО, ОС, оборудования. ● отказ оборудования. Вводная информация.
  • 59. Запуск chekpoint на мастере. Проверка лага репликации. Выключение мастера. Удаление recovery.conf и рестарт standby. Switchover.
  • 60. Плюсы: ● Быстрое подключение старого мастер в качестве standby; ● Отсутствие потерянных транзакций. Минусы: ● После рестарта требуется прогрев кэша; ● pg_prewarm extension (с версии 9.4). Switchover.
  • 61. Создание триггерного файла ● recovery.conf: trigger_file = '…' ● После изменения recovery.conf нужен рестарт. Использование pg_ctl ● pg_ctl -D ... promote Failover.
  • 62. Плюсы: ● быстро; ● не нужно время на рестарт; ● не нужен прогрев кэша. Минусы: ● риск потери транзакций; ● нельзя использовать старый мастер в качестве standby (до 9.5). Failover.
  • 63. Switchover: ● создание recovery.conf и запуск. Failover: ● переинициализация (до 9.5); ● pg_rewind (с 9.5). ● timeline должен различаться у мастера и standby. ● cтарый мастер должен быть корректно завершен. ● таки иногда бывают issues. ● pg_rewind --target-pgdata=9.5/main --source-server="host=10.0.0.1" Повторное использование старого мастера.
  • 65. $ vi 9.5/replica/postgresql.conf – заранее поправим конфиг. port = 5432 $ mv 9.5/replica/recovery.conf /tmp/ – удаляем recovery.conf $ psql > CHECKPOINT; – сократим время будущего рестарта. $ pg_ctl -D 9.5/data -m fast stop – выключаем мастер. $ pg_ctl -D 9.5/replica -m fast restart – провозглашем нового мастера. $ tail -f 9.5/replica/pg_log/postgresql-Wed.log $ ps auxf Switchover. Практическая часть.
  • 66. $ vi 9.5/data/postgresql.conf – правим конфиг. port = 5433 $ mv /tmp/recovery.conf 9.5/data/ – создаем recovery.conf. $ pg_ctl -D 9.5/data start – запускаем. $ ps auxf – проверяем. Switchover. Как быть со старым мастером?
  • 67. $ vi 9.5/data/postgresql.conf $ vi 9.5/replica/postgresql.conf ● wal_log_hints = on ● wal_keep_segments = 32 $ pg_ctl -D 9.5/data -m fast restart $ pg_ctl -D 9.5/replica -m fast restart Failover. Подготовка.
  • 68. $ pg_ctl -D 9.5/replica -m immediate stop – «крэшим» мастер. $ pg_ctl -D 9.5/data promote – создаем новый мастер. $ psql -p 5433 – вносим изменения. create database test; Failover.
  • 69. $ pg_ctl -D 9.5/replica start $ pg_ctl -D 9.5/replica stop $ pg_rewind -D 9.5/replica --source-server="host=127.0.0.1 port=5433" $ vi 9.5/replica/postgresql.conf port = 5432 $ mv 9.5/replica/recovery.done 9.5/replica/recovery.conf $ vi 9.5/replica/recovery.conf port = 5433 $ pg_ctl -D 9.5/replica start $ ps auxf Failover. А что со старым мастером?
  • 70. Спасибо за внимание. Алексей Лесовский, PostgreSQL Consulting. Лаунж зона, стойка PGDay Вопросы.