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

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.2.3

Очередной корректирующий релиз, главное нововведение - в дополнение к хаос-тесту блочного хранилища добавлен хаос-тест PG, то есть логики OSD, выполняемой на одной PG. Тест проверяет консистентность данных по модели, корректной для блочных хранилищ, так как стандартные модели изоляции транзакций для них не всегда применимы. Подробное описание логики теста PG можно прочитать в документации.

Осталось добавить хаос-тесты клиентской библиотеки и сетевого слоя, и Vitastor будет полностью покрыт хаос-тестами!

Помимо нового хаос-теста и исправлений проблем, найденных им, релиз также содержит исправления от Changwei Ye, Юрия Лунева и Алексея Шабалина - спасибо за вклад в проект.

  • Корректность данных
    • Исправлены повторы фиксации данных на стороне клиента в узких кейсах при падениях OSD и одновременной переконфигурации PG (применимо к конфигурациям с явными fsync).
    • Исправлена возможная некорректная пометка реплицированных объектов как HAS_INCOMPLETE при частично успешной записи с перемещением объекта.
    • Исправлена, по-видимому, очень старая и назойливая проблема зависания PG в EC-пулах в состоянии STOPPING/REPEERING - PG зависали, если в очереди одновременно была активная операция записи и начального коммита/отката прошлой незавершённой записи объекта.
    • Исправлен некорректный расчёт состояний EC-объектов при запуске PG, в редких ситуациях приводящий к HAS_INCOMPLETE или к оставлению мусорных частей объектов на OSD.
    • Исправлен возможные ошибки чтения при параллельной записи или удалении того же объекта, выглядящие, как будто объект повреждён.
    • Исправлены возможные крайне редкие ошибки отправки состояний PG в etcd, если запуск PG обгонял взятие блокировки OSD (lease) в etcd.
    • Исправлен теоретически некорректная пометка реплицированных объектов всегда как DEGRADED при изменениях состояния объекта, что, однако, не приводило к реальным проблемам по причине использования только в scrub и пометке записи как частично успешной, где объект, как правило, действительно являлся DEGRADED.
    • Исправлены ошибки чтения с падением соединения из образов с больше, чем 255 снимками.
    • Параллельное удаление нескольких снимков одного и того же образа из двух процессов теперь завершается ошибкой, а не порчей цепочки снимков.
  • Новое и старое хранилища
    • В новом хранилище исправлена регрессия 3.2.0 с зависанием больших записей после одной redirect_intent записи с ожиданием fsync в конфигурациях без immediate_commit.
    • В новом хранилище исправлено несколько ошибок потенциальной потери данных в узких случаях, найденных хаос-тестами - некорректная обработка контрольных сумм пустых записей, некорректная запись объекта после его отката до нулевой версии, переиспользование после перезапуска номеров последовательности, меньших, чем completed_lsn в заголовке.
    • В старом хранилище исправлено редкое зависание OSD при удалении объекта.
  • Сеть и безопасность
    • Исправлена совместимость транспортного шифрования с некоторыми версиями OpenSSL, содержащими неисправленный баг 27302, из-за которого соль могла не сбрасываться и новые подключения могли ломаться с ошибкой «Handshake decryption failed» до перезапуска OSD.
    • TCP-сокеты теперь закрываются с помощью трёх вызовов SO_LINGER(1,0)+shutdown()+close(), чтобы точно гарантировать их очистку, т.к. предыдущий подход с одним close() снова оказался недостаточно стабильным - активные на сокете запросы в io_uring не очищаются при close().
    • Добавлены опции для QoS в RDMA-сетях с PFC: rdma_traffic_class, rdma_sl и rdma_set_flow_label.
    • Vault: при ошибках загрузки ключей из Vault клиент теперь предпринимает повторные попытки загрузки автоматически после таймаута, а не только при переконфигурировании пула.
    • Vault: исправлена ошибка чтения из клонов зашифрованных образов из-за того, что ключ родительского образа не загружался.
    • При включённом контроле доступа при создании клона теперь проверяется доступ на чтение к родительскому образу.
    • Клиент теперь предпринимает повторные попытки разрешения адресов etcd при ошибках DNS в рамках общих лимитов на повторы, а не убивает клиентский процесс.
  • VitastorFS
    • Ускорено удаление каталога, из которого ранее удалили много файлов, из-за сканирования избыточного числа ключей в БД.
    • Исправлена ошибка при перемещении каталога поверх другого пустого каталога.
  • vitastor-cli
    • fix и describe больше не зависают, если один из OSD недоступен: такой OSD пропускается с предупреждением, а код возврата говорит о неполном результате.
    • describe --inode показывает все объекты образа, а не один.
    • osd-tree падал при ошибке etcd.
    • ls --tree скрывал образы с отфильтрованным родителем.
    • ls-pgs печатал пустую таблицу вместо настоящей ошибки и показывал misplaced как degraded.
    • dd: копирование pipe’а без count= копировало только 1 МБ, не работал oflag=append, status=none и status=noxfer игнорировались, устройства вида /dev/mem не читались.
    • create-pool/modify-pool теперь отклоняют pg_size > 64 и переименование пула в занятое имя; правила level_placement можно сбросить пустым значением.
    • modify --resize молча принимал некорректный размер вроде «1.5G».
    • rm-data не проверял границы смещений.
    • Исправлены мелкие расхождения справки и документации с фактическим поведением.
  • Развёртывание
    • Принадлежность пользователю vitastor теперь выставляется для всех разделов с типом Vitastor, даже если они ещё не содержат корректный суперблок.
    • Исправлена сборка драйвера QEMU на версии QEMU с патчами из RHEL 9.1.
    • Исправлена мелкая утечка памяти при уничтожении драйвера QEMU.
    • Клиент теперь имеет режим работы с обработкой фатальных ошибок вместо молчаливого убийства всего клиентского процесса через exit(1). Новые версии драйвера QEMU используют этот режим и не должны ронять процесс QEMU при неудачном подключении диска; поведение старых версий оставлено без изменений.

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

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

Небольшой релиз с исправлениями ошибок.

  • Новое хранилище (спасибо Changwei Ye)
    • Исправлены ошибки отклонения компактизации в редких случаях, когда объект уже успели перезаписать снова
    • Снижена амплификация ввода-вывода суперблока, возникшая после предыдущих исправлений корректности
  • Исправлено возможное падение vitastor-cli rm с assert(rwo->todo == 1), появившееся в 3.2.1
  • Исправлен некорректный переход реплицируемых объектов в состояние INCOMPLETE после нескольких неудачных частичных записей
  • Исправлена ошибка “operation sequencing broken … expected num 2, got 3, stopping client”, возникающая при перегрузке кластера из-за флапов OSD

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

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

  • Блочные хранилища
    • В хаос-тест добавлено больше асинхронности, чтобы выявить больше проблем…
    • …и они исправлены (~6 в старом хранилище, ~9 в новом)
    • Исправлена проверка размера для journal_offset при разделяемом meta-устройстве (спасибо Changwei Ye)
  • Сетевой слой
    • Исправлена обработка zero-copy уведомлений, приходящих не по порядку (редкая, но в теории возможная ситуация)
    • Исправлено двойное вычисление контрольной суммы заголовка в режиме proto_checksums=full
    • Добавлена опция rxbounce для Windows-виртуалок с TCP и включёнными контрольными суммами
    • Сокеты остановленных соединений теперь закрываются раньше, чтобы предотвратить зависшие zerocopy-уведомления и медленное переключение при отказе (~15 мин вместо ~10 сек)
  • OSD
    • Убрано аварийное завершени при ошибках модификации локального хранилища (неактуально после добавления обработки ошибок записи)
  • CSI
    • Исправлен жизненный цикл NFS-демона VitastorFS (спасибо Дмитрию Наумову)
    • В CSI теперь используется более новый qemu-storage-daemon
  • vitastor-cli
    • Добавлена опция opool для dd
    • Исправлено: rm с «обратной» оптимизацией неверно удалял данные слоя перед переименованием, что могло приводить к некорректному чтению из дочерних образов при удалении снапшота старше последнего
    • Исправлено возможное зависание в merge и производных командах (rm, flatten)
    • Исправлены ошибки в OpenAPI-спецификации serve (спасибо Степану Работкину)
    • Исправлены возможные сегфолты в serve из-за некорректного разбора запроса (спасибо Vincent Schweiger)
    • Исправлен режим serve без HTTPS (спасибо обоим :))
  • Сборка
    • Исправлены сборки для не-x86, падавшие из-за неподдерживаемого xxhash x86dispatch
    • Во всех сборках принудительно включаются assert’ы, чтобы убрать зависимость от профиля сборки
    • Исправлена сборка драйвера QEMU с QEMU < 10.2

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

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

Это корректирующий релиз, и большая часть исправлений внесена благодаря новому подходу к тестированию: хаос-тесту блочного хранилища, который теперь запускается в CI при каждом изменении.

Также спасибо Юрию Лунёву из MIND Software за другую часть исправлений.

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

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

Наконец, релиз на тему безопасности!

Новые функции:

  • Полная поддержка функций безопасности:
    • Транспортное шифрование etcd (TLS/mTLS)
    • Транспортное шифрование OSD (AES-GCM), по умолчанию только для заголовков, поэтому очень быстрое
    • Сквозное шифрование данных образов (AES-XTS)
    • Опциональная поддержка хранения ключей AES-XTS во внешнем Vault
    • Аутентификация по сертификатам
    • Опциональная поддержка прав доступа пользователей с контролем доступа на стороне etcd и OSD
    • Транспортные контрольные суммы xxhash3 (по умолчанию только для данных)
  • Новая опция контрольных сумм на диске: xxh3_32 - xxhash3, суженный до 32 бит
  • Поддержка DNS-имён для адресов etcd и Vault
  • Режим HTTP API-сервера vitastor-cli serve
  • Смесь CAS и не-CAS записей в рамках одного экземпляра клиента теперь разрешена и работает корректно
  • make-etcd теперь может инициализировать весь кластер, копируя конфигурацию и запуская все ноды через ssh
  • Закончена поддержка Debian 10 (Buster) и CentOS 7, пакеты более обновляться не будут

Читайте подробную документацию функций безопасности по ссылке: https://vitastor.io/docs/usage/security.html

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

Все записи