Проблемы с устойчивостью OSDS после обновления до Ceph Quincy 17.2.8.

Вопрос или проблема

Я обращаюсь за помощью по вопросу стабильности, с которым мы столкнулись после обновления нашего кластера Ceph с версии Pacific 16.2.3 до Quincy 17.2.8.

После обновления мы заметили, что несколько наших демон-хранилищ объектов (OSD) ведут себя нестабильно. Эти OSD часто проявляют состояние “флаппинга”, когда они неожиданно отключаются и снова включаются. Эта проблема в основном затронула недавно обновленные OSD в кластере.

После рассмотрения журналов затронутых OSD мы обнаружили следующие сообщения:

2025-02-03T08:34:09.769+0000 7f0f11390780 -1 bluestore::NCB::__restore_allocator::Failed open_for_read with error-code -2
2025-02-03T08:38:22.920+0000 7feb9dd44780 -1 bluestore::NCB::__restore_allocator::No Valid allocation info on disk (empty file)

В попытке решить проблему мы выполнили команды ceph-bluestore-tool fsck и repair. Несмотря на то, что эти команды были выполнены успешно, они не устранили проблему.

Дополнительно мы зафиксировали следующую информацию о сбое из журналов ceph:

ceph crash info 2025-02-03T09:19:08.749233Z_9e2800fb-77f6-46cb-8087-203ea15a2039
{
   "assert_condition": "log.t.seq == log.seq_live",
   "assert_file": "/home/jenkins-build/build/workspace/ceph-build/ARCH/x86_64/AVAILABLE_ARCH/x86_64/AVAILABLE_DIST/centos9/DIST/centos9/MACHINE_SIZE/gigantic/release/17.2.8/rpm/el9/BUILD/c
eph-17.2.8/src/os/bluestore/BlueFS.cc",
   "assert_func": "uint64_t BlueFS::_log_advance_seq()",
   "assert_line": 3029,
   "assert_msg": "/home/jenkins-build/build/workspace/ceph-build/ARCH/x86_64/AVAILABLE_ARCH/x86_64/AVAILABLE_DIST/centos9/DIST/centos9/MACHINE_SIZE/gigantic/release/17.2.8/rpm/el9/BUILD/ce
ph-17.2.8/src/os/bluestore/BlueFS.cc: In function 'uint64_t BlueFS::_log_advance_seq()' thread 7ff983564640 time 2025-02-03T09:19:08.738781+0000\n/home/jenkins-build/build/workspace/ceph-bu
ild/ARCH/x86_64/AVAILABLE_ARCH/x86_64/AVAILABLE_DIST/centos9/DIST/centos9/MACHINE_SIZE/gigantic/release/17.2.8/rpm/el9/BUILD/ceph-17.2.8/src/os/bluestore/BlueFS.cc: 3029: FAILED ceph_assert
(log.t.seq == log.seq_live)\n",
   "assert_thread_name": "bstore_kv_sync",
   "backtrace": [
       "/lib64/libc.so.6(+0x3e730) [0x7ff9930f5730]",
       "/lib64/libc.so.6(+0x8bbdc) [0x7ff993142bdc]",
       "raise()",
       "abort()",
       "(ceph::__ceph_assert_fail(char const*, char const*, int, char const*)+0x179) [0x55882dfb7fdd]",
       "/usr/bin/ceph-osd(+0x36b13e) [0x55882dfb813e]",
       "/usr/bin/ceph-osd(+0x9cff3b) [0x55882e61cf3b]",
       "(BlueFS::_flush_and_sync_log_jump_D(unsigned long)+0x4e) [0x55882e6291ee]",
       "(BlueFS::_compact_log_async_LD_LNF_D()+0x59b) [0x55882e62e8fb]",
       "/usr/bin/ceph-osd(+0x9f2b15) [0x55882e63fb15]",
       "(BlueFS::fsync(BlueFS::FileWriter*)+0x1b9) [0x55882e631989]",
       "/usr/bin/ceph-osd(+0x9f4889) [0x55882e641889]",
       "/usr/bin/ceph-osd(+0xd74cd5) [0x55882e9c1cd5]",
       "(rocksdb::WritableFileWriter::SyncInternal(bool)+0x483) [0x55882eade393]",
       "(rocksdb::WritableFileWriter::Sync(bool)+0x120) [0x55882eae0b60]",
       "(rocksdb::DBImpl::WriteToWAL(rocksdb::WriteThread::WriteGroup const&, rocksdb::log::Writer*, unsigned long*, bool, bool, unsigned long)+0x337) [0x55882ea00ab7]",
       "(rocksdb::DBImpl::WriteImpl(rocksdb::WriteOptions const&, rocksdb::WriteBatch*, rocksdb::WriteCallback*, unsigned long*, unsigned long, bool, unsigned long*, unsigned long, rocksdb
::PreReleaseCallback*)+0x1935) [0x55882ea07675]",
       "(rocksdb::DBImpl::Write(rocksdb::WriteOptions const&, rocksdb::WriteBatch*)+0x35) [0x55882ea077c5]",
       "(RocksDBStore::submit_common(rocksdb::WriteOptions&, std::shared_ptr<KeyValueDB::TransactionImpl>)+0x83) [0x55882e992593]",
       "(RocksDBStore::submit_transaction_sync(std::shared_ptr<KeyValueDB::TransactionImpl>)+0x99) [0x55882e992ee9]",
       "(BlueStore::_kv_sync_thread()+0xf64) [0x55882e578e24]",
       "/usr/bin/ceph-osd(+0x8afb81) [0x55882e4fcb81]",
       "/lib64/libc.so.6(+0x89e92) [0x7ff993140e92]",
       "/lib64/libc.so.6(+0x10ef20) [0x7ff9931c5f20]"
   ],
   "ceph_version": "17.2.8",
   "crash_id": "2025-02-03T09:19:08.749233Z_9e2800fb-77f6-46cb-8087-203ea15a2039",
   "entity_name": "osd.211",
   "os_id": "centos",
   "os_name": "CentOS Stream",
   "os_version": "9",
   "os_version_id": "9",
   "process_name": "ceph-osd",
   "stack_sig": "ba90de24e2beba9c6a75249a4cce7c533987ca5127cfba5b835a3456174d6080",
   "timestamp": "2025-02-03T09:19:08.749233Z",
   "utsname_hostname": "afra-osd18",
   "utsname_machine": "x86_64",
   "utsname_release": "5.15.0-119-generic",
   "utsname_sysname": "Linux",
   "utsname_version": "#129-Ubuntu SMP Fri Aug 2 19:25:20 UTC 2024"
}

Вышеуказанные журналы сбоев подчеркивают ошибку утверждения в компоненте BlueFS, конкретно в функции BlueFS::_log_advance_seq(). Несмотря на наши усилия проанализировать и решить проблему, мы зашли в тупик.

Для полноты, мы проверили здоровье наших дисков с помощью smartctl, и все они были признаны исправными.

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

Спасибо за внимание и помощь.

файл журнала osd : https://paste.mozilla.org/ASM2WHRN

Ответ или решение

Уважаемые коллеги,

После обновления Ceph-кластера с версии Pacific 16.2.3 до Quincy 17.2.8 было обнаружено нестандартное поведение некоторых Object Storage Daemons (OSDs). Описанная проблема флаппинга, при которой несколько OSDs периодически выходят из строя и затем вновь начинают работать, вызывает беспокойство, так как это может повлиять на общую производительность и надежность кластера.

Теория (T):
Флаппинг OSDs после обновления является проблемой, связанной, в основном, с компонентой BlueFS, в которой происходит сбой или нарушение целостности данных. Ошибки, представленные в журналах, указывают на проблемные участки:

  1. bluestore::NCB::__restore_allocator::Failed open_for_read with error-code -2 – это свидетельствует о проблеме с чтением аллокатора, возможно, из-за поврежденной метаинформации.
  2. Схема assert(log.t.seq == log.seq_live) указывает на сбой в функции BlueFS::_log_advance_seq(), которая отвечает за последовательность записи и возможно нарушает консистентность данных.

Пример (E):
Опыты многих пользователей Ceph показывают, что флаппинг во время обновлений может быть результатом незавершенной или неполной миграции данных между версиями. Это может быть связано с особенностями работы BlueFS, которая управляет журналами записи (logs), обеспечивая их последовательность и консистентность. При миграции на более новые версии возможны конфликты в этих записях, особенно при совместной работе с RocksDB, который используется для хранения метаданных.

Применение (A):
В этой связи, я рекомендую следующее поэтапное подхода к диагностике и разрешению ситуации:

  1. Проверка версий ПО и конфигурации служб:

    • Убедитесь, что все OSDs работают на одной версии Ceph после обновления и конфигурации синхронизированы между всеми узлами. Разная версия софта может вызывать конфликты в данных и приводить к флаппингу.
  2. Анализ и очистка журналов:

    • Проверьте наличие более ранних файлов журналов, которые могут затруднять работу новой версии. Возможно, необходимо удаление или перемещение старых логов для приведения их в актуальное состояние.
  3. Проверка файловой системы BlueFS:

    • Методично проверяйте ceph-bluestore-tool на всех затронутых OSDs. При необходимости используйте repair или rescue для восстановления целостности файловой системы. Если вы уже запускали fsck и repair, выполните эти операции повторно или попробуйте с более детальной проверкой.
  4. Тестирование и мониторинг OSDs:

    • Включите более строгий мониторинг флаппинга (например, с использованием инструментов автоматизации Zabbix, Grafana) для выяснения частоты и условий, при которых происходит сбой.
  5. Контакты с сообществом и разработчиками:

    • Если вышеуказанные шаги не принесут результатов, имеет смысл связаться с сообществом Ceph или даже разработчиками для получения патчей или рекомендаций, специфичных именно вашей конфигурации OSDs и текущим ошибкам.
  6. Постановка на поддержку техническим специалистам:

    • В крайнем случае, эффективно будет подключить поддержку от специалистов, которые смогут на месте проанализировать ситуацию и оказать помощь.

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

Оцените материал
Добавить комментарий

Капча загружается...