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
350
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
98
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
74
Call of Postgres: Advanced Operations. Part III.
lesovsky
0
62
Other Decks in Programming
See All in Programming
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
0
120
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
180
ReadMoreTextView
fornewid
1
450
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
41
28k
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
450
XP, Testing and ninja testing
m_seki
2
120
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
iOSアプリ開発で 関数型プログラミングを実現する The Composable Architectureの紹介
yimajo
2
210
C++20 射影変換
faithandbrave
0
500
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
0
130
Kotlin エンジニアへ送る:Swift 案件に参加させられる日に備えて~似てるけど色々違う Swift の仕様 / from Kotlin to Swift
lovee
1
250
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
380
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Designing Experiences People Love
moore
142
24k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
130
19k
How to train your dragon (web standard)
notwaldorf
92
6.1k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
BBQ
matthewcrist
89
9.7k
Unsuck your backbone
ammeep
671
58k
Product Roadmaps are Hard
iamctodd
PRO
53
11k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
48
2.8k
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]