Сканирование объектов
В этой статье подробно介绍ется设计 и实现 сканера объектов RustFS, включая его интеграцию с Erasure Coding и механизмом Scrub & Repair, а также стратегию планирования, мониторинг метрик и методы диагностики.
Обзор
Встроенный в движок хранения сканер объектов RustFS отвечает за периодическую проверку целостности объектов и выполнение запланированных операций. Задачи сканирования включают подсчет использования диска, оценку правил управления жизненным циклом, выполнение копирования объектов и запуск самовосстановления поврежденных объектов.
Архитектура и принципы дизайна
Архитектура сканера
Сканер RustFS использует механизм хеш-выборки: по хешу имени объекта выбирается один из 1024 объектов для проверки, что снижает влияние на производительность обычных запросов. Сканер глубоко интегрирован с модулем Erasure Coding и при обнаружении потерянных или поврежденных фрагментов может восстанавливать их из избыточных фрагментов в режиме онлайн, обеспечивая высокую доступность и согласованность данных.
Проверка данных и восстановление
Механизм проверки данных RustFS позволяет быстро проверять согласованность метаданных, а побитовая проверка выявляет скрытые плохие блоки. Сканер может обнаружить проблемы типа bit rot и при необходимости запускать процесс восстановления.
Режимы сканирования и планирование
RustFS поддерживает три режима триггера сканирования: онлайн-сканирование при чтении, фоновое регулярное сканирование и ручное полнообъемное сканирование — для баланса производительности и надежности. Подобно параметру osd_scrub_begin_hour
в Ceph, администратор может задавать время запуска и частоту сканирования, например выполнять легкую проверку ежедневно по умолчанию.
Мониторинг и метрики
Сканер RustFS собирает статистику задач, количество отказов и распределение времени выполнения, которые экспортируются в модель данных Prometheus как метрики rustfs_scanner_jobs_total
, rustfs_scanner_failures_total
и rustfs_scanner_duration_seconds
. Совместно с системой мониторинга можно настраивать оповещения по уровню отказов и длительности, чтобы своевременно обнаруживать и локализовать потенциальные проблемы на уровнях хранения и сети.