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
280
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
88
Patroni failure stories, or How to crash yout PostgreSQL cluster
lesovsky
0
400
Top developer's mistakes when working with PostgreSQL
lesovsky
1
120
Let's Pull the Plug On the Autovacuum (EN)
lesovsky
0
1.2k
Troubleshooting PostgreSQL for Developers (RU)
lesovsky
2
340
Troubleshooting PostgreSQL Streaming Replication
lesovsky
0
900
Call of Postgres: Advanced Operations. Part I.
lesovsky
0
59
Call of Postgres: Advanced Operations. Part II.
lesovsky
0
62
Call of Postgres: Advanced Operations. Part III.
lesovsky
0
51
Other Decks in Programming
See All in Programming
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
1
540
EC2からECSへ 念願のコンテナ移行と巨大レガシーPHPアプリケーションの再構築
sumiyae
3
630
最近のVS Codeで気になるニュース 2025/01
74th
1
240
Spring gRPC について / About Spring gRPC
mackey0225
0
180
GitHub CopilotでTypeScriptの コード生成するワザップ
starfish719
28
6.1k
ASP.NET Core の OpenAPIサポート
h455h1
0
160
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
180
watsonx.ai Dojo #6 継続的なAIアプリ開発と展開
oniak3ibm
PRO
0
270
Alba: Why, How and What's So Interesting
okuramasafumi
0
240
Moscow Python Meetup №97. Константин Крестников (Техлид команды GigaChain (SberDevices)). GigaChain: Новые инструменты для разработки агентов на примере агента техподдержки
moscowdjango
PRO
0
100
DMMオンラインサロンアプリのSwift化
hayatan
0
270
Linux && Docker 研修/Linux && Docker training
forrep
23
4.1k
Featured
See All Featured
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2k
Docker and Python
trallard
43
3.2k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
520
GraphQLとの向き合い方2022年版
quramy
44
13k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
How to Think Like a Performance Engineer
csswizardry
22
1.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
30
2.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
6
220
Designing for Performance
lara
604
68k
Raft: Consensus for Rubyists
vanstee
137
6.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]