Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PostgreSQL High Availability in 2019
Search
Alexey Lesovsky
May 28, 2019
Programming
0
360
PostgreSQL High Availability in 2019
Slides from my talk at RIT conference 2019, Moscow
Alexey Lesovsky
May 28, 2019
Tweet
Share
More Decks by Alexey Lesovsky
See All by Alexey Lesovsky
PostgreSQL Scaling Usecases
lesovsky
0
100
Patroni failure stories, or How to crash yout PostgreSQL cluster
lesovsky
0
420
Top developer's mistakes when working with PostgreSQL
lesovsky
1
140
Let's Pull the Plug On the Autovacuum (EN)
lesovsky
0
1.2k
Troubleshooting PostgreSQL for Developers (RU)
lesovsky
2
350
Troubleshooting PostgreSQL Streaming Replication
lesovsky
0
950
Call of Postgres: Advanced Operations. Part I.
lesovsky
0
64
Call of Postgres: Advanced Operations. Part II.
lesovsky
0
75
Call of Postgres: Advanced Operations. Part III.
lesovsky
0
64
Other Decks in Programming
See All in Programming
チームで開発し事業を加速するための"良い"設計の考え方 @ サポーターズCoLab 2025-07-08
agatan
1
410
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
530
効率的な開発手段として VRTを活用する
ishkawa
0
140
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
170
Systèmes distribués, pour le meilleur et pour le pire - BreizhCamp 2025 - Conférence
slecache
0
120
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
250
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
770
Blazing Fast UI Development with Compose Hot Reload (droidcon New York 2025)
zsmb
1
290
High-Level Programming Languages in AI Era -Human Thought and Mind-
hayat01sh1da
PRO
0
770
「Cursor/Devin全社導入の理想と現実」のその後
saitoryc
0
820
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
470
Quand Symfony, ApiPlatform, OpenAI et LangChain s'allient pour exploiter vos PDF : de la théorie à la production…
ahmedbhs123
0
190
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
695
190k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Adopting Sorbet at Scale
ufuk
77
9.5k
RailsConf 2023
tenderlove
30
1.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
6
300
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
229
22k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Documentation Writing (for coders)
carmenintech
72
4.9k
The Language of Interfaces
destraynor
158
25k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
Transcript
Обзор решений для PostgreSQL High Availability Лесовский Алексей
О докладчике Linux system administrator PostgreSQL DBA Data Egret, 2014
– now 2
PostgreSQL HA: что выбрать в 2019 3
Чего НЕ будет в докладе Инструкций по установке Инструкций по
использованию Примеров конфигов 4
High availability Отказ узла ≠ отказ сервиса (Быстрое) восстановление после
отказа 5
High availability: Postgres В идеале: • Мультимастер • Запись в
разные дата-центры • OLTP low latency • Autofailover, self-recovery, rebalancing, ... 6
High availability: Postgres На деле имеем: • Мультимастер имеет ограничения
• Запись в мастер, чтение с реплик • Масса ручной работы • Регулярные тестовые переключения • Нужна экспертиза 7
High availability: Postgres https://wiki.postgresql.org/wiki/High_Availability https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling 8
Postgres HA: варианты? Bucardo • Мультимастер • Морально устарела •
Use-cases есть, но... 9
Postgres HA: варианты? Pgpool-II • Все плохо с производительностью •
Неоптимальный пулинг • Хрупкий сам по себе • Чувствителен к проблемам сети 10
Postgres HA: варианты? Postgres-XC/XL • Непростая эксплуатация • Много компонентов
11
Postgres HA: варианты? Велосипеды: • Shell-скрипты • Ansible • Комбинации
разных инструментов: haproxy, keepalived, pgbouncer, dns, etc... 12
Postgres HA: варианты? Велосипеды: • кастомизация • которая превращается в
ад • и может ломаться в неподходящий момент 13
Postgres HA: Итого • Дорого обслуживать • Отсутствие гибкости •
Сложно масштабировать • Сложно управлять 14
Что есть сейчас • Repmgr • Patroni • Stolon •
PAF • pg_auto_failover 15
Repmgr • 2ndQuadrant • 2010-12-05 — First public release •
https://repmgr.org/ • Python, C • Cluster management 16
Patroni • Zalando • 2015-03-15 — First commit • https://github.com/zalando/patroni
• Python • Cluster Management 17
Stolon • Sorintlab • 2015-09-07 — Initial commit • https://github.com/sorintlab/stolon
• Golang • Cluster Management 18
PAF • Dalibo → ClusterLabs • 2016-02-03 — Initial commit
• https://github.com/ClusterLabs/PAF • Perl • Autofailover (Pacemaker, Corosync) 19
pg_auto_failover • Citus Data (Microsoft) • 2019-05-02 — public release
• https://github.com/citusdata/pg_auto_failover • Pure C • Autofailover (PostgreSQL extension) 20
PostgreSQL HA High Availability вцелом Управление кластером 21
PostgreSQL HA • Repmgr • Patroni • Stolon • PAF
• pg_auto_failover 22
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 23
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 24
Цели архитектуры • Устранение угроз, смягчение последствий – Network split
→ Split-brain – Node failure → Service interruption • Кворум как реализация (источник истины) 25
Архитектура Repmgr
None
repmgrd process repmgrd process repmgrd process
Архитектура Repmgr Switchover без дополнительных компонентов Repmgrd для Autofailover Поддержка
Witness–сервера 29
Архитектура Repmgr Switchover без дополнительных компонентов Repmgrd для Autofailover Поддержка
Witness–сервера Минимум компонентов, всё просто 30
Архитектура Patroni
None
patroni process Distributed Configuration Storage patroni process patroni process
Архитектура Patroni Autofailover из коробки DCS как источник истины 34
Архитектура Patroni Autofailover из коробки DCS как источник истины DCS
– обязательный компонент 35
Архитектура Stolon
37 https://github.com/sorintlab/stolon/raw/master/doc/architecture_small.png
Архитектура Stolon Autofailover из коробки DCS как источник истины Клиенты
работают с БД через proxy 38
Архитектура Stolon Autofailover из коробки DCS как источник истины Клиенты
работают с БД через proxy DCS – обязательный компонент 39
Patroni vs. Stolon Концепции похожи, но дъявол в деталях 40
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 41
Установка и запуск • Standby cluster • Установка на рабочем
кластере 42
Standby cluster 43
Standby cluster 44
Standby cluster 45 Repmgr : ДА Patroni: ДА Stolon: ДА
Hard way deploy 46 Repmgr : ДА Patroni: ДА Stolon:
НЕТ
Установка и запуск 47 bootstrap on-fly standby Repmgr no yes
yes Patroni yes yes yes Stolon yes no yes
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 48
Управление кластером • Добавление новых узлов • Управление конфигурацией PG
• Синхронная репликация • Дебаг и траблшутинг 49
Добавление узлов Резервное копирование с мастера Кастомизация: • Копирование с
реплики • С резервных копий (wal-g, barman, backrest) • С помощью кастомного скрипта 50
Добавление узлов Repmgr • Автоматически "repmgr standby clone" • Инициализация
с реплик — ДА • Резервные копии — только Barman • Кастомное восстановление — ДА 51
Добавление узлов Patroni • Автоматический процесс • Инициализация с реплик
— ДА • Резервные копии — ДА • Кастомное восстановление — ДА 52
Добавление узлов Stolon • Автоматический процесс • Инициализация с реплик
— НЕТ • Резервные копии — только при bootstrap • Кастомное восстановление — НЕТ 53
Добавление узлов 54 Repmgr Patroni Stolon Автоматически yes yes yes
Инициализация с реплик yes yes no С резервных копий yes* yes yes** Кастомная инициализация yes yes no * - только Barman ** - только при bootstrap
Управление кластером • Добавление новых узлов • Управление конфигурацией PG
• Синхронная репликация • Дебаг и траблшутинг 55
Управление конфигурацией Repmgr — надстройка над PG Patroni/Stolon — init-система
для PG 56
Repmgr • Пользователь имеет полный контроль над конфигурацией • postgresql.conf,
postgresql.auto.conf • pg_hba.conf • recovery.conf 57 Управление конфигурацией
Patroni • Частично под контролем Patroni • Параметры репликации •
postgresql.conf vs. postgresql.base.conf 58 Управление конфигурацией
Stolon • Полностью под контролем Stolon • Одинаковая конфигурация для
всех узлов • Часть настроек неизменяема вообще* • postgresql.auto.conf → /dev/null 59 Управление конфигурацией * - https://github.com/sorintlab/stolon/blob/master/doc/postgres_parameters.md https://github.com/sorintlab/stolon/blob/master/cmd/keeper/cmd/keeper.go#L213
Управление кластером • Добавление новых узлов • Управление конфигурацией PG
• Синхронная репликация • Дебаг и траблшутинг 60
Синхронная репликация Repmgr — настраивается руками Patroni — ДА (patronictl)
Stolon — ДА (stolonctl) • Нельзя ANY, FIRST • Количество синх.реплик регулируется через параметры Stolon 61
Управление кластером • Добавление новых узлов • Управление конфигурацией PG
• Синхронная репликация • Дебаг и траблшутинг 62
Дебаг и траблшутинг • Repmgr — свои логи • Patroni
— свои логи, journald • Stolon — stdout, log-level, journald • Логи Postgres • Status-команды в cli-утилитах 63
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 64
Обеспечение HA • Автофайловер, Свитчовер • Кастомизация • Фенсинг •
Восстановление сбойных узлов • Требования к приложениям 65
Автофайловер • Repmgr — как опция • Patroni — из
коробки • Stolon — из коробки 66
Свитчовер • Repmgr — из коробки • Patroni — из
коробки • Stolon — нет, но есть workaround 67
Обеспечение HA • Автофайловер, Свитчовер • Кастомизация • Фенсинг •
Восстановление сбойных узлов • Требования к приложениям 68
Кастомизация • Pre actions • Post actions • On role
change actions 69
Кастомизация Repmgr Event notifications: • event_notification_command • Один user-defined-скрипт •
Работает асинхронно 70
Кастомизация Patroni Callbacks: • Набор user-defined-скриптов • Работают асинхронно 71
Кастомизация Stolon 72
Обеспечение HA • Автофайловер, Свитчовер • Кастомизация • Фенсинг •
Восстановление сбойных узлов • Требования к приложениям 73
Фенсинг в Repmgr Его нет Кастомизация через promote_command 74
Фенсинг в Patroni Patroni: Linux Watchdog DCS: перезапуск в Read-Only
Существующие соединения обрываются 75
Фенсинг в Stolon Stolon: Удаление узла из clusterview DCS: Proxy
перестает слушать интерфейс Существущие соединения обрываются Новые соединение не принимаются 76
Обеспечение HA • Автофайловер, Свитчовер • Кастомизация • Фенсинг •
Восстановление сбойных узлов • Требования к приложениям 77
Восстановление Repmgr • Только ручное восстановление • repmgr node rejoin
• pg_rewind 78
Восстановление Patroni, Stolon • full reinit, base backup, clone, etc…
• pg_rewind • В худшем случае — руками 79
Обеспечение HA • Автофайловер, Свитчовер • Кастомизация • Фенсинг •
Восстановление сбойных узлов • Требования к приложениям 80
Требования к приложению • Самостоятельный поиск мастера/реплик • Обработка ошибок
доступа к БД • Переустановка соединений к БД 81
Требование к приложению Repmgr — предоставляет ничего Patroni — авторегистрация
сервисов в Consul (Consul DNS) Stolon — ручная регистрация сервисов в Consul (c 0.14) 82
Сравнение • Обзор архитектур • Варианты установки и запуска •
Управление кластером • Обеспечение HA • Итоги 83
Итого Repmgr • Автофайловер как опция • Полная свобода в
конфигурировании PG • Нет фенсинга • Event notifications • Baremetal setup 84
Итого Patroni • Автофайловер из коробки • Много продвинутых функций
• Фенсинг в том числе • Baremetal, Cloud setup 85
Итого Stolon • Автофайловер из коробки • Есть фенсинг •
Если у вас нет существенных требований к кастомизации • Cloud setup 86
Вопросы 87 Алексей Лесовский,
[email protected]