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

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

Одно крайне важное исправление для нового хранилища: метаданные записывались некорректно, когда размер заполненной области метаданных превышал 4 ГБ, из-за простой и глупой ошибки переполнения 32-битной целочисленной переменной. 🤦 Это приводило к повреждению метаданных и отказу OSD стартовать при следующем запуске.

Баг затрагивал только новое хранилище (meta_format=3) и только OSD с размером области метаданных больше 4 ГБ. Вы можете проверить размер области метаданных своих OSD, проверив data_offset в выводе команды vitastor-disk read-sb /dev/vitastor/osdXX-data для однодисковых OSD или с помощью команды blockdev --getsize64 /dev/vitastor/osdXX-meta для гибридных OSD.

Если баг затрагивает вас, рекомендуется:

  • Установить обновлённые пакеты без перезапуска OSD
  • Перезапустить OSD по одному
  • Если при перезапуске OSD начинает идти восстановление “has_degraded” PG - дождаться его завершения перед перезапуском следующего OSD
  • Если OSD падает при запуске с ошибкой “double-claimed block” или “metadata is corrupt or too old” - очистите и пересоздайте его (vitastor-disk purge /dev/vitastor/osdXX-data, потом заново vitastor-disk prepare) и, опять-таки, дождитесь окончания восстановления “has_degraded” перед переходом к следующему OSD

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

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

Исправления нового хранилища

  • Исправлен возможный в неудачных случаях очень медленный (часовой и более) запуск OSD
  • Исправлена валидация мусорных записей при запуске, в некоторых случаях мешавшая запуску OSD
  • Исправлен нерабочий small_write_throttling, приводивший либо к зависаниям, либо к падениям OSD
  • Исправлена возможная в некоторых ситуациях с EC ошибка “different fact_versions returned from subops”
  • Добавлена опция для восстановления при повреждении части метаданных: skip_corrupted_meta_entries
  • По умолчанию отключены записи через намерение (даже 4k) для гибридных OSD для лучшей буферизации записи

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

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

  • Исправлена некорректная работа csum_block_size > 0 с атомарными записями в новом хранилище (в этом случае почти все атомарные записи генерировали некорректные контрольные суммы)
  • Исправлена случайно возникающая ошибка генерации PG мониторами с сообщением “problem is infeasible or unbounded” из-за отсутствия ожидания полного чтения вывода lp_solve
  • Удалена одна из оптимизаций в порционном изменении числа PG, добавленном в 3.0.2, потенциально приводящая к повреждению состояния OSD в памяти при обработке нескольких последовательных очень быстрых запросов изменения числа PG
  • Исправлено разрастание статистики ввода-вывода инодов в OSD с новым хранилищем из-за нерабочей очистки статистики удалённых инодов.
  • Улучшено покрытие тестами нового хранилища и исправлено нескольких мелких проблем:
    • Включение/выключение параметра used_for_app на пуле некорректно пересчитывало статистику занятого места
    • Проверка корректности метаданных объектов при запуске OSD отвергала некоторые корректные последовательности событий, из-за чего OSD мог не стартовать
    • В редких случаях активация PG в EC-пулах могла не проходить с ошибкой -16 (EBUSY) при запросе стабилизации уже стабильной записи
    • Теоретически в редких случаях метаданные могли записаться некорректно при нехватке места во время обработки запроса стабилизации записи
  • Исправлена ошибка генерации PG мониторами при наличии в дереве хостов с именем, приводимым к javascript-числу (например, “04e278988710”) :D
  • Исправлено обрезание вывода vitastor-cli dd, иногда случавшееся при записи в стандартный вывод
  • Исправлена теоретически возможная утечка объектов соединений при заполнении кольца io_uring
  • Исправлена утечка объектов соединений RDMA-CM
  • Исправлены падения при data_block_size < 32KB (вариант настройки бесполезный, но всё же) (#113)

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

Выпущена версия 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 Читать далее →

Все записи