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

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

  • Upload
    ontico

  • View
    1.061

  • Download
    8

Embed Size (px)

Citation preview

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

www.postgrespro.ru

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

A→S→M

M — Мастер

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

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

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

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

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

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

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

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

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

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

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

Split-brain для синих

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

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

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

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

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

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

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

M – MasterS – SyncA – AsyncX – Failed

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

● expected votes = 4quorum = 3green wins

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

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster started

● expected votes = 4quorum = 3

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

M – MasterS – SyncA – AsyncX – Failed

Async replica failed

● expected votes = 4quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

Master failed

● expected votes = 4quorum = 3inquorate

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

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster stopped

● expected votes = 4quorum = 3inquorate

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

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

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

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

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

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: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев

M – MasterS – SyncA – AsyncX – Failed

Healthy VCM cluster started

● expected votes = 7quorum = 4quorate

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

M – MasterS – SyncA – AsyncX – Failed

Async node failed in VC cluster

● expected votes = 5quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

Master failed in VC cluster

● expected votes = 4quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

VC cluster in crisis

● expected votes = 4quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

+1 healty node added to VC

● expected votes = 5quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

… another master failure in VC

● expected votes = 5quorum = 3quorate

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

M – MasterS – SyncA – AsyncX – Failed

+2 healthy nodes added in vc

● expected votes = 7quorum = 4quorate

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

Smoker vs. Healthy

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

Lets go upscale!!!

● expected votes = 7quorum = 4quorate

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

Upscaled to 5 nodes

● expected votes = 9quorum = 5quorate

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

Upscaled to 6 nodes

● expected votes = 10quorum = 6quorate

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

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

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

- Улучшаем PostgreSQL

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

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

Патчи в PostgreSQL

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

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

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

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

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

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

ocf_heartbeat_pgsql

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

(решено)

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

www.postgrespro.ru

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

Контакты:

[email protected]

[email protected]