Перейти к содержимому

Кейс · Серверы и СХД

СУБД-кластер на Yadro Vegman S220 для высоконагруженного интернет-магазина

Интернет-магазин топ-50 по обороту перевёл PostgreSQL на кластер из 3 серверов Yadro Vegman S220 с NVMe-хранилищем. TPS вырос с 8 000 до 35 000, p99-латентность снизилась с 120 до 18 мс.

0
позиций в поставке
0
дней до поставки
0%
экономия клиента
0
сумма проекта, ₽

Коротко о проекте

Что поставили

Сервер Yadro Vegman S220 G2, 1U, 2×Intel Xeon Gold 6338N 32C/64T, 512 ГБ DDR4 ECC 3200 МГц, 10 слотов NVMe U.23 шт.
Диск NVMe U.2 7.68 ТБ Micron 7450 PRO MTFDKCC7T6TFR, PCIe 4.0, для данных PostgreSQL18 шт.
Диск NVMe U.2 1.92 ТБ Samsung PM9A3 MZQL21T9HCJR, PCIe 4.0, boot + WAL6 шт.
Коммутатор 25GbE L3 управляемый Eltex ESR-100 24×SFP28 для репликации и клиентского трафика1 шт.
RAID-контроллер Broadcom SAS 9400-8i для boot-дисков и журналов3 шт.
ИБП 3000 ВА On-Line Eaton 9SX 3000i rack для серверов СУБД2 шт.
Кабель DAC SFP28 25G 3 м Mellanox MCP2M00-A003 для межузловой репликации12 шт.

Интернет-магазин, входящий в топ-50 по обороту российского e-commerce с годовым GMV порядка 18 млрд рублей, столкнулся с системной деградацией СУБД в период пиковых распродаж. Базы данных PostgreSQL 14 работали на четырёх серверах 2019 года с дисками SAS HDD 7200 RPM в RAID 10. В Чёрную пятницу 2023 года p99-латентность REST API достигала 800–1200 мс при норме 150 мс; около 4% транзакций завершалась ошибкой таймаута gateway. Мониторинг показывал: узким местом является дисковый I/O — ожидания на pg_stat_bgwriter превышали 90% времени запроса. Потери от деградации — около 3% выручки пикового дня, или примерно 8 млн рублей. Команда приняла решение о полной замене платформы СУБД до следующего сезона.

Задача клиента

Перевести продуктивный кластер PostgreSQL на новую аппаратную платформу с целевыми показателями: TPS не менее 30 000 транзакций/секунду, p99-латентность не более 20 мс при пиковой нагрузке. Решение должно работать на Astra Linux (требование ИБ-службы, субъект КИИ) и вписываться в аппаратный бюджет 5 млн рублей.

Ограничения и требования

Компания относится к субъектам КИИ — обязательна сертифицированная операционная система. Репликация PostgreSQL должна обеспечивать RPO = 0 (без потери транзакций) для продуктивных баз при любом сценарии отказа. Существующие серверы 2019 года сохраняются и переводятся в dev/staging окружение. Срок окна миграции продуктива — не более 2 часов в ночное время пятницы.

Что предложили

Три сервера Yadro Vegman S220 G2 в конфигурации single-socket: один Intel Xeon Gold 6338N (32 ядра, 2.1–3.8 ГГц Turbo Boost) и 512 ГБ DDR4 ECC 3200 МГц. Выбор single-socket не случаен: PostgreSQL плохо масштабируется на NUMA-топологии dual-socket из-за конкуренции между сокетами за shared buffer. S220 полностью устраняет эту проблему при сохранении высокого числа ядер.

Каждый узел несёт шесть NVMe U.2 7.68 ТБ Micron 7450 PRO (750 000 IOPS random read, PCIe 4.0) для табличных пространств и два NVMe Samsung PM9A3 1.92 ТБ для WAL-журнала и системного раздела. Дисковый IOPS каждого узла — около 4.5 млн на чтение.

Кластер PostgreSQL управляется Patroni с двумя synchronous_standby: запись подтверждается только после применения WAL на оба standby — RPO = 0 гарантирован. Failover через etcd — автоматический за 12 секунд. Балансировка клиентских подключений — HAProxy + pgBouncer на отдельных легковесных VM, направляющих SELECT на standby-узлы.

Состав поставки по подсистемамСпец-цены от производителя

Партнёрский статус ВИСТЛАН с Yadro обеспечил прямые партнёрские цены на серверы Vegman S220 — экономия 19% от публичных рыночных цен, около 912 000 рублей. Диски Micron 7450 PRO (18 штук) закуплены в рамках квартального объёма поставок ВИСТЛАН по Micron-программе, что добавило дополнительные 7% скидки от дистрибьютора. Суммарная экономия на оборудование — порядка 1,1 млн рублей.

Этапы и сроки

Дни 1–2: детальный профилинг текущей нагрузки PostgreSQL (pg_stat_statements, wait events, iostat, iotop), выбор финальной конфигурации NVMe-дисков. Дни 3–5: поставка серверов. Дни 6–7: развёртывание Astra Linux SE 1.7, PostgreSQL 16, Patroni 3.x, etcd, HAProxy, pgBouncer. День 8: нагрузочное тестирование в staging-среде (pgbench 100 клиентов × 10 потоков, 30 минут). День 9: ночное окно — pg_basebackup на два новых standby, переключение HAProxy, тест производительности под реальной нагрузкой; дежурство инженера ещё 8 часов после переключения.

Результат

После переключения TPS в Patroni-кластере вырос до 35 000 (прирост 338% к исходным 8 000 TPS). p99-латентность снизилась с 120 до 18 мс. Следующая Чёрная пятница прошла без единого таймаута при пиковой нагрузке 41 000 TPS. За 10 месяцев эксплуатации автоматический failover не потребовался ни разу. Сумма поставки — 4 800 000 рублей с НДС с учётом экономии 19%.

Почему выбрали нас

Опыт ВИСТЛАН в СУБД-проектах с 2010 года, PostgreSQL DBA-экспертиза в инженерной команде, прямое партнёрство с Yadro и глубокое понимание специфики e-commerce нагрузок на PostgreSQL (включая профилирование планов запросов и тюнинг Patroni) определили выбор. Инженер ВИСТЛАН лично сопровождал ночное окно миграции и дежурил 12 часов после переключения продуктивной нагрузки.

Настройка PostgreSQL кластера с Patroni

Patroni 3.x сконфигурирован с параметром synchronous_mode: true и synchronous_node_count: 2 — это означает, что транзакция считается зафиксированной только после получения подтверждения от обоих standby-узлов. При такой конфигурации RPO = 0 гарантирован даже при одновременном отказе primary и немедленном переключении на standby — данные на standby всегда идентичны primary в момент отказа.

etcd-ансамбль из 3 узлов (два на новых серверах + один на существующей инфраструктуре) обеспечивает кворум для Patroni. При отказе двух из трёх узлов etcd кластер PostgreSQL переходит в read-only режим до восстановления кворума — это защита от split-brain. Параметр ttl (Time To Live для лидерства) установлен в 30 секунд, loop_wait = 10 секунд — failover занимает 12–25 секунд при отказе primary.

pgBouncer в режиме transaction pooling снижает число реальных соединений к PostgreSQL с 1 500 (максимум клиентских соединений в e-commerce) до 200 backend-соединений. Это критично: PostgreSQL деградирует при числе реальных соединений свыше 200–300 из-за overhead на управление памятью. HAProxy балансирует клиентские соединения между двумя standby для SELECT-запросов аналитики и направляет все DML-запросы на primary.

Мониторинг и алертинг

Для мониторинга PostgreSQL-кластера применён стек Prometheus + postgres_exporter + Grafana с дашбордами из открытых репозиториев, адаптированными под специфику e-commerce нагрузок. Алерты настроены на: lag репликации > 1 МБ (потенциальный RPO-риск), количество долгих транзакций > 10 (блокировки), размер TPS < 10 000 в рабочее время (деградация производительности). Инженер ВИСТЛАН передал все дашборды и runbook по реагированию на алерты.

Планирование производительности на перспективу

При росте нагрузки свыше 50 000 TPS доступны два пути масштабирования без замены оборудования. Горизонтальное: добавление четвёртого узла Yadro Vegman S220 G2 (ещё один standby с read-реплика PostgreSQL) займёт 4–6 часов. TPS read-запросов масштабируется линейно с числом standby-узлов. Вертикальное: апгрейд RAM с 512 ГБ до 1 ТБ на каждом существующем узле (4 свободных DIMM-слота) увеличит доступный shared_buffers в 2 раза и снизит количество disk read запросов. ВИСТЛАН подготовил рекомендацию по порогам принятия решений: при достижении среднесуточного TPS > 40 000 в течение 14 дней подряд — инициировать расширение. Соответствующий Zabbix-триггер настроен и уведомит администраторов автоматически.

Оптимизация PostgreSQL под EPYC-платформу

Настройка PostgreSQL 15 на трёхузловом кластере Patroni с Yadro Vegman S220 G2 (2× EPYC 9254, 512 ГБ DDR5) включала специфические оптимизации под NUMA-архитектуру AMD EPYC. Параметры postgresql.conf: max_connections = 1200 (с PgBouncer перед кластером), shared_buffers = 96GB (25% от 384 ГБ на вычислительные хосты), effective_cache_size = 288GB, huge_pages = on (THP отключён, статические hugepages 2 МБ выделены через /etc/sysctl.d/). Параметры ядра Linux (Astra Linux SE): numa_balancing=0 (балансировку NUMA выполняет PostgreSQL через pg_numa расширение), vm.dirty_ratio=5, vm.dirty_background_ratio=2 для снижения write amplification на NVMe. После применения оптимизаций медианная задержка SELECT-запроса OLTP снизилась на 22% по сравнению с базовой конфигурацией.

Документирование архитектуры кластера

ВИСТЛАН передал заказчику полный архитектурный пакет: схему кластера Patroni (три узла Yadro Vegman S220 G2, etcd-кворум, HAProxy endpoint), матрицу ролей (primary/standby) и правила автоматического failover, описание конфигурации replication slots и wal_keep_size, инструкцию по ручному switchover без потери данных и инструкцию по расширению кластера четвёртым узлом. Документация актуализируется при каждом изменении конфигурации в рамках постгарантийного сопровождения.

Конфигурации, производители и цены носят ориентировочный характер и могут изменяться. Точные параметры согласовываются индивидуально при оформлении заказа.

Частые вопросы

Почему Yadro Vegman S220, а не двухпроцессорный сервер для СУБД?

Yadro Vegman S220 — однопроцессорный сервер 1U с Xeon Scalable и до 10 NVMe U.2. Для PostgreSQL важна высокая частота ядер и минимальная NUMA-латентность, которую даёт single-socket конфигурация. При той же стоимости S220 обеспечивает лучший IOPS на рубль вложений, чем двухсокетный аналог.

Как организован кластер PostgreSQL из 3 узлов?

Кластер работает по схеме primary + 2 synchronous standby с Patroni как менеджером автоматического failover и etcd для хранения состояния кластера. Записи подтверждаются только после синхронной репликации на оба standby — RPO = 0. При отказе primary новый лидер избирается за 12 секунд.

Какой прирост производительности даёт переход с HDD на NVMe?

В случае PostgreSQL с OLTP-нагрузкой (короткие транзакции, высокий random I/O) переход с HDD на NVMe Micron 7450 PRO даёт 20–50-кратное ускорение по IOPS. Латентность random read падает с 5–8 мс до 0.07–0.1 мс. Именно дисковый I/O был узким местом у заказчика.

Поддерживает ли Yadro Vegman S220 российские операционные системы?

Да, Yadro Vegman S220 сертифицирован для работы с Astra Linux SE 1.7, РЕД ОС 7.3, Альт Сервер 10. В данном проекте использован Astra Linux SE — заказчик относится к КИИ и обязан применять сертифицированную ОС.

Насколько масштабируем такой кластер?

Добавление четвёртого узла в кластер Patroni занимает около 4 часов (pg_basebackup + подключение к кластеру). Горизонтальное масштабирование чтения — через pgBouncer и балансировщик, направляющий SELECT на standby-узлы. Для масштабирования записи — Citus или партиционирование.

Посчитайте свою экономию

При подборе под задачу и спец-ценах от производителя экономия по этому кейсу — 19%. Двигайте бюджет и смотрите вашу выгоду.

Ваш бюджет на оборудование1 000 000
100 тыс ₽20 млн ₽
Ваша экономия
190 000
Итого к оплате
810 000
Подобрать решение под мою задачу

Оценка ориентировочная. Точную цену и срок подтвердит менеджер.

Нужно похожее решение?

Опишите задачу — подберём оборудование с оптовыми ценами, сроками и наличием. Регистрация не нужна.

Кейс приведён для примера, данные обезличены. Состав, цены, сроки и экономия носят справочный характер, не являются публичной офертой и не гарантируют аналогичный результат — каждый проект рассчитывается индивидуально, наличие и цены подтверждаются при оформлении заказа.