В крупном кластере Ceph Quincy версии 17.2.6, развернутом через cephadm, произошла массовая неисправность: на одном хосте одновременно упали одиннадцать OSD. Анализ логов показал, что причиной стал конфликт версий при попытке удаления пулов. Система требовала отката на релиз Luminous 2017 года, так как на дисках оставались метаданные удаленных пулов, а актуальные карты кластера уже были обрезаны мониторами. Данные кластера при этом были целы, так как OSD автоматически вывелись из строя, но для восстановления работоспособности требовалось ручное удаление оставшихся PG через инструмент ceph-objectstore-tool.
Однако при попытке запуска исправленного OSD возникла критическая ошибка RocksDB: "Corruption: unknown checksum type 4". Оказалось, что команда cephadm shell без явного указания образа выбрала свежий образ Reef 18.2.0, а не Quincy. Инструмент Reef записал файлы базы данных с новой контрольной суммой XXH3, которую не понимает старый формат Quincy. Поскольку данные на дисках были в репликах, их можно было восстановить, но пересоздание OSD с переносом 20 ТБ было нежелательным. Простая попытка переписать базу с помощью параметра checksum=kCRC32c не сработала, так как Ceph игнорировал передаваемые опции при создании фабрики таблиц.
Решение было найдено через механизм шардинга BlueStore. Администратор разработал трехэтапный план: сначала с помощью инструментария Reef перераспределить все ключи по новым семействам столбцов с принудительным применением контрольной суммы CRC32C, полностью удалив старые файлы с XXH3. Затем сжать базу, чтобы очистить семейство default от мусора. Наконец, используя инструмент Quincy, вернуть исходное разбиение ключей и записать их в родном формате. Тестирование на тестовом кластере подтвердило эффективность метода, после чего процедура была применена к реальному OSD.
Восстановление заняло около пятнадцати минут: три минуты на решардинг, две с половиной на сжатие и почти две на обратный решардинг. После запуска OSD успешно прошел проверку fsck и вернул кластер в строй. В ходе инцидента выяснилось, что коллега совершил аналогичную ошибку при ремонте соседнего OSD, используя тот же подход без явного указания образа. В результате были сформулированы новые правила эксплуатации: офлайн-инструменты должны запускаться только с явным указанием образа той же версии, что и демон, а на хостах следует удалять неиспользуемые образы других версий, чтобы избежать конфликтов при работе cephadm shell.