Slide 1

Slide 1 text

Обзор решений для 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

Slide 9

Slide 9 text

Postgres HA: варианты? Bucardo ● Мультимастер ● Морально устарела ● Use-cases есть, но... 9

Slide 10

Slide 10 text

Postgres HA: варианты? Pgpool-II ● Все плохо с производительностью ● Неоптимальный пулинг ● Хрупкий сам по себе ● Чувствителен к проблемам сети 10

Slide 11

Slide 11 text

Postgres HA: варианты? Postgres-XC/XL ● Непростая эксплуатация ● Много компонентов 11

Slide 12

Slide 12 text

Postgres HA: варианты? Велосипеды: ● Shell-скрипты ● Ansible ● Комбинации разных инструментов: haproxy, keepalived, pgbouncer, dns, etc... 12

Slide 13

Slide 13 text

Postgres HA: варианты? Велосипеды: ● кастомизация ● которая превращается в ад ● и может ломаться в неподходящий момент 13

Slide 14

Slide 14 text

Postgres HA: Итого ● Дорого обслуживать ● Отсутствие гибкости ● Сложно масштабировать ● Сложно управлять 14

Slide 15

Slide 15 text

Что есть сейчас ● Repmgr ● Patroni ● Stolon ● PAF ● pg_auto_failover 15

Slide 16

Slide 16 text

Repmgr ● 2ndQuadrant ● 2010-12-05 — First public release ● https://repmgr.org/ ● Python, C ● Cluster management 16

Slide 17

Slide 17 text

Patroni ● Zalando ● 2015-03-15 — First commit ● https://github.com/zalando/patroni ● Python ● Cluster Management 17

Slide 18

Slide 18 text

Stolon ● Sorintlab ● 2015-09-07 — Initial commit ● https://github.com/sorintlab/stolon ● Golang ● Cluster Management 18

Slide 19

Slide 19 text

PAF ● Dalibo → ClusterLabs ● 2016-02-03 — Initial commit ● https://github.com/ClusterLabs/PAF ● Perl ● Autofailover (Pacemaker, Corosync) 19

Slide 20

Slide 20 text

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

Slide 22

Slide 22 text

PostgreSQL HA ● Repmgr ● Patroni ● Stolon ● PAF ● pg_auto_failover 22

Slide 23

Slide 23 text

Сравнение ● Обзор архитектур ● Варианты установки и запуска ● Управление кластером ● Обеспечение HA ● Итоги 23

Slide 24

Slide 24 text

Сравнение ● Обзор архитектур ● Варианты установки и запуска ● Управление кластером ● Обеспечение HA ● Итоги 24

Slide 25

Slide 25 text

Цели архитектуры ● Устранение угроз, смягчение последствий – Network split → Split-brain – Node failure → Service interruption ● Кворум как реализация (источник истины) 25

Slide 26

Slide 26 text

Архитектура Repmgr

Slide 27

Slide 27 text

No content

Slide 28

Slide 28 text

repmgrd process repmgrd process repmgrd process

Slide 29

Slide 29 text

Архитектура Repmgr Switchover без дополнительных компонентов Repmgrd для Autofailover Поддержка Witness–сервера 29

Slide 30

Slide 30 text

Архитектура Repmgr Switchover без дополнительных компонентов Repmgrd для Autofailover Поддержка Witness–сервера Минимум компонентов, всё просто 30

Slide 31

Slide 31 text

Архитектура Patroni

Slide 32

Slide 32 text

No content

Slide 33

Slide 33 text

patroni process Distributed Configuration Storage patroni process patroni process

Slide 34

Slide 34 text

Архитектура Patroni Autofailover из коробки DCS как источник истины 34

Slide 35

Slide 35 text

Архитектура Patroni Autofailover из коробки DCS как источник истины DCS – обязательный компонент 35

Slide 36

Slide 36 text

Архитектура Stolon

Slide 37

Slide 37 text

37 https://github.com/sorintlab/stolon/raw/master/doc/architecture_small.png

Slide 38

Slide 38 text

Архитектура 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

Slide 87

Slide 87 text

Вопросы 87 Алексей Лесовский, [email protected]