dancing cluster
Post on 14-Apr-2017
704 Views
Preview:
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