Перейти к содержимому
Последнее обновление

Управление дисковым пространством

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

Если не контролировать заполнение дисков с данными в Doris, при полном заполнении диска процесс BE аварийно завершается. Doris отслеживает использование и свободное пространство на каждом диске и задаёт разные пороги заполнения, при достижении которых ограничиваются операции в системе. Это позволяет по возможности избежать полного заполнения дисков.

Сценарии применения​

СценарийНа что обратить внимание
Регулярное планирование ёмкостиРазобраться в механизме порогов FE/BE и заблаговременно выявлять нехватку места
Заполнение диска приближается к верхнему порогуНастроить пороги FE и не допускать дополнительного расхода места при балансировке или восстановлении
Заполнение диска достигает критического порогаВыяснить причину блокировки записи и освободить место
BE не запускается из-за полного заполнения дискаСрочно удалить временные файлы и восстановить работу процесса
Быстрое сокращение затрат при использовании таблиц с несколькими репликамиВременно уменьшить число реплик и вернуть его к прежнему значению после восстановления

Терминология​

  • Каталог данных (Data Dir): каждый каталог данных, указанный в storage_root_path в конфигурационном файле BE be.conf. Обычно каждому каталогу данных соответствует отдельный диск, поэтому далее под диском также подразумевается каталог данных.
  • Верхний порог заполнения (High Watermark): нижний из порогов на стороне FE. При его превышении ограничиваются некоторые операции, например балансировка.
  • Критический порог заполнения (Flood Stage): более высокий порог, действующий как на стороне FE, так и на стороне BE. При его превышении в целях самозащиты запрещаются важные операции, например запись.

Основные принципы​

  1. BE сообщает FE об использовании дискового пространства примерно раз в минуту.
  2. На основе полученной статистики FE ограничивает различные операции:
    • При превышении верхнего порога заполнения ограничиваются балансировка, вывод узлов из эксплуатации и аналогичные операции.
    • При превышении критического порога заполнения запрещаются операции записи, такие как загрузка и восстановление.
  3. Поскольку FE не может полностью отслеживать состояние дисков BE в реальном времени и управлять внутренними задачами BE, такими как компакция, критический порог заполнения также задаётся на стороне BE. При его превышении BE самостоятельно отклоняет и останавливает определённые операции в целях самозащиты.

Параметры FE​

На стороне FE настраиваются два уровня порогов: верхний порог заполнения и критический порог заполнения. Каждый уровень включает два условия: «процент использования» и «объём свободного пространства».

Верхний порог заполнения (High Watermark)​

storage_high_watermark_usage_percent defaults to 85 (85%).
storage_min_left_capacity_bytes defaults to 2GB.

Условие срабатывания: использование дискового пространства превышает storage_high_watermark_usage_percent или объём свободного пространства на диске меньше storage_min_left_capacity_bytes.

После срабатывания диск перестаёт использоваться в качестве целевого пути для следующих операций:

  • Балансировка Tablet (Balance)
  • Перераспределение шардов данных для таблиц Colocation (Relocation)
  • Вывод узлов из эксплуатации (Decommission)

Критический порог заполнения (Flood Stage)​

storage_flood_stage_usage_percent defaults to 95 (95%).
storage_flood_stage_left_capacity_bytes defaults to 1GB.

Условие срабатывания: использование дискового пространства превышает storage_flood_stage_usage_percent и объём свободного пространства на диске меньше storage_flood_stage_left_capacity_bytes.

После срабатывания диск перестаёт использоваться в качестве целевого пути, а следующие операции запрещаются:

  • Балансировка Tablet (Balance)
  • Перераспределение шардов данных для таблиц Colocation (Relocation)
  • Добавление недостающих реплик
  • Операции восстановления
  • Загрузка данных (Load/Insert)

Сводка параметров FE​

ПараметрЗначение по умолчаниюОписание
storage_high_watermark_usage_percent85 (85%)Верхний порог использования дискового пространства на стороне FE
storage_min_left_capacity_bytes2 GBПорог свободного пространства для верхнего порога заполнения на стороне FE
storage_flood_stage_usage_percent95 (95%)Критический порог использования дискового пространства на стороне FE
storage_flood_stage_left_capacity_bytes1 GBПорог свободного пространства для критического порога заполнения на стороне FE

Параметры BE​

На стороне BE настраивается только критический порог заполнения. Он служит для самозащиты в случаях, когда FE обнаруживает изменения с задержкой или не может управлять внутренними задачами BE.

storage_flood_stage_usage_percent defaults to 90 (90%).
storage_flood_stage_left_capacity_bytes defaults to 1GB.

Условие срабатывания: использование дискового пространства превышает storage_flood_stage_usage_percent и объём свободного пространства на диске меньше storage_flood_stage_left_capacity_bytes.

После срабатывания на диске запрещаются следующие операции:

  • Базовая и кумулятивная компакция (Base/Cumulative Compaction)
  • Запись данных, включая все операции загрузки
  • Задача клонирования (Clone Task): обычно выполняется при восстановлении реплик или балансировке
  • Задача передачи (Push Task): выполняется на этапе Loading при загрузке Hadoop load, когда скачиваются файлы
  • Задача изменения (Alter Task): задачи Schema Change или Rollup
  • Задача скачивания (Download Task): этап Downloading операций восстановления

Сводка параметров BE​

ПараметрЗначение по умолчаниюОписание
storage_flood_stage_usage_percent90 (90%)Критический порог использования дискового пространства на стороне BE
storage_flood_stage_left_capacity_bytes1 GBПорог свободного пространства для критического порога заполнения на стороне BE

Освобождение дискового пространства​

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

ПриоритетОперацияКогда применятьРиск
1Удалить таблицу или разделЕсть исторические данные, которые можно удалитьВосстановление невозможно, но область воздействия контролируется
2Добавить узлы BEДостаточно ресурсов и есть возможность подождать от нескольких часов до нескольких днейНизкий
3Изменить число реплик таблицы или разделаТребуется временно сократить затраты в экстренной ситуацииСнижается надёжность хранения данных
4Удалить лишние файлы (log/snapshot/trash)BE не запускается из-за полного заполнения дискаВлияет на восстановление из корзины
5Удалить файлы данныхВсе перечисленные способы не помогли; крайняя мераВозможна потеря данных

Удаление таблицы или раздела​

Удаление таблицы или раздела позволяет быстро освободить дисковое пространство и восстановить работу кластера.

Примечание: только DROP позволяет быстро освободить дисковое пространство; DELETE такого эффекта не даёт.

DROP TABLE tbl;
ALTER TABLE tbl DROP PARTITION p1;

Добавление узлов BE​

После добавления узлов шарды данных автоматически перераспределяются на узлы BE с меньшим использованием дискового пространства. В зависимости от объёма данных и числа узлов кластер достигает сбалансированного состояния за несколько часов или дней.

Изменение числа реплик таблицы или раздела​

Число реплик таблицы или раздела можно уменьшить. Например, стандартные 3 реплики можно сократить до 2. Этот способ снижает надёжность хранения данных, но позволяет быстро освободить дисковое пространство и вернуть кластер к нормальной работе, поэтому обычно используется для экстренного восстановления. После восстановления освободите дополнительное место, добавив узлы или удалив данные, а затем верните число реплик к 3.

Изменение числа реплик вступает в силу немедленно, а лишние реплики удаляются асинхронно в фоновом режиме.

ALTER TABLE tbl MODIFY PARTITION p1 SET("replication_num" = "2");

Удаление лишних файлов​

Если процесс BE уже аварийно завершился из-за полного заполнения диска и не запускается (это возможно при задержке обнаружения на стороне FE или BE), можно удалить временные файлы из каталога данных, чтобы обеспечить запуск процесса BE. Файлы в следующих каталогах можно удалять напрямую:

  • log/: файлы журналов в каталоге журналов.
  • snapshot/: файлы снимков в каталоге снимков.
  • trash/: файлы в корзине.

Примечание: эта операция влияет на восстановление данных из корзины BE.

Если BE ещё может запускаться, для принудительной очистки временных файлов используйте следующую команду. Она удаляет все файлы из корзины и файлы снимков с истёкшим сроком хранения, что влияет на восстановление данных из корзины:

ADMIN CLEAN TRASH ON(BackendHost:BackendHeartBeatPort);

Даже если не запускать ADMIN CLEAN TRASH вручную, система всё равно выполнит автоматическую очистку в течение нескольких минут или десятков минут. Возможны два случая:

  • Если использование дискового пространства не достигло 90% от критического порога заполнения: удаляются только файлы корзины и снимков с истёкшим сроком хранения, недавние файлы сохраняются, а возможность восстановления данных не затрагивается.
  • Если использование дискового пространства достигло 90% от критического порога заполнения: удаляются все файлы корзины и файлы снимков с истёкшим сроком хранения, и в этом случае возможность восстановления из корзины затрагивается.

Интервал автоматической очистки можно изменить с помощью параметров конфигурации max_garbage_sweep_interval и min_garbage_sweep_interval.

Если восстановление не удаётся из-за отсутствия файлов в корзине, результат может выглядеть так:

{"status": "Fail","msg": "can find tablet path in trash"}

Удаление файлов данных (Опасно!!!)​

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

Предупреждение: перед удалением шарда данных (Tablet) убедитесь, что хотя бы одна реплика этого Tablet исправна. В противном случае удаление единственной реплики приведёт к потере данных.

Предположим, требуется удалить Tablet с идентификатором 12345. Выполните следующие действия:

  1. Найдите каталог Tablet, который обычно находится по пути data/shard_id/tablet_id/. Например:

    data/0/12345/
  2. Запишите идентификатор Tablet и хеш схемы. Хеш схемы — это имя вложенного каталога в каталоге, найденном на предыдущем шаге. Например, 352781111:

    data/0/12345/352781111
  3. Удалите каталог данных:

    rm -rf data/0/12345/
  4. Удалите метаданные Tablet (подробнее см. в разделе Инструмент управления метаданными Tablet):

    ./lib/meta_tool --operation=delete_header --root_path=/path/to/root_path --tablet_id=12345 --schema_hash=352781111

Часто задаваемые вопросы​

Вопрос: задача загрузки отклоняется с ошибкой. Что делать?​

Использование дискового пространства превысило критический порог заполнения на стороне FE или BE. См. раздел «Освобождение дискового пространства». Предпочтительно выполнить DROP для исторических разделов или добавить узлы.

Вопрос: балансировка реплик долго не завершается. Что делать?​

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

Вопрос: процесс BE не запускается, а диск заполнен. Что делать?​

Диск, на котором находится data/, заполнен. Сначала удалите содержимое log/, snapshot/ и trash/, чтобы освободить место, а затем запустите BE.

Вопрос: после выполнения ADMIN CLEAN TRASH не удаётся восстановить данные. Что делать?​

Файлы корзины были удалены. Эта операция необратима. Перед восстановлением оцените последствия.

Вопрос: при автоматической очистке возвращается can find tablet path in trash. Что делать?​

Использование дискового пространства достигло 90% от критического порога заполнения, и корзина была полностью очищена. Проверьте состояние порогов заполнения и повторите попытку после освобождения дискового пространства.