Slide 1

Slide 1 text

Инфраструктура PostgreSQL в Ozon Алексей Игнатов Дмитрий Васильев

Slide 2

Slide 2 text

Около 9 тысяч PostgreSQL-инстансов Что такое инфраструктура PostgreSQL в Ozon 02.2022

Slide 3

Slide 3 text

Что такое инфраструктура PostgreSQL в Ozon 02.2022 3 mega TPS

Slide 4

Slide 4 text

Что такое инфраструктура PostgreSQL в Ozon 02.2022 4 Wal трафик GB/s

Slide 5

Slide 5 text

Как оно было 5 • В начале было слово (заявки в Jira) • Ресурсы создавались вручную через GUI( Foreman) • Ручная раскатка конфигураций через Puppet • Рутина начала угнетать

Slide 6

Slide 6 text

Что начали менять. часть 1 6 • Прикрутили плейбук на ansible для шедулинга размещения и создания базок • Работала в режиме cli • Данная схема абсолютно криповая и нерасширяемая • Рутина по заведению базок продолжала угнетать

Slide 7

Slide 7 text

Что начали менять. часть 2 7 • Хватит это терпеть • Переписываем в виде сервиса на python • resman – RESource MANager • Пока остается режим cli который дергает api • resman + It-crowd = рутина заведения базок ушла

Slide 8

Slide 8 text

К чему пришли в начале 2021 8

Slide 9

Slide 9 text

Что сейчас 9 • Ресурc в виде БД Postgresql по кнопке • Базки заказываются через it-crowd • Наша группа начинает больше пилить и расширять инфраструктуру для Postgresql • Горизонтальное масштабирование инфраструктуры поддерживает вертикальный рост компании • Планы на большую автоматизацию работы инфраструктуры вокруг Postgresql

Slide 10

Slide 10 text

Виртуализация: гипервизоры KVM

Slide 11

Slide 11 text

KVM hypervisor 11 • Все системные вызовы транслируются практически 1:1. • Основной overhead – это эмуляция окружения (в нашем случае сеть).

Slide 12

Slide 12 text

Деплой виртуальных машин 12 • Resman – scheduler ресурсов – Anti-Affinity: • dc • стойка в которой расположен гипервизор • shard-prefix (мягкое) Вес – утилизация гипервизора. • Hyper-man – управляет ресурсами гипервизора - позволяет создавать и управлять виртуальными машинами.

Slide 13

Slide 13 text

Hyper-man API 13 Клиенты hyper-man: • Resman: создание/удаление. • Hyper-dog: манипуляция над всем кластером виртуальных машин (patroni cluster). • Hyper-man-cli: помогает на P0/1 накидывать ресурсы: • CPU • RAM • IOPS

Slide 14

Slide 14 text

При создании виртуальной машины закладывается: • Online увеличение CPU – x2 • Online увеличение RAM – x2 • От 17k IOPS

Slide 15

Slide 15 text

CPU: внутри гипервизора Медицинский факт: перевод с shared на exclusive снижает latency 15 Весь CPU pool поделен на 3 части: • Shared: здесь расположены все CPU не привилегированных виртуальных машин. • Exclusive: здесь расположены CPU эксклюзивных машин. • System: изолированный кусок пула CPU для функционирования hypervisor kernel, обслуживание сети в виртуальных машинах.

Slide 16

Slide 16 text

CPU: внутри виртуальной машины 16 Распределение основных процессов внутри виртуальной машины: • К первым CPU bind’ятся pgbouncer • К последним CPU bind’ятся прерывания сетевой карты

Slide 17

Slide 17 text

Memory: не делаем overselling 17 На staging работает KERNEL SAME-PAGE MERGING (KSM), позволяет экономить около 20% памяти: • Мы используем ”золотые образы” операционной системы. • Мы используем одинаковые версии софта, (кроме версий PostgreSQL).

Slide 18

Slide 18 text

DISK 18 • Приходится использовать LVM для того чтобы обеспечить online-resize. • По IOPS есть математический overselling, фактического не наблюдаем. • Есть scheduler (hyper-dog), который делает автоматический ресайз дисков, но от него планируем отказаться, так как это приводит к неконтролируемому росту.

Slide 19

Slide 19 text

Network v2: macvtap 19 • Ограничен только исходящий трафик (200MB/s), иногда упираемся в трафик реплик. • Пакетики обрабатываются как на стороне гипервизора, так и внутри виртуальной машине. • Рандомно трафик VM-1 был виден в VM-2, из-за чего обработка “очереди пакетов” тормозила весь гипер: https://access.redhat.com/solutions/2822941

Slide 20

Slide 20 text

Network v3: sr-iov 20 • Ограничен только исходящий трафик (200MB/s), tc внутри виртуалки. • Трафик обрабатывается только внутри виртуальной машины • Нагрузочное тестирование: расходы cpu sys меньше в два раза, cpu irq в 10 раз.

Slide 21

Slide 21 text

Балансировка

Slide 22

Slide 22 text

Patroni + ETCD + Warden 22

Slide 23

Slide 23 text

Application <--> PostgreSQL 23

Slide 24

Slide 24 text

Hyper-dog: online resize 24 Hyper-dog (memory/cpu): • Проверяет целостность кластера. • Начинает с async, потом sync, потом leader. • Выводит из балансировки, если leader делает switchover, если синхронная реплика дожидается появления синхронной реплики. • Останавливает виртуальную машину, производит ресайз, запускает. • После запуска, если необходимо, делает тюнинг настройки PostgreSQL.

Slide 25

Slide 25 text

Отказоустойчивость

Slide 26

Slide 26 text

Patroni 26 Дополнительные костыли: • lag_guard (noloadbalance) • dc_guard (leader && sync в разных dc) • slot_guard (отстреливаем отставшие реплики)

Slide 27

Slide 27 text

SCM: puppet -> ansible -> chiit !!!

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

chiit 29 Проблемы которые решаем: • Масштабирование: smart client -> server as storage. • Быстрый (по нагрузке на ноду) деплой и откат. • Прозрачность.

Slide 30

Slide 30 text

Игнатов Алексей, Дмитрий Васильев Спасибо за внимание! [email protected], [email protected]