Быстрая и простая распределённая
программная СХД

Vitastor

  • Распределённая программная СХД (SDS)
  • ...но Быстрая 🚀 — отклик 0.1 мс
  • ...и Простая ✌️ — 60 тыс. строк, а не 1 млн
  • Разработана с нуля в России

Программная СХД (SDS)

ПО, объединяющее обычные серверы с обычными дисками в единое масштабируемое отказоустойчивое хранилище, имеющее расширенные функции

Зачем SDS IaaS/PaaS провайдерам?

  • Лёгкость масштабирования
  • Сохранность данных клиента
  • Снижение затрат за счёт гиперконвергентности
  • Отсутствие "микроменеджмента" серверов
  • Различные классы хранения (SSD, HDD)

Но многие SDS — это накладные расходы

Накладные расходы

  • Q=1 — лучший возможный отклик
  • 4 кб запись на SSD — 0.04 мс
  • 4 кб запись в Ceph — от ~ 1 мс
  • Внутренние SDS облаков – ± аналогично
  • 2400 % накладные расходы !

Vitastor

  • ~ 0.1 мс отклик при репликации
  • ~ 0.2 мс отклик при EC
  • 3-8 гбайт/с на клиента (ВМ)
  • ~ 400000 оп/с на клиента
  • Всего ~1 ядро CPU на NVMe диск
  • Низкое (50%) влияние ребаланса

Vitastor — протоколы

  • Блочный доступ (диски ВМ, контейнеры):
    Kubernetes, Proxmox, OpenNebula, OpenStack и др.
  • VitastorFS (NFS) — кластерная POSIX ФС
  • Объектное хранение (S3) — на базе Zenko CloudServer

Функции

  • Репликация, коды коррекции ошибок (N+K)
  • Любые диски: SSD/NVMe, HDD, SSD+HDD
  • Гибкое распределение данных
  • Поддержка RDMA / RoCEv2
  • Быстрые снимки и клоны
  • Быстрые контрольные суммы, скрабы
  • Мониторинг
  • Kubernetes оператор
  • И другие...

Симметричная архитектура

  • Симметричная распределённая, Ø SPOF
  • Блочный базовый слой
  • Равномерное распределение нагрузки
  • Транзакционная запись → защита от потери данных
  • Оптимизация под современные SSD/HDD

Простота сопровождения

  • Малое число компонентов
  • Прозрачность метаданных в etcd
  • Минимум внешних зависимостей
  • Компактная реализация:
    ~60k строк кода (Ceph ~1M)
  • Поддержка нестандартных архитектур (E2K)

Лицензирование

  • Собственная Copyleft-лицензия VNPL
  • Свободное использование в OpenSource среде
  • Закрытые сервисы требуют коммерческой лицензии
  • Техническая и архитектурная поддержка от автора

Контакты

Блочный доступ

С поддержкой всех основных основанных на KVM систем виртуализации, а также контейнеров: OpenNebula, OpenStack, Proxmox VE, Kubernetes

Кластерная ФС

Собственная реализация масштабируемой кластерной POSIX-совместимой файловой системы, монтируемой по NFS 3.0

Объектное хранилище (S3)

На базе Zenko CloudServer

Интересное — последние записи

Выпущена версия Vitastor 3.0.2

  • Использование Antietcd теперь официально разрешено и безопасно: теперь используется исправленная версия Antietcd, проходящая Jepsen-тесты на сериализуемость транзакций.
  • Исправлен огромный баг в контрольных суммах в старом хранилище: некорректные контрольные суммы для мелких начальных записей. Баг затрагивал запросы записи размером ровно csum_block_size (по умолчанию 4 КБ) в новые (пустые) объекты и генерировал для них некорректные контрольные суммы. Кроме того, такая запись была очень медленной, так как некорректная сумма CRC32 считалась от 4 ГБ нулей. Если после этого начальный мелкий блок не перезаписывался как часть большего запроса записи, он был нечитаемым, хотя сохранённые на диске данные были корректны. Баг затрагивал все версии с 1.0.0, или с 2.3.0, потому что до 2.3.0 vitastor-disk не позволял фактически включить контрольные суммы из-за другого бага. O:-)
  • Ликвидированы таймауты и падения OSD из-за долгого блокирования обработки событий перемещением объектов между старыми и новыми PG в памяти OSD при изменении числа PG в пуле и просто при запуске OSD с большой базой (например, с заполненным 8 ТБ SSD). Проблема больше не должна проявляться, так как OSD теперь применяет изменения числа PG порциями с паузами между порциями.
  • Исправлено возможное “залипание” пула в состоянии паузы при отмене изменения числа PG.
  • Исправлено возможное падение OSD с ошибкой деления на ноль при попытке обработки операции до применения настройки числа PG к хранилищу в памяти.

25.01.2026 Читать далее →

Маленький, а уже с изоляцией транзакций: пишем Jepsen-тесты для Antietcd

Начиная с версии 1.7.0, в Vitastor есть встроенный заменитель etcd — Antietcd.

Он реализован на node.js и очень простой — занимает буквально пару тысяч строк кода. Конечно, он умеет чуть меньше, чем etcd, но его функционала абсолютно достаточно для полноценной работы кластера Vitastor — все основные функции присутствуют, а кое в чём он даже лучше, чем etcd — например, Antietcd позволяет не хранить на диске “временные” данные.

Однако до последнего времени не существовало ответа на вопрос — правда ли его можно использовать в продуктиве? Точно ли он корректен?

Ниже история изысканий ответа. История со счастливым концом :)

22.01.2026 Читать далее →

Выпущена версия Vitastor 3.0.1

Важные исправления

  • Флаг RWF_ATOMIC отключён по умолчанию, так как Linux некорректно требует, чтобы все атомарные записи имели длину, равную степени двойки, и смещение, кратное длине. Подробности: use_atomic_flag
  • Исправлены нерабочие снимки в другой пул - после снятия снимка клиент продолжал всегда читать старые данные
  • Исправлена работа опции level_placement (сломанная в 2.2.0)
  • Исправлены значения возврата запросов записи с CAS (сломаны в 2.4.4, из-за чего также перестали работать невыровненные запросы записи в VitastorFS)
  • Исправлена возможная потеря части параллельных невыровненных записей в VitastorFS
  • Исправлено возможное чтение старых данных во время незавершённых атомарных (intent) записей в новом хранилище
  • Добавлены тесты для всех вышеуказанных проблем

22.12.2025 Читать далее →

Выпущена версия Vitastor 3.0.0

Единственная, но огромная, новая функция: добавлено новое лог-структурированное хранилище метаданных, о котором был рассказ в докладе на конференции Moscow Highload’2025 (его можно посмотреть здесь).

Теперь это хранилище по умолчанию для новых OSD. Старое хранилище также поддерживается и вы можете выбрать его для новых OSD с помощью параметра vitastor-disk prepare --meta_format 2.

OSD, инициализированные в предыдущих версиях, также продолжат работать без изменений.

Немножко документации: atomic_write_size, meta_format.

06.12.2025 Читать далее →

Выпущена версия Vitastor 2.4.4

  • Добавлена команда vitastor-kv rescue, выводящая содержимое всех читаемых блоков базы, вне зависимости от структуры Б-дерева, и таким образом помогающая восстановить повреждённую БД.
  • Упрощён выбор первичных OSD - теперь вместо хеша используется просто номер PG. Это улучшает распределение первичных OSD и позволяет достичь лучших скоростей чтения.
  • Исправлено зависание, воспроизводящееся в vitastor-kv-stress при параллельных листингах и переоткрытиях базы.
  • В клиентской библиотеке исправлена работа CAS-записей без immediate_commit. Исправление достаточно для корректной работы vitastor-kv в пулах без immediate_commit.
  • Исправлены вызовы NFS ACCESS для сломанных файлов без инода - теперь к ним разрешается доступ суперпользователя, чтобы их можно было удалить.
  • Исправлена работа параметра vitastor-kv-stress --runtime.
  • Исправлена некорректная буферизация вывода в выводе дампов vitastor-kv, приводившая к некорректному JSON в дампах.
  • Исправлена запись мусора из неинициализированной памяти в пустое место в VitastorKV базах.
  • Код частично отрефакторен в рамках приготовлений к релизу нового лог-структурованного хранилища метаданных.
  • Ошибка assert(done != expected), предположительно вызываемая проблемами в ядре Linux с отправкой TCP без копирования (zero-copy TCP send), заменена на более понятное сообщение.

01.12.2025 Читать далее →

Все записи