33
www.postgrespro.ru Танцующий кластер практическое руководство дрессировщика PostgreSQL Алексей Чижков, Михаил Кулагин

Dancing cluster

Embed Size (px)

Citation preview

Page 1: Dancing cluster

www.postgrespro.ru

Танцующий кластерпрактическое руководство дрессировщикаPostgreSQL

Алексей Чижков, Михаил Кулагин

Page 2: Dancing cluster

Вызов: Кластер PostgreSQL

Мнение заказчика● обеспечивает высокую доступность (HA) ● отказоустойчив (FT)● распределяет нагрузку (LB)● масштабируется на ходу ● живуч и надежен, как (...)

Page 3: Dancing cluster

Через тернии в кластер

С точки зрения разработчика решения для кластера Postgres, все кластерные стеки одинаковы:

- внешние для Postgres

- любви к Postgres нет в коробке

Page 4: Dancing cluster

Потоковая репликация

(Streaming Replication)позволяет узлам кластера Postgres выполнять три роли:

- мастер (1)- синхронная реплика (1)- асинхронная реплика ( )∞

Page 5: Dancing cluster

Поддержка ролей

Порядок подхвата ролей узлов, вышедших из строя в кластере Postgres

A→S→M

M — Мастер

S – Синхронная репликаА – Асинхронная реплика

Page 6: Dancing cluster

Кластерные стеки

Одинаково хорошо подходят для PostgresSQL если:

- поддерживают роли узлов

- исключают split-brain

Page 7: Dancing cluster

Кластер в датацентре

Page 8: Dancing cluster

Split-brain в кластере

Page 9: Dancing cluster

Split-brain для синих

Page 10: Dancing cluster

С точки зрения красных

Page 11: Dancing cluster

Чем опасен split-brain?

Вызывает безусловное умножение количества узлов с уникальными ключевыми ролями (М,S), что создает:● Недоступность обоих сплитов для клиентов

● Потерю консистентности набора данных● Невероятную сложность восстановления

Page 12: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Кворум – злейший враг Split-brain

● expected votes = 4quorum = 3green wins

Page 13: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster started

● expected votes = 4quorum = 3

Page 14: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Async replica failed

● expected votes = 4quorum = 3quorate

Page 15: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Master failed

● expected votes = 4quorum = 3inquorate

Page 16: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster stopped

● expected votes = 4quorum = 3inquorate

Page 17: Dancing cluster

Что можно исправить?

● Улучшить отказоустойчивость без увеличения стоимости

● Создать перевес голосов в пользу мастера и лучшего кандидата в мастеры – синхронной реплики.

Page 18: Dancing cluster

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 – асинх. р.

Page 19: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Healthy VCM cluster started

● expected votes = 7quorum = 4quorate

Page 20: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Async node failed in VC cluster

● expected votes = 5quorum = 3quorate

Page 21: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

Master failed in VC cluster

● expected votes = 4quorum = 3quorate

Page 22: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

VC cluster in crisis

● expected votes = 4quorum = 3quorate

Page 23: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

+1 healty node added to VC

● expected votes = 5quorum = 3quorate

Page 24: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

… another master failure in VC

● expected votes = 5quorum = 3quorate

Page 25: Dancing cluster

M – MasterS – SyncA – AsyncX – Failed

+2 healthy nodes added in vc

● expected votes = 7quorum = 4quorate

Page 26: Dancing cluster

Smoker vs. Healthy

Page 27: Dancing cluster

Lets go upscale!!!

● expected votes = 7quorum = 4quorate

Page 28: Dancing cluster

Upscaled to 5 nodes

● expected votes = 9quorum = 5quorate

Page 29: Dancing cluster

Upscaled to 6 nodes

● expected votes = 10quorum = 6quorate

Page 30: Dancing cluster

Профит. (демо)

- Демо на стенде Postgres Professional

- Улучшаем PostgreSQL

- Улучшаем кластерные стеки

Page 31: Dancing cluster

Патчи в PostgreSQL

pg_rewind● недостаточно привилегий пользователя

репликации, что затрудняет автоматизацию возращения мастера к строй

recovery.conf● Изменение параметров репликации на данный

момент нельзя изменить без рестарта Postgres

Page 32: Dancing cluster

Патчи в кластерные стеки

ocf_heartbeat_pgsql

добавление/удаление узлов приводит к рестарту всех экземпляров PostgreSQL

(решено)

Page 33: Dancing cluster

www.postgrespro.ru

Cпасибо за внимание!

Контакты:

[email protected]

[email protected]