Нет единого мнения о том, как должен себя вести хорошо дрессированный кластер, какие номера он должен показывать и что будет делать в случае катастрофы. Надежда обнаружить серебряную пулю в поиске лучших практик толкает разработчиков кластерных решений перебирать один стек за другим, менять компоненты в расчете на то, что искомая комбинация обнаружится сама собой.
Наблюдая в разной степени успешный опыт коллег, мы почти сразу остановили свой выбор на стеке от ClusterLabs, который удовлетворяет всем минимальным требованиям синхронной хореографии прямо из коробки. Обучить же наш кластер PostgreSQL простейшим танцевальным движениям оказалось не самой легкой задачей. Нас выручили идея управлять голосами кворума и математическая модель суверенной демократии.
В докладе я покажу, как именно математическая модель суверенной демократии помогла построить живучий и масштабируемый кластер PostgreSQL.
2. Вызов: Кластер PostgreSQL
Мнение заказчика
● обеспечивает высокую доступность (HA)
● отказоустойчив (FT)
● распределяет нагрузку (LB)
● масштабируется на ходу
● живуч и надежен, как (...)
3. Через тернии в кластер
С точки зрения разработчика решения для
кластера Postgres, все кластерные стеки
одинаковы:
- внешние для Postgres
- любви к Postgres нет в коробке
11. Чем опасен split-brain?
Вызывает безусловное умножение
количества узлов с уникальными
ключевыми ролями (М,S), что создает:
● Недоступность обоих сплитов для
клиентов
● Потерю консистентности набора данных
● Невероятную сложность восстановления
12. M – Master
S – Sync
A – Async
X – Failed
Кворум – злейший враг Split-brain
● expected votes = 4
quorum = 3
green wins
13. M – Master
S – Sync
A – Async
X – Failed
Smoker cluster started
● expected votes = 4
quorum = 3
14. M – Master
S – Sync
A – Async
X – Failed
Async replica failed
● expected votes = 4
quorum = 3
quorate
15. M – Master
S – Sync
A – Async
X – Failed
Master failed
● expected votes = 4
quorum = 3
inquorate
16. M – Master
S – Sync
A – Async
X – Failed
Smoker cluster stopped
● expected votes = 4
quorum = 3
inquorate
17. Что можно исправить?
● Улучшить отказоустойчивость без
увеличения стоимости
● Создать перевес голосов в пользу мастера
и лучшего кандидата в мастеры –
синхронной реплики.
18. 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 – асинх. р.
19. M – Master
S – Sync
A – Async
X – Failed
Healthy VCM cluster started
● expected votes = 7
quorum = 4
quorate
20. M – Master
S – Sync
A – Async
X – Failed
Async node failed in VC cluster
● expected votes = 5
quorum = 3
quorate
21. M – Master
S – Sync
A – Async
X – Failed
Master failed in VC cluster
● expected votes = 4
quorum = 3
quorate
22. M – Master
S – Sync
A – Async
X – Failed
VC cluster in crisis
● expected votes = 4
quorum = 3
quorate
23. M – Master
S – Sync
A – Async
X – Failed
+1 healty node added to VC
● expected votes = 5
quorum = 3
quorate
24. M – Master
S – Sync
A – Async
X – Failed
… another master failure in VC
● expected votes = 5
quorum = 3
quorate
25. M – Master
S – Sync
A – Async
X – Failed
+2 healthy nodes added in vc
● expected votes = 7
quorum = 4
quorate
28. Upscaled to 5 nodes
● expected votes = 9
quorum = 5
quorate
29. Upscaled to 6 nodes
● expected votes = 10
quorum = 6
quorate
30. Профит. (демо)
- Демо на стенде Postgres Professional
- Улучшаем PostgreSQL
- Улучшаем кластерные стеки
31. Патчи в PostgreSQL
pg_rewind
● недостаточно привелегий пользователя
репликации, что затрудняет автоматизацию
возращения мастера к строй
recovery.conf
● Изменение параметров репликации на данный
момент нельзя изменить без рестарта Postgres
32. Патчи в кластерные стеки
ocf_heartbeat_pgsql
добавление/удаление узлов приводит к
рестарту всех экземпляров PostgreSQL
(решено)