Выделенные серверы для баз данных с памятью ECC и быстрыми NVMe
Запускайте PostgreSQL, MySQL, ClickHouse или Redis на выделенном сервере для баз данных, где буферный пул, очередь NVMe и каждое ядро EPYC служат одному-единственному клиенту — вам.
Во всех тарифах на EPYC стоят модули памяти ECC: они исправляют битовые ошибки на пути к процессору, а не только внутри самого чипа, как встроенная (on-die) ECC в DDR5.
Объем ОЗУ под ваш рабочий набор данных
От 128 до 384 ГБ ОЗУ, чтобы горячая часть данных отдавалась из буферного пула, а не с дисков.
Локальные NVMe без сети хранения
Случайные чтения и коммиты с частыми fsync идут прямо на локальные NVMe — без сетевого блочного хранилища и общей очереди посередине.
Реплики через приватную VLAN
Соединяйте основной сервер и реплику в одной локации через бесплатную приватную VLAN, а между регионами — через туннель WireGuard.
Рекомендуемые серверы
Три сервера, которые мы выбрали бы для этой задачи
От первого развертывания до нагруженного продакшена. Наличие и цены в реальном времени; выбранные серверы в наличии готовы к работе менее чем за 2 минуты.
12 ядер Zen 4 с частотой до 5,4 ГГц — для быстрых одиночных запросов, а 128 ГБ DDR5 ECC и 2 × 1,92 ТБ NVMe подойдут для большинства OLTP-баз объемом до терабайта.
Эти диапазоны — ориентиры, а не результаты измерений: важно, какая доля ваших данных горячая, поэтому перед выбором проверьте коэффициент попаданий в кэш на текущей системе.
Профиль базы данных
Что определяет конфигурацию
Рекомендуемый тариф
PostgreSQL или MySQL до ~500 ГБ
Горячие данные помещаются в 128 ГБ; быстрые ядра для одиночных запросов
Краткие практические советы наших инженеров для этой задачи.
Надежность записи: fsync, RAID 1 и безопасные настройки по умолчанию
Коммит надежно сохранен, только когда он попал на энергонезависимый носитель. На основном сервере оставьте безопасные значения по умолчанию: fsync = on в PostgreSQL, innodb_flush_log_at_trx_commit = 1 и sync_binlog = 1 в MySQL или MariaDB. Если допустимо потерять коммиты последних мгновений перед сбоем, параметр synchronous_commit = off в PostgreSQL ускорит работу ценой этого окна, не создавая риска повреждения данных.
Серверы с двумя дисками по умолчанию поставляются с программным RAID 1; состояние зеркала проверяйте командой cat /proc/mdstat.
Прежде чем что-либо настраивать, измерьте реальную производительность дисков с помощью pg_test_fsync.
На ZFS согласуйте recordsize с размером страницы (для начала 16K для InnoDB и 8K для PostgreSQL) и ограничьте ARC, чтобы он не конкурировал с буферным пулом.
Сначала память: буферные пулы и рабочие наборы
База данных, которая читает из ОЗУ, редко ждет. Подберите объем памяти под горячие данные, а затем настройте каждый движок так, чтобы он не конкурировал ни с другими, ни с ОС:
PostgreSQL:shared_buffers — около 25% ОЗУ, effective_cache_size — около 70% и умеренное значение work_mem, ведь его может задействовать каждая сортировка или хеш-операция в каждом запросе.
MySQL и MariaDB:innodb_buffer_pool_size — 60–75% ОЗУ на сервере, где больше ничего не работает.
Valkey и Redis: задайте maxmemory заметно меньше объема ОЗУ: при создании снапшотов процесс форкается, и механизму копирования при записи (copy-on-write) нужен запас.
ClickHouse: ограничьте память на один запрос с помощью max_memory_usage, чтобы один тяжелый отчет не обрушил весь сервер.
Затем следите за коэффициентом попаданий в кэш: если под нагрузкой он падает, добавление ОЗУ обычно помогает больше, чем более быстрые диски.
Реплики, переключение при сбое и удаленные копии
Реплику, на которую вы будете переключаться при сбое, держите в той же локации и соединяйте через бесплатную приватную VLAN: задержка останется достаточно низкой, чтобы можно было позволить себе синхронную репликацию. Для аварийного восстановления добавьте асинхронную реплику в другой локации через WireGuard: при синхронном коммите через океан каждая транзакция ждала бы прохождения пакетов туда и обратно.
Для автоматического переключения при сбое нужен кворум. Patroni с etcd требует трех участников, и третьим может быть небольшой сервер.
Репликация — не резервное копирование: удаление таблицы почти мгновенно доходит до всех реплик. Храните резервные копии с восстановлением на момент времени (PITR), созданные pgBackRest, WAL-G или mariadb-backup, на другой машине, например на сервере хранения 64 ТБ в другом городе.
Инструменты, которые здесь хорошо работают
С root-доступом вы устанавливаете именно то, что нужно. Это проверенные решения для такой задачи.
PostgreSQL + PatroniPatroni автоматизирует переключение при сбое и управление репликами PostgreSQL, используя etcd или Consul в качестве хранилища консенсуса.
PgBouncerЛегкий пулер соединений, который сводит тысячи клиентских подключений к нескольким десяткам серверных процессов.
pgBackRestПараллельное инкрементное резервное копирование PostgreSQL с архивированием WAL на другой сервер или в S3-совместимый бакет.
MariaDB / MySQLInnoDB с Galera или GTID-репликацией; горячие резервные копии с помощью mariadb-backup или Percona XtraBackup.
ClickHouseКолоночная аналитическая СУБД, которая хорошо сжимает данные и распределяет сканирование и агрегацию по всем ядрам.
Valkey / RedisХранилище «ключ — значение» в памяти для кэшей, очередей и сессий с сохранением на диск через снапшоты RDB и журнал AOF.
Да — для любой базы данных, которую нельзя восстановить из другого источника. Сбойный бит в ОЗУ может попасть на диск в составе страницы, которая выглядит вполне корректной, а затем разойтись по всем репликам и резервным копиям. ECC исправляет однобитовые ошибки и сообщает о двухбитовых. Во всех тарифах на EPYC используется ECC; в тарифах Ryzen из линейки «Производительные» стоит DDR5 без ECC — для кэшей и stateless-приложений это нормально, но для основной базы данных это менее надежный выбор.
Что выбрать для базы данных: RAID 1, RAID 0 или ZFS?
На основном сервере оставьте RAID 1, который используется по умолчанию: он переживет отказ NVMe-диска на время замены, а замену по нашему SLA мы стремимся выполнить в течение четырех часов после диагностики. RAID 0 вдвое увеличивает емкость и скорость записи, но при отказе одного диска теряется все, поэтому используйте его только для реплик, которые можно пересоздать. ZFS добавляет контрольные суммы, сжатие и снапшоты, но взамен требует настройки recordsize и ARC.
Как перенести существующую базу данных на новый сервер?
Для PostgreSQL настройте новый сервер как потоковую реплику с помощью pg_basebackup, дождитесь, пока она догонит основной сервер, а затем во время короткой паузы в записи повысьте ее до основного (promote). С MySQL и MariaDB схема та же: копия через mariadb-backup или XtraBackup плюс репликация. Логические дампы проще, но на больших базах работают медленнее и требуют простоя, который растет вместе с объемом данных.
Какой тариф подходит для ClickHouse?
ClickHouse распределяет сканирование по всем ядрам и выигрывает от высокой пропускной способности памяти, поэтому для больших таблиц естественный выбор — EPYC 9354P: 32 ядра, 12-канальная DDR5 и 384 ГБ. Для небольших аналитических нагрузок подойдет EPYC 7443P. Данные в столбцах часто сжимаются до малой доли исходного объема, поэтому на 2 × 3,84 ТБ NVMe помещается больше данных, чем можно подумать, глядя на эту цифру.
Можно ли разместить приложение и базу данных на одном сервере?
Да, и на одной машине каждый запрос обходится без лишнего сетевого перехода. Сначала выделите базе данных фиксированный объем памяти, остаток отдайте приложению, а тяжелые воркеры, если они конкурируют за ресурсы, закрепите за отдельными ядрами. Разнесите их по разным серверам, когда приложению понадобится горизонтальное масштабирование, а базе — реплика: благодаря приватной VLAN связь между ними не будет проходить через интернет.
Готовы развернуть?
Выберите один из рекомендуемых серверов в наличии — он может быть готов к работе менее чем за 2 минуты, с оплатой с баланса и без платы за установку.
Это единственный способ вернуть доступ к аккаунту, если вы забудете пароль или потеряете устройство для двухфакторной аутентификации. Показать его повторно мы не сможем.