Управление дисковым пространством
В этом документе описаны системные параметры и способы управления дисковым пространством в Doris. Он поможет инженерам по эксплуатации разобраться в механизме порогов заполнения дисков, настроить подходящие пороговые значения и быстро восстановить работу кластера при нехватке места или полном заполнении дисков.
Если не контролировать заполнение дисков с данными в Doris, при полном заполнении диска процесс BE аварийно завершается. Doris отслеживает использование и свободное пространство на каждом диске и задаёт разные пороги заполнения, при достижении которых ограничиваются операции в системе. Это позволяет по возможности избежать полного заполнения дисков.
Сценарии применения
| Сценарий | На что обратить внимание |
|---|---|
| Регулярное планирование ёмкости | Разобраться в механизме порогов FE/BE и заблаговременно выявлять нехватку места |
| Заполнение диска приближается к верхнему порогу | Настроить пороги FE и не допускать дополнительного расхода места при балансировке или восстановлении |
| Заполнение диска достигает критического порога | Выяснить причину блокировки записи и освободить место |
| BE не запускается из-за полного заполнения диска | Срочно удалить временные файлы и восстановить работу процесса |
| Быстрое сокращение затрат при использовании таблиц с несколькими репликами | Временно уменьшить число реплик и вернуть его к прежнему значению после восстановления |
Терминология
- Каталог данных (Data Dir): каждый каталог данных, указанный в
storage_root_pathв конфигурационном файле BEbe.conf. Обычно каждому каталогу данных соответствует отдельный диск, поэтому далее под диском также подразумевается каталог данных. - Верхний порог заполнения (High Watermark): нижний из порогов на стороне FE. При его превышении ограничиваются некоторые операции, например балансировка.
- Критический порог заполнения (Flood Stage): более высокий порог, действующий как на стороне FE, так и на стороне BE. При его превышении в целях самозащиты запрещаются важные операции, например запись.
Основные принципы
- BE сообщает FE об использовании дискового пространства примерно раз в минуту.
- На основе полученной статистики FE ограничивает различные операции:
- При превышении верхнего порога заполнения ограничиваются балансировка, вывод узлов из эксплуатации и аналогичные операции.
- При превышении критического порога заполнения запрещаются операции записи, такие как загрузка и восстановление.
- Поскольку 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_percent | 85 (85%) | Верхний порог использования дискового пространства на стороне FE |
storage_min_left_capacity_bytes | 2 GB | Порог свободного пространства для верхнего порога заполнения на стороне FE |
storage_flood_stage_usage_percent | 95 (95%) | Критический порог использования дискового пространства на стороне FE |
storage_flood_stage_left_capacity_bytes | 1 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_percent | 90 (90%) | Критический порог использования дискового пространства на стороне BE |
storage_flood_stage_left_capacity_bytes | 1 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. Выполните следующие действия:
-
Найдите каталог Tablet, который обычно находится по пути
data/shard_id/tablet_id/. Например:data/0/12345/ -
Запишите идентификатор Tablet и хеш схемы. Хеш схемы — это имя вложенного каталога в каталоге, найденном на предыдущем шаге. Например,
352781111:data/0/12345/352781111 -
Удалите каталог данных:
rm -rf data/0/12345/ -
Удалите метаданные 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% от критического порога заполнения, и корзина была полностью очищена. Проверьте состояние порогов заполнения и повторите попытку после освобождения дискового пространства.