www.postgrespro.ru
Танцующий кластер
практическое руководство дрессировщика
PostgreSQL
Алексей Чижков, Михаил Кулагин
Вызов: Кластер PostgreSQL
Мнение заказчика
● обеспечивает высокую доступность (HA)
● отказоустойчив (FT)
● распределяет нагрузку (LB)
● масштабируется на ходу
● живуч и надежен, как (...)
Через тернии в кластер
С точки зрения разработчика решения для
кластера Postgres, все кластерные стеки
одинаковы:
- внешние для Postgres
- любви к Postgres нет в коробке
Потоковая репликация
(Streaming Replication)
позволяет узлам кластера Postgres
выполнять три роли:
- мастер (1)
- синхронная реплика (1)
- асинхронная реплика ( )∞
Поддержка ролей
Порядок подхвата ролей узлов, вышедших
из строя в кластере Postgres
A→S→M
M — Мастер
S – Синхронная реплика
А – Асинхронная реплика
Кластерные стеки
Одинаково хорошо подходят для
PostgresSQL если:
- поддерживают роли узлов
- исключают split-brain
Кластер в датацентре
Split-brain в кластере
Split-brain для синих
С точки зрения красных
Чем опасен split-brain?
Вызывает безусловное умножение
количества узлов с уникальными
ключевыми ролями (М,S), что создает:
● Недоступность обоих сплитов для
клиентов
● Потерю консистентности набора данных
● Невероятную сложность восстановления
M – Master
S – Sync
A – Async
X – Failed
Кворум – злейший враг Split-brain
● expected votes = 4
quorum = 3
green wins
M – Master
S – Sync
A – Async
X – Failed
Smoker cluster started
● expected votes = 4
quorum = 3
M – Master
S – Sync
A – Async
X – Failed
Async replica failed
● expected votes = 4
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
Master failed
● expected votes = 4
quorum = 3
inquorate
M – Master
S – Sync
A – Async
X – Failed
Smoker cluster stopped
● expected votes = 4
quorum = 3
inquorate
Что можно исправить?
● Улучшить отказоустойчивость без
увеличения стоимости
● Создать перевес голосов в пользу мастера
и лучшего кандидата в мастеры –
синхронной реплики.
Vote Controlling Math
IF N is_odd THEN M = S
IF N is_even THEN M = S+1
M+S >= N/2+1
S > 1
A = 1
голоса
N — все
M – мастера
S – синхронной р.
A – асинх. р.
M – Master
S – Sync
A – Async
X – Failed
Healthy VCM cluster started
● expected votes = 7
quorum = 4
quorate
M – Master
S – Sync
A – Async
X – Failed
Async node failed in VC cluster
● expected votes = 5
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
Master failed in VC cluster
● expected votes = 4
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
VC cluster in crisis
● expected votes = 4
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
+1 healty node added to VC
● expected votes = 5
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
… another master failure in VC
● expected votes = 5
quorum = 3
quorate
M – Master
S – Sync
A – Async
X – Failed
+2 healthy nodes added in vc
● expected votes = 7
quorum = 4
quorate
Smoker vs. Healthy
Lets go upscale!!!
● expected votes = 7
quorum = 4
quorate
Upscaled to 5 nodes
● expected votes = 9
quorum = 5
quorate
Upscaled to 6 nodes
● expected votes = 10
quorum = 6
quorate
Профит. (демо)
- Демо на стенде Postgres Professional
- Улучшаем PostgreSQL
- Улучшаем кластерные стеки
Патчи в PostgreSQL
pg_rewind
● недостаточно привелегий пользователя
репликации, что затрудняет автоматизацию
возращения мастера к строй
recovery.conf
● Изменение параметров репликации на данный
момент нельзя изменить без рестарта Postgres
Патчи в кластерные стеки
ocf_heartbeat_pgsql
добавление/удаление узлов приводит к
рестарту всех экземпляров PostgreSQL
(решено)
www.postgrespro.ru
Cпасибо за внимание!
Контакты:
a.chizhkoff@postgrespro.ru
m.kulagin@postgrespro.ru

Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев (Postgres Professional)