Танцующий кластер. Практическое руководство...
TRANSCRIPT
![Page 1: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/1.jpg)
www.postgrespro.ru
Танцующий кластерпрактическое руководство дрессировщикаPostgreSQL
Алексей Чижков, Михаил Кулагин
![Page 2: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/2.jpg)
Вызов: Кластер PostgreSQL
Мнение заказчика● обеспечивает высокую доступность (HA) ● отказоустойчив (FT)● распределяет нагрузку (LB)● масштабируется на ходу ● живуч и надежен, как (...)
![Page 3: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/3.jpg)
Через тернии в кластер
С точки зрения разработчика решения для кластера Postgres, все кластерные стеки одинаковы:
- внешние для Postgres
- любви к Postgres нет в коробке
![Page 4: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/4.jpg)
Потоковая репликация
(Streaming Replication)позволяет узлам кластера Postgres выполнять три роли:
- мастер (1)- синхронная реплика (1)- асинхронная реплика ( )∞
![Page 5: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/5.jpg)
Поддержка ролей
Порядок подхвата ролей узлов, вышедших из строя в кластере Postgres
A→S→M
M — Мастер
S – Синхронная репликаА – Асинхронная реплика
![Page 6: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/6.jpg)
Кластерные стеки
Одинаково хорошо подходят для PostgresSQL если:
- поддерживают роли узлов
- исключают split-brain
![Page 7: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/7.jpg)
Кластер в датацентре
![Page 8: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/8.jpg)
Split-brain в кластере
![Page 9: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/9.jpg)
Split-brain для синих
![Page 10: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/10.jpg)
С точки зрения красных
![Page 11: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/11.jpg)
Чем опасен split-brain?
Вызывает безусловное умножение количества узлов с уникальными ключевыми ролями (М,S), что создает:● Недоступность обоих сплитов для клиентов
● Потерю консистентности набора данных● Невероятную сложность восстановления
![Page 12: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/12.jpg)
M – MasterS – SyncA – AsyncX – Failed
Кворум – злейший враг Split-brain
● expected votes = 4quorum = 3green wins
![Page 13: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/13.jpg)
M – MasterS – SyncA – AsyncX – Failed
Smoker cluster started
● expected votes = 4quorum = 3
![Page 14: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/14.jpg)
M – MasterS – SyncA – AsyncX – Failed
Async replica failed
● expected votes = 4quorum = 3quorate
![Page 15: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/15.jpg)
M – MasterS – SyncA – AsyncX – Failed
Master failed
● expected votes = 4quorum = 3inquorate
![Page 16: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/16.jpg)
M – MasterS – SyncA – AsyncX – Failed
Smoker cluster stopped
● expected votes = 4quorum = 3inquorate
![Page 17: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/17.jpg)
Что можно исправить?
● Улучшить отказоустойчивость без увеличения стоимости
● Создать перевес голосов в пользу мастера и лучшего кандидата в мастеры – синхронной реплики.
![Page 18: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/18.jpg)
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 / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/19.jpg)
M – MasterS – SyncA – AsyncX – Failed
Healthy VCM cluster started
● expected votes = 7quorum = 4quorate
![Page 20: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/20.jpg)
M – MasterS – SyncA – AsyncX – Failed
Async node failed in VC cluster
● expected votes = 5quorum = 3quorate
![Page 21: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/21.jpg)
M – MasterS – SyncA – AsyncX – Failed
Master failed in VC cluster
● expected votes = 4quorum = 3quorate
![Page 22: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/22.jpg)
M – MasterS – SyncA – AsyncX – Failed
VC cluster in crisis
● expected votes = 4quorum = 3quorate
![Page 23: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/23.jpg)
M – MasterS – SyncA – AsyncX – Failed
+1 healty node added to VC
● expected votes = 5quorum = 3quorate
![Page 24: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/24.jpg)
M – MasterS – SyncA – AsyncX – Failed
… another master failure in VC
● expected votes = 5quorum = 3quorate
![Page 25: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/25.jpg)
M – MasterS – SyncA – AsyncX – Failed
+2 healthy nodes added in vc
● expected votes = 7quorum = 4quorate
![Page 26: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/26.jpg)
Smoker vs. Healthy
![Page 27: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/27.jpg)
Lets go upscale!!!
● expected votes = 7quorum = 4quorate
![Page 28: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/28.jpg)
Upscaled to 5 nodes
● expected votes = 9quorum = 5quorate
![Page 29: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/29.jpg)
Upscaled to 6 nodes
● expected votes = 10quorum = 6quorate
![Page 30: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/30.jpg)
Профит. (демо)
- Демо на стенде Postgres Professional
- Улучшаем PostgreSQL
- Улучшаем кластерные стеки
![Page 31: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/31.jpg)
Патчи в PostgreSQL
pg_rewind● недостаточно привелегий пользователя
репликации, что затрудняет автоматизацию возращения мастера к строй
recovery.conf● Изменение параметров репликации на данный
момент нельзя изменить без рестарта Postgres
![Page 32: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/32.jpg)
Патчи в кластерные стеки
ocf_heartbeat_pgsql
добавление/удаление узлов приводит к рестарту всех экземпляров PostgreSQL
(решено)
![Page 33: Танцующий кластер. Практическое руководство дрессировщика PostgreSQL / Алексей Чижков, Дмитрий Васильев](https://reader031.vdocuments.mx/reader031/viewer/2022020716/586f91101a28ab54768b7afd/html5/thumbnails/33.jpg)
www.postgrespro.ru
Cпасибо за внимание!
Контакты: