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
260
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
84
Patroni failure stories, or How to crash yout PostgreSQL cluster
lesovsky
0
390
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
860
Call of Postgres: Advanced Operations. Part I.
lesovsky
0
53
Call of Postgres: Advanced Operations. Part II.
lesovsky
0
59
Call of Postgres: Advanced Operations. Part III.
lesovsky
0
48
Other Decks in Programming
See All in Programming
GitHub Actionsのキャッシュと手を挙げることの大切さとそれに必要なこと
satoshi256kbyte
5
430
Jakarta EE meets AI
ivargrimstad
0
200
Jakarta EE meets AI
ivargrimstad
0
580
CSC509 Lecture 13
javiergs
PRO
0
110
ペアーズにおけるAmazon Bedrockを⽤いた障害対応⽀援 ⽣成AIツールの導⼊事例 @ 20241115配信AWSウェビナー登壇
fukubaka0825
6
2k
Better Code Design in PHP
afilina
PRO
0
130
카카오페이는 어떻게 수천만 결제를 처리할까? 우아한 결제 분산락 노하우
kakao
PRO
0
110
CSC509 Lecture 11
javiergs
PRO
0
180
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
300
EMになってからチームの成果を最大化するために取り組んだこと/ Maximize team performance as EM
nashiusagi
0
100
見せてあげますよ、「本物のLaravel批判」ってやつを。
77web
7
7.8k
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
How STYLIGHT went responsive
nonsquared
95
5.2k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
Into the Great Unknown - MozCon
thekraken
32
1.5k
Optimising Largest Contentful Paint
csswizardry
33
2.9k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.8k
Building Better People: How to give real-time feedback that sticks.
wjessup
364
19k
Building Flexible Design Systems
yeseniaperezcruz
327
38k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
26
2.1k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
890
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.3k
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]