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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Alexey Lesovsky
May 28, 2019
Programming
470
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
PostgreSQL High Availability in 2019
Slides from my talk at RIT conference 2019, Moscow
Alexey Lesovsky
May 28, 2019
More Decks by Alexey Lesovsky
See All by Alexey Lesovsky
PostgreSQL Scaling Usecases
lesovsky
0
130
Patroni failure stories, or How to crash yout PostgreSQL cluster
lesovsky
0
470
Top developer's mistakes when working with PostgreSQL
lesovsky
1
180
Let's Pull the Plug On the Autovacuum (EN)
lesovsky
0
1.3k
Troubleshooting PostgreSQL for Developers (RU)
lesovsky
2
370
Troubleshooting PostgreSQL Streaming Replication
lesovsky
0
1k
Call of Postgres: Advanced Operations. Part I.
lesovsky
0
78
Call of Postgres: Advanced Operations. Part II.
lesovsky
0
100
Call of Postgres: Advanced Operations. Part III.
lesovsky
0
99
Other Decks in Programming
See All in Programming
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
13
3.6k
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
100
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
12k
RTSPクライアントを自作してみた話
simotin13
0
520
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
150
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
4
2.1k
決定論的オーケストレーションの設計と実装 / Design and Implementation of Deterministic Orchestration
nrslib
3
1.2k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
780
The NotImplementedError Problem in Ruby
koic
1
660
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
170
Featured
See All Featured
Color Theory Basics | Prateek | Gurzu
gurzu
0
360
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
300
Thoughts on Productivity
jonyablonski
76
5.2k
Discover your Explorer Soul
emna__ayadi
2
1.1k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Rails Girls Zürich Keynote
gr2m
96
14k
Skip the Path - Find Your Career Trail
mkilby
1
140
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
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]