Обзор решений для
PostgreSQL
High Availability
Лесовский Алексей
Slide 2
Slide 2 text
О докладчике
Linux system administrator
PostgreSQL DBA
Data Egret, 2014 – now
2
Slide 3
Slide 3 text
PostgreSQL HA: что выбрать в 2019
3
Slide 4
Slide 4 text
Чего НЕ будет в докладе
Инструкций по установке
Инструкций по использованию
Примеров конфигов
4
Slide 5
Slide 5 text
High availability
Отказ узла ≠ отказ сервиса
(Быстрое) восстановление после отказа
5
Slide 6
Slide 6 text
High availability: Postgres
В идеале:
●
Мультимастер
●
Запись в разные дата-центры
●
OLTP low latency
●
Autofailover, self-recovery, rebalancing, ...
6
Slide 7
Slide 7 text
High availability: Postgres
На деле имеем:
●
Мультимастер имеет ограничения
●
Запись в мастер, чтение с реплик
●
Масса ручной работы
●
Регулярные тестовые переключения
●
Нужна экспертиза
7
Slide 8
Slide 8 text
High availability: Postgres
https://wiki.postgresql.org/wiki/High_Availability
https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
8
pg_auto_failover
●
Citus Data (Microsoft)
●
2019-05-02 — public release
●
https://github.com/citusdata/pg_auto_failover
●
Pure C
●
Autofailover (PostgreSQL extension)
20
Slide 21
Slide 21 text
PostgreSQL HA
High Availability вцелом
Управление кластером
21
Архитектура Stolon
Autofailover из коробки
DCS как источник истины
Клиенты работают с БД через proxy
38
Slide 39
Slide 39 text
Архитектура Stolon
Autofailover из коробки
DCS как источник истины
Клиенты работают с БД через proxy
DCS – обязательный компонент
39
Slide 40
Slide 40 text
Patroni vs. Stolon
Концепции похожи, но дъявол в деталях
40
Slide 41
Slide 41 text
Сравнение
●
Обзор архитектур
●
Варианты установки и запуска
●
Управление кластером
●
Обеспечение HA
●
Итоги
41
Slide 42
Slide 42 text
Установка и запуск
●
Standby cluster
●
Установка на рабочем кластере
42
Slide 43
Slide 43 text
Standby cluster
43
Slide 44
Slide 44 text
Standby cluster
44
Slide 45
Slide 45 text
Standby cluster
45
Repmgr : ДА
Patroni: ДА
Stolon: ДА
Slide 46
Slide 46 text
Hard way deploy
46
Repmgr : ДА
Patroni: ДА
Stolon: НЕТ
Slide 47
Slide 47 text
Установка и запуск
47
bootstrap on-fly standby
Repmgr no yes yes
Patroni yes yes yes
Stolon yes no yes
Slide 48
Slide 48 text
Сравнение
●
Обзор архитектур
●
Варианты установки и запуска
●
Управление кластером
●
Обеспечение HA
●
Итоги
48
Slide 49
Slide 49 text
Управление кластером
●
Добавление новых узлов
●
Управление конфигурацией PG
●
Синхронная репликация
●
Дебаг и траблшутинг
49
Slide 50
Slide 50 text
Добавление узлов
Резервное копирование с мастера
Кастомизация:
●
Копирование с реплики
●
С резервных копий (wal-g, barman, backrest)
●
С помощью кастомного скрипта
50
Slide 51
Slide 51 text
Добавление узлов
Repmgr
●
Автоматически "repmgr standby clone"
●
Инициализация с реплик — ДА
●
Резервные копии — только Barman
●
Кастомное восстановление — ДА
51
Slide 52
Slide 52 text
Добавление узлов
Patroni
●
Автоматический процесс
●
Инициализация с реплик — ДА
●
Резервные копии — ДА
●
Кастомное восстановление — ДА
52
Slide 53
Slide 53 text
Добавление узлов
Stolon
●
Автоматический процесс
●
Инициализация с реплик — НЕТ
●
Резервные копии — только при bootstrap
●
Кастомное восстановление — НЕТ
53
Slide 54
Slide 54 text
Добавление узлов
54
Repmgr Patroni Stolon
Автоматически yes yes yes
Инициализация с реплик yes yes no
С резервных копий yes* yes yes**
Кастомная инициализация yes yes no
* - только Barman
** - только при bootstrap
Slide 55
Slide 55 text
Управление кластером
●
Добавление новых узлов
●
Управление конфигурацией PG
●
Синхронная репликация
●
Дебаг и траблшутинг
55
Slide 56
Slide 56 text
Управление конфигурацией
Repmgr — надстройка над PG
Patroni/Stolon — init-система для PG
56
Slide 57
Slide 57 text
Repmgr
●
Пользователь имеет полный контроль над
конфигурацией
●
postgresql.conf, postgresql.auto.conf
●
pg_hba.conf
●
recovery.conf
57
Управление конфигурацией
Slide 58
Slide 58 text
Patroni
●
Частично под контролем Patroni
●
Параметры репликации
●
postgresql.conf vs. postgresql.base.conf
58
Управление конфигурацией
Slide 59
Slide 59 text
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
Slide 60
Slide 60 text
Управление кластером
●
Добавление новых узлов
●
Управление конфигурацией PG
●
Синхронная репликация
●
Дебаг и траблшутинг
60
Slide 61
Slide 61 text
Синхронная репликация
Repmgr — настраивается руками
Patroni — ДА (patronictl)
Stolon — ДА (stolonctl)
●
Нельзя ANY, FIRST
●
Количество синх.реплик регулируется
через параметры Stolon
61
Slide 62
Slide 62 text
Управление кластером
●
Добавление новых узлов
●
Управление конфигурацией PG
●
Синхронная репликация
●
Дебаг и траблшутинг
62
Slide 63
Slide 63 text
Дебаг и траблшутинг
●
Repmgr — свои логи
●
Patroni — свои логи, journald
●
Stolon — stdout, log-level, journald
●
Логи Postgres
●
Status-команды в cli-утилитах
63
Slide 64
Slide 64 text
Сравнение
●
Обзор архитектур
●
Варианты установки и запуска
●
Управление кластером
●
Обеспечение HA
●
Итоги
64
Slide 65
Slide 65 text
Обеспечение HA
●
Автофайловер, Свитчовер
●
Кастомизация
●
Фенсинг
●
Восстановление сбойных узлов
●
Требования к приложениям
65
Slide 66
Slide 66 text
Автофайловер
●
Repmgr — как опция
●
Patroni — из коробки
●
Stolon — из коробки
66
Slide 67
Slide 67 text
Свитчовер
●
Repmgr — из коробки
●
Patroni — из коробки
●
Stolon — нет, но есть workaround
67
Slide 68
Slide 68 text
Обеспечение HA
●
Автофайловер, Свитчовер
●
Кастомизация
●
Фенсинг
●
Восстановление сбойных узлов
●
Требования к приложениям
68
Slide 69
Slide 69 text
Кастомизация
●
Pre actions
●
Post actions
●
On role change actions
69
Slide 70
Slide 70 text
Кастомизация Repmgr
Event notifications:
●
event_notification_command
●
Один user-defined-скрипт
●
Работает асинхронно
70
Slide 71
Slide 71 text
Кастомизация Patroni
Callbacks:
●
Набор user-defined-скриптов
●
Работают асинхронно
71
Slide 72
Slide 72 text
Кастомизация Stolon
72
Slide 73
Slide 73 text
Обеспечение HA
●
Автофайловер, Свитчовер
●
Кастомизация
●
Фенсинг
●
Восстановление сбойных узлов
●
Требования к приложениям
73
Slide 74
Slide 74 text
Фенсинг в Repmgr
Его нет
Кастомизация через promote_command
74
Slide 75
Slide 75 text
Фенсинг в Patroni
Patroni: Linux Watchdog
DCS: перезапуск в Read-Only
Существующие соединения обрываются
75
Slide 76
Slide 76 text
Фенсинг в Stolon
Stolon: Удаление узла из clusterview
DCS: Proxy перестает слушать интерфейс
Существущие соединения обрываются
Новые соединение не принимаются
76
Slide 77
Slide 77 text
Обеспечение HA
●
Автофайловер, Свитчовер
●
Кастомизация
●
Фенсинг
●
Восстановление сбойных узлов
●
Требования к приложениям
77
Slide 78
Slide 78 text
Восстановление
Repmgr
●
Только ручное восстановление
●
repmgr node rejoin
●
pg_rewind
78
Slide 79
Slide 79 text
Восстановление
Patroni, Stolon
●
full reinit, base backup, clone, etc…
●
pg_rewind
●
В худшем случае — руками
79
Slide 80
Slide 80 text
Обеспечение HA
●
Автофайловер, Свитчовер
●
Кастомизация
●
Фенсинг
●
Восстановление сбойных узлов
●
Требования к приложениям
80
Slide 81
Slide 81 text
Требования к приложению
●
Самостоятельный поиск мастера/реплик
●
Обработка ошибок доступа к БД
●
Переустановка соединений к БД
81
Slide 82
Slide 82 text
Требование к приложению
Repmgr — предоставляет ничего
Patroni — авторегистрация сервисов в Consul
(Consul DNS)
Stolon — ручная регистрация сервисов в
Consul (c 0.14)
82
Slide 83
Slide 83 text
Сравнение
●
Обзор архитектур
●
Варианты установки и запуска
●
Управление кластером
●
Обеспечение HA
●
Итоги
83
Slide 84
Slide 84 text
Итого
Repmgr
●
Автофайловер как опция
●
Полная свобода в конфигурировании PG
●
Нет фенсинга
●
Event notifications
●
Baremetal setup
84
Slide 85
Slide 85 text
Итого
Patroni
●
Автофайловер из коробки
●
Много продвинутых функций
●
Фенсинг в том числе
●
Baremetal, Cloud setup
85
Slide 86
Slide 86 text
Итого
Stolon
●
Автофайловер из коробки
●
Есть фенсинг
●
Если у вас нет существенных требований
к кастомизации
●
Cloud setup
86