dancing cluster

Post on 14-Apr-2017

704 Views

Category:

Engineering

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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 – MasterS – SyncA – AsyncX – Failed

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

● expected votes = 4quorum = 3green wins

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster started

● expected votes = 4quorum = 3

M – MasterS – SyncA – AsyncX – Failed

Async replica failed

● expected votes = 4quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

Master failed

● expected votes = 4quorum = 3inquorate

M – MasterS – SyncA – AsyncX – Failed

Smoker cluster stopped

● expected votes = 4quorum = 3inquorate

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

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

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

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 – MasterS – SyncA – AsyncX – Failed

Healthy VCM cluster started

● expected votes = 7quorum = 4quorate

M – MasterS – SyncA – AsyncX – Failed

Async node failed in VC cluster

● expected votes = 5quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

Master failed in VC cluster

● expected votes = 4quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

VC cluster in crisis

● expected votes = 4quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

+1 healty node added to VC

● expected votes = 5quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

… another master failure in VC

● expected votes = 5quorum = 3quorate

M – MasterS – SyncA – AsyncX – Failed

+2 healthy nodes added in vc

● expected votes = 7quorum = 4quorate

Smoker vs. Healthy

Lets go upscale!!!

● expected votes = 7quorum = 4quorate

Upscaled to 5 nodes

● expected votes = 9quorum = 5quorate

Upscaled to 6 nodes

● expected votes = 10quorum = 6quorate

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

- Демо на стенде 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

top related