Skip to content

DVR кластера

Архив живёт на дисках стримеров, а решения по нему принимаются на весь кластер: место кончается на одной машине, а переезжает стрим на другую. Раздел DVR кластера отвечает на два вопроса: сколько места под архив есть и чем именно оно занято. Настройка самих дисков — на странице стримера, запись и воспроизведение архива — на странице Архив DVR.

Стримеры без DVR-хранилища в раздел не попадают: ни в список, ни в суммы. Если хранилище не настроено ни у кого, вместо таблицы вы увидите «Ни у одного стримера кластера не настроено DVR-хранилище».

Три ведра занятого места

Занятое место всегда разложено на три части, и это главное, что даёт раздел. Одни и те же три ведра считаются и для диска, и для стримера, и для всего кластера:

  • Актуальный — архив стримов, которые стример обязан писать по своей конфигурации. Это полезное занятое место.
  • Orphan — архив, который на диске лежит, а конфигурации стрима под него нет. Обычно это остатки от удалённых или переехавших стримов.
  • Неизвестное — остаток занятого, который каталог не объясняет: файлы, никем не просканированные, и резерв файловой системы.

Шкала занятого идёт слева направо именно в этом порядке, поэтому «место съедено не тем» видно как хвост справа.

Проблемным диск считается не по факту заполнения. Диск, забитый актуальным архивом, — это ретенция, которая работает как задумано. Проблема — когда диск заполнен от 98 %, а актуального архива на нём меньше 90 %: место занято orphan'ом или неизвестным. Такие диски выделяются красной рамкой, а стримеры с ними идут в начале списка.

Обзор кластера

Верхняя карточка — суммы по всем стримерам: Ёмкость, Актуальный, Orphan, Неизвестное и число стримеров с архивом, плюс общая шкала занятого.

Ниже — строка на стример: имя (ссылка на его диски), шкала занятого, число дисков, число проблемных и «занято / ёмкость». Данные перечитываются каждые 5 секунд.

Обзор кластера: суммы по вёдрам и строка стримера с тремя дисками

Когда разбивке нельзя верить

Разделение на актуальный и orphan строится по карте стримов, а она есть не всегда. Раздел об этом честно предупреждает, и вместо неверной разбивки показывает занятое место целиком:

  • Разбивка считается — стример пересчитывает агрегаты каталога в фоне, первый проход ещё не закончился. Подождите.
  • Разбивка недостоверна: конфигурация не применена — стример не применил конфигурацию записи. Без карты стримов весь архив выглядит orphan'ом, поэтому разбивка не показывается вовсе. Чинить надо не архив, а доставку конфигурации — см. Диагностику стримера.
  • Размер досчитывается: N блобов — часть блобов ещё без досчитанного размера, их байты временно числятся неизвестным занятым.

Не принимайте решений об очистке, пока разбивка не в состоянии «готово»: orphan, посчитанный при неприменённой конфигурации, — это не orphan.

Диски одного стримера

Клик по имени стримера открывает его диски карточками: путь, шкала занятого с той же разбивкой, доля занятого и ёмкость.

Диски стримера: у каждого своя шкала с разбивкой на три ведра

Диск, с которого нечего показывать, вместо шкалы показывает состояние:

  • диск недоступен — стример до него не достучался.
  • не смонтирован — запись на системный раздел запрещена — по пути архива оказался корневой раздел, а не том. Запись отклонена намеренно: проверка монтирования включена по умолчанию.

Кэш архива

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

Кэш-диск в списке дисков стримера — другая карточка, а не архивная с нулями. Трёх вёдер занятого у него не бывает вовсе: он не хранит ни актуального архива, ни orphan'а, а долю занятого считать по нему нечестно — она отражала бы раскладку записи, а не здоровье диска. Вместо этого карточка показывает:

  • Кэш архива — подпись роли под путём диска.
  • Кэш N / лимит N — сколько кэш занял и сколько ему позволено. Если лимит не задан — без лимита: кэш ограничен только свободным местом тома.
  • Попаданий/с — скорость чтений, обслуженных этим диском. Именно она показывает мёртвый диск, в который ничего не попадает, и перекос раскладки.

Диски стримера-эджа: карточка кэш-диска рядом с архивными

Красная рамка и надпись Свободного места меньше порога: вытеснение не поспевает за записью означают, что кэш пишется быстрее, чем освобождает место. Лечится это лимитом кэша, а не очисткой вручную.

В обзоре кластера у кэша два своих ридаута:

  • Кэш архива — суммарный объём кэша по всем стримерам.
  • Хитрейт кэша — доля архивных чтений, обслуженных кэшем. В строке стримера то же самое короче: Кэш N и кэш N %.

Хитрейт — это доля попаданий среди всех архивных чтений: обслуженных кэшем, обслуженных архивным диском и ушедших к удалённому источнику. Выдача живого эфира и фоновая догрузка следующего фрагмента в него не входят — иначе догрузка завышала бы хитрейт тем сильнее, чем лучше работает.

Если кэша в кластере нет вовсе, этих ридаутов нет тоже: нули читались бы как «кэш есть и не работает».

Механика самого кэша — допуск, вытеснение по давности обращения, работа эджа без архивных дисков — описана в документации Sapsan.

Пересборка индекса

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

Запрос записывается в конфигурацию стримера, а не отправляется ему напрямую. Поэтому он переживает недоступность стримера: машина офлайн — запрос дождётся её возвращения. Из этого же следует отдельная фаза «запрос записан, но стример его ещё не подтвердил».

Карточка пересборки индекса в исходном состоянии

Состояния, которые показывает карточка:

  • Пересборка индекса не запускалась — исходное состояние.
  • Запрос записан, стример его ещё не подтвердил — запрос лежит в конфигурации, стример до него не дошёл.
  • Идёт: блобов N, добавлено N, пересканировано N — обход идёт. Пересканированные блобы дороже остальных: у них перечитывается MP4 целиком, этим и объясняется скорость.
  • Последняя пересборка завершена N назад, добавлено блобов: N — обход закончился.
  • Последняя пересборка прервана N назад — обход не дошёл до конца.
  • Конфигурация стримера недоступна: записать запрос некуда — кнопка выключена, пока конфигурация не читается.

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

Единственный запрет на запуск — уже идущий обход. Пересборка не мешает записи и воспроизведению архива.