Привет, Хабр. В ноябре 2025 года наша команда выпустила релиз TROK SDS. Это программно-определяемое хранилище корпоративного уровня. Первые клиентские успехи уже есть, но пока под NDA, про это расскажем чуть позже. А сегодня хотелось бы просто поразмыслить над темой хранения данных и объяснить, что и как. 

Спойлер тем, кто не хочет читать много букв: TROK SDS создавался для тех, кто не хотел и не хочет покупать дорогие аппаратные СХД или танцевать с бубном вокруг сложных решений вроде Ceph. В основе лежит синхронная репликация данных между узлами. При отказе оборудования система автоматически восстанавливает реплики без вмешательства администратора. Экономия достигается за счет работы на стандартных серверах x86_64, без специализированного железа. Управление через веб-интерфейс. Разворачивается за 40 минут опытными руками из плеч. 

Пролог: артефакт надежного хранилища

Это, конечно, вопрос из серии «спасибо, кэп», но без него никуда. Данные в современных инфраструктурах – основа бизнес-процессов. Отказ или потеря доступа к ним даже на 10 минут способны парализовать сервисы, сломать цепочки поставок и остановить производство. Соответственно, чтобы этого не произошло, любой компании нужно найти сервис, закрывающий сей опасный момент. 

А что было на рынке? 

Мы смотрели на доступные варианты и видели три условных пути, каждый со своими «сюрпрайз-сюрпрайз».

  • Аппаратные СХД требовали крупных первоначальных вложений и, мягко говоря, подсаживали заказчика на конкретного вендора. Масштабироваться выходило дорого и не быстро.

  • Управление Ceph тот еще квест. В игру вступают высокая задержка, непредсказуемо�� поведение при восстановлении и постоянная необходимость в опытных инженерах. 

  • Проприетарные программные платформы тоже не панацея. Эксплуатация – в копеечку, а гибкость условная, хоть и решают часть задач.

Исходя из этой картины, мы и задумали TROK – некий оптимальный вариант между всеми сценариями выше. Причем нам было важно, чтобы он подходил компаниям из разных отраслей. 

Для облачных провайдеров и дата-центров он может стать идеальным фундаментом, позволяя строить отказоустойчивые частные/публичные облака с линейным масштабированием и гарантированной изоляцией клиентов.

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

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

Промышленным предприятиям решение подойдет для работы с системами управления производством и для создания долгосрочных архивов телеметрии или инженерных данных. 

IT-компании и интеграторы оценят возможность быстро разворачивать надежную продуктивную инфраструктуру для заказчиков, экономя время + ресурсы.

Как мы делали TROK

Фактически, мы создавали SDS под самые хардкорные сценарии: виртуализацию, базы данных и корпоративные сервисы, где простои и нестабильные задержки просто недопустимы. Все началось с выбора базовой технологии.

Выбор архитектуры

На столе было два кандидата: распределенная файловая система или работа с виртуальным блочным устройством. Мы стартовали с блочного подхода и получили желанные низкие задержки с высокой производительностью для сценариев с интенсивным вводом-выводом.

DRBD vs RBD

Следующим шагом было сравнение двух технологий виртуальных блочных устройств: DRBD и RBD (от Ceph). Мы собрали два стенда на идентичном «железном» кластере. Результаты были показательными.

DRBD демонстрировал меньшие задержки как на записи, так и на чтении, а потребление CPU и оперативной памяти было на порядок ниже. Но ключевым стал вопрос надежности. В RBD части реплик данных размазаны по многим серверам, и если в строю остается лишь один, данные не собрать. В DRBD же для восстановления данных достаточно работы хотя бы одного сервера с актуальной репликой. 

Получилась система без избыточной сложности и с предсказуемым поведением.

Свой контроллер

Финальным решением был выбор между созданием форка проекта Linstor (управляющий слой для DRBD) и разработкой собственного контроллера с нуля. Форк отпал по нескольким причинам: Java как язык, «заразная» лицензия GPL v3 и некоторые неоптимальные архитектурные решения от LINBIT. Поэтому мы написали свой контроллер и агент для управлени�� узлами хранения. На Golang. 

Антон Ботвинников, директор по продукту TROK, после успешного тестирования контроллера
Антон Ботвинников, директор по продукту TROK, после успешного тестирования контроллера

блочная репликация на уровне ядра + централизованный контроллер = архитектура TROK

Состав поставки TROK 1.1

Имя файла

Описание

trok-installer

Консольный установщик пакетов

trok-installer-gui

Графический установщик пакетов

trok-webui

Графический веб-интерфейс управления СХД

drbd-dkms

Модуль ядра DRBD

drbd-ueficert

UEFI Secure Boot сертификат для подписи DRBD-модуля

drbd-module-source

Исходники DRBD-модуля ядра

coccinelle

Инструмент для автоматизированного анализа и преобразования исходного кода на C (включен как зависимость для drbd-dkms)

drbd-reactor

Компонент для автоматического управления ресурсами DRBD в Linux, обеспечивающий интеллектуальную реакцию на события в кластере

drbd-utils

Утилиты для управления DRBD-устройствами

trok-controller

Центральный программный контроллер СХД TROK (управляет всеми узлами (Worker) и обеспечивает согласованность DRBD-устройств)

trok-auth

Сервис аутентификации СХД TROK

trok-cp-endpoint

Сервис обработки API-запросов СХД TROK

trok-worker

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

nvmetcli

Оболочка администрирования для хранилищ NVMe

python3-natsort

Библиотека Python, сортирующая списки с использованием «естественного порядка» сортировки (включена как зависимость для linstor-client)

python-kmodpy

Модуль-оболочка Python ctypes для libkmod, предоставляющий общие операции с модулями ядра Linux: перечисление установленных модулей, modprobe, modinfo, show_depends и rmmod (включен как зависимость для drbd-dkms)

resource-agents

Набор скриптов и утилит для управления ресурсами в кластерах высокой доступности

libqb0

Реализация библиотеки libqb (включена как зависимость для resource-agents)

installation-guide.pdf

Руководство по установке TROK

trok-controller-meta

Мета-пакет для установки ноды контроллера (содержит в себе только зависимости)

trok-worker-meta

Мета-пакет для установки ноды сателлита (содержит в себе только зависимости)

trok-gateway-meta

Мета-пакет для установки trok-gateway (содержит в себе только зависимости)

trok-combined-meta

Мета-пакет для установки комбинированной ноды (содержит в себе только зависимости)

Роли узлов в кластере

В кластере есть две ключевые роли, которые взаимодействуют друг с другом, –  Контроллер и Воркер. Работает это довольно просто.

  • Controller – мозг системы. Он полностью управляет конфигурацией всего кластера, распределяет ресурсы между узлами, зорко отслеживает отказы оборудования и, обрабатывает команды администратора. 

  • Worker – исполнитель на каждом узле хранения. Можно сказать, что воркер обеспечивает выполнение плана на местах и у него нет право на ошибку. 

Для небольших инсталляций, где нет смысла раздувать архитектуру, мы сделали Combined-режим. В нем один узел совмещает в себе обе роли.

Система TROK состоит из нескольких серверных и клиентских компонентов
Система TROK состоит из нескольких серверных и клиентских компонентов

Квесты для TROK

Гибкая архитектура нашего продукта отлично ложится на разные типы нагрузок. Например, для виртуализации и частных облаков хранилище будет надежным бэкендом. Через iSCSI или NVMe-over-TCP к нему легко подключаются виртуальные диски для таких гипервизоров, как KVM, Proxmox, VMware или Hyper-V.

Для сервисов 24/7 и баз данных вроде PostgreSQL, Oracle или MongoDB, TROK может стать подходящим инструментом в условиях, где критически важна устойчивость к сбоям дисков и сети (тонкий намек на банковский сектор). 

Для задач резервного копирования и архивного хранения наш продукт легко интегрируется с популярными системами вроде Veeam, Bacula или CommVault. Его можно подключить как NFS- или iSCSI-цель. Причем, для доступа к файловому интерфейсу не требуются дополнительные компоненты (в отличие от многих аналогов).

Облачные провайдеры и MSP-компании могут использовать TROK как основу для блочного хранилища в публичных/гибридных облаках. REST API и веб-интерфейс позволяют автоматизировать создание-подключение томов, а горизонтальное масштабирование происходит с автоматическим перераспределением нагрузки при добавлении новых узлов.

Что по лицензии?

Мы подобрались к самой интересной части – лицензированию. Здесь не по модели Нолана «сон внутри сна и внутри сна», максимально прозрачно. Можно выбрать либо подписку, либо бессрочную лицензию + техническую поддержку  на 12/24/36 месяцев. 

Клиент платит только за объем данных, которые собирается хранить. Пусть будет в качестве примера 10 Тб. Можно спокойно создавать серверы и диски в кластере до бесконечности на этот объем, потому что лицензия не ограничивает количество узлов, лишь бы укладывались в оплаченный лимит по данным. Если нужно больше места, то лицензию придется расширять. Согласитесь, все по-честному. 

Жмем кнопочку и…

Ниже сокращенный путь от ISO до готового блочного устройства. Все, как обещали в начале обзора, – около 40 минут.

  1. Установка компонентов. Смонтировать ISO, запустить инсталлятор, выбрать роль узла (Controller / Worker/ Combined). После установки доступен веб-интерфейс администратора.

  2. Настройка сети. Все узлы должны находиться в одной локальной сети без NAT. Рекомендуется сеть от 10 Гбит/с и выше, MTU 9000, задержка между узлами до 3 мс.

  3. Создание ресурса. Через веб-интерфейс задать имя и объем (по умолчанию создается ресурс с 3 копиями).

Пара скриншотов из рабочего интерфейса администратора.

Скриншот из дашборда с настроенными узлами
Скриншот из дашборда с настроенными узлами
Скриншот из дашборда с пулами хранения
Скриншот из дашборда с пулами хранения

Требования к железкам, чтобы работало

Минимальная инсталляция, чтобы получить баланс надежности и производительности – конфигурация из двух узлов. Если откажет один сервер, кворум сохранится, а данные останутся доступными.

  • Версии Astra Linux 1.7х (1.7.6, 1.7.6uu1, 1.7.6uu2, 1.7.7, 1.7.7uu1, 1.7.7uu2, 1.7.8, 1.7.9;), 1.8.х (1.8.1, 1.8.2, 1.8.2uu1, 1.8.3, 1.8.3uu1, 1.8.4);

  • Ядра Linux: 5.4.x, 5.10.x, 5.15.x, 6.1.x, 6.12.x; 

  • 2 CPU, 8 ГБ, RAM, 20 ГБ HDD;

  • Архитектура x86-64 или amd64.

Финалочка

Если попробовать описать TROK одной фразой, получится что-то вроде «золотой середины» в сегменте корпоративных хранилищ. Наш директор по продукту, Антон Ботвинников, дополнительно проводит аналогию с волейбольной командой. В смысле, что если один из игроков упадет, то его подстрахует другой и отобьет мяч. При этом, команда не стоит миллионы и готова оптимизироваться на ходу.

В конечном счете, любая система хранения – это фундамент. Он должен быть крепким, незаметным и не требовать ежедневного подкручивания гаек. Что-то вроде хорошего Wi-Fi: когда все работает, о нем не вспоминают. 

В общем, пробуйте, спрашивайте, критикуйте. Комментарии открыты)

___

P.S. а когда все-таки Ceph и больше ничего?

Несмотря на все его сложности, Ceph остается сильным инструментом в некоторых специфичных сценариях. Например, когда необходимо масштабироваться до сотен узлов в едином пространстве для множества команд и сервисов. Или когда проект целиком завязан на объектное хранение и развитую S3-экосистему – здесь, будем объективными, Ceph RGW дает большую гибкость. Наконец, если нужна глубокая, почти точечная кастомизация политик хранения и поведения кластера под нагрузкой, возможности Ceph действительно широки.

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