Вопрос или проблема
Я обращаюсь за помощью по вопросу стабильности, с которым мы столкнулись после обновления нашего кластера 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, в которой происходит сбой или нарушение целостности данных. Ошибки, представленные в журналах, указывают на проблемные участки:
bluestore::NCB::__restore_allocator::Failed open_for_read with error-code -2
– это свидетельствует о проблеме с чтением аллокатора, возможно, из-за поврежденной метаинформации.- Схема
assert(log.t.seq == log.seq_live)
указывает на сбой в функцииBlueFS::_log_advance_seq()
, которая отвечает за последовательность записи и возможно нарушает консистентность данных.
Пример (E):
Опыты многих пользователей Ceph показывают, что флаппинг во время обновлений может быть результатом незавершенной или неполной миграции данных между версиями. Это может быть связано с особенностями работы BlueFS, которая управляет журналами записи (logs), обеспечивая их последовательность и консистентность. При миграции на более новые версии возможны конфликты в этих записях, особенно при совместной работе с RocksDB, который используется для хранения метаданных.
Применение (A):
В этой связи, я рекомендую следующее поэтапное подхода к диагностике и разрешению ситуации:
-
Проверка версий ПО и конфигурации служб:
- Убедитесь, что все OSDs работают на одной версии Ceph после обновления и конфигурации синхронизированы между всеми узлами. Разная версия софта может вызывать конфликты в данных и приводить к флаппингу.
-
Анализ и очистка журналов:
- Проверьте наличие более ранних файлов журналов, которые могут затруднять работу новой версии. Возможно, необходимо удаление или перемещение старых логов для приведения их в актуальное состояние.
-
Проверка файловой системы BlueFS:
- Методично проверяйте
ceph-bluestore-tool
на всех затронутых OSDs. При необходимости используйтеrepair
илиrescue
для восстановления целостности файловой системы. Если вы уже запускалиfsck
иrepair
, выполните эти операции повторно или попробуйте с более детальной проверкой.
- Методично проверяйте
-
Тестирование и мониторинг OSDs:
- Включите более строгий мониторинг флаппинга (например, с использованием инструментов автоматизации Zabbix, Grafana) для выяснения частоты и условий, при которых происходит сбой.
-
Контакты с сообществом и разработчиками:
- Если вышеуказанные шаги не принесут результатов, имеет смысл связаться с сообществом Ceph или даже разработчиками для получения патчей или рекомендаций, специфичных именно вашей конфигурации OSDs и текущим ошибкам.
-
Постановка на поддержку техническим специалистам:
- В крайнем случае, эффективно будет подключить поддержку от специалистов, которые смогут на месте проанализировать ситуацию и оказать помощь.
Это системное решение требует тщательного подхода и может занять время, но оно непременно приведёт к стабильной работе OSDs и всей системы в будущем. Учитывая важность хранения данных, рекомендуется не оставлять подобные ситуации без внимания и своевременно реагировать на любые даже незначительные сбои.