Выпущена версия Vitastor 2.2.0

11.05.2025

Локальные чтения, zero-copy send, улучшенный алгоритм распределения данных по OSD, исправление совместимости с ISA-L 2.31 и много других фиксов.

⚠️ В версиях 2.2.0 и 2.2.1 есть известный баг с pg_locks, рекомендуется обновление как минимум до 2.2.2.

Новые функции

  • Добавлена поддержка локальных чтений для кросс-ДЦ: local_reads
  • Добавлена поддержка отправки без копирования (zero-copy send) через io_uring: min_zerocopy_send_size - по умолчанию включено для буферов от 32 КБ, но сильно зависит от CPU и у вас может быть эффективно и, скажем, для 12 КБ. По ссылке есть краткая инструкция по тестированию.
  • Ускорена и улучшена оптимизация распределения данных (PG) по OSD, в особенности, для очень толстых серверов, условно, по 100 дисков. Задача оптимизации теперь решается в разрезе доменов отказа (по умолчанию - серверов), а потом дополнительно распределяется уже по отдельным OSD. Меньшая по размерности задача решается быстрее и точнее, поэтому и распределение получается эффективнее.
  • Добавлена интересная инструкция по увеличению NFS_MAX_FILE_IO_SIZE в Linux, позволяющая радикально ускорить запись в VitastorFS с EC.
  • Добавлена проверка последовательности доставки операций, позволяющая выявлять крайне редкую, но крайне противную проблему с потерей сообщений при использовании RDMA. Теперь при выявлении потери соединения будут отключаться с предупреждением в логе.
  • vitastor-cli rm-osd теперь проверяет, не запущен ли ещё OSD, который пользователь пытается удалить из etcd (удалить его так всё равно не получится).
  • Разрешено удаление записей в каталогах (direntry) VitastorFS, ссылающихся на несуществующие иноды.

Исправления

  • ⚠️ Очень важное исправление - исправлена совместимость с библиотекой EC ISA-L версии 2.31. Если вы каким-то образом умудрились установить Vitastor с ISA-L 2.31, ваши процы поддерживают GF-NI и вы используете EC, выключайте кластер нафиг и обновляйте как можно скорее, во избежание. 😊 к счастью, в стабильных ветках дистрибутивов ISA-L 2.31, вроде бы, ещё не было.
  • Исправлена очистка состояния PG в памяти для неполных (incomplete) PG.
  • Исправлено падение монитора при упоминании несуществующих узлов в node_placement.
  • Несколько ускорен вывод vitastor-kv dump с помощью добавления буферизации вывода.
  • Исправлены теоретически возможные замедления OSD при обработке ошибок чтения/записи с других OSD.
  • Исправлено очень редкое переполнение стека в vitastor-kv.
  • Исправлено возможное падение VitastorFS при обработке состояний гонок при создании файлов.
  • Исправлена работа команды modify-pool -s PG_SIZE без опции --pg_minsize.
  • Исправлена отсутствующая пометка парных OSD живыми при получении данных от них через RDMA - в теории, баг мог приводить к нестабильности RDMA-соединений под нагрузкой при медленных дисках.
  • Исправлено редкое падение OSD из-за двойного вызова handle_primary_subop().
  • Исправлена агрегация времён отклика в глобальной статистике в etcd (/vitastor/stats) - ранее они складывались, а не усреднялись.
  • По умолчанию скрыты сообщения “Ran out of journal space” в логах OSD.
  • Исправлена последовательность обработки событий при установке соединений через RDMA-CM (в редких случаях баг мог приводить к неудачным установкам соединений).
  • Исправлено лишнее умножение полного и свободного места в VitastorFS на 2.
  • Исправлено имя сервиса systemd в make-etcd.
  • Запрещены значения reweight > 1 в vitastor-cli modify-osd.
  • Исправлена Docker-сборка.
  • Директория данных vitastor-etcd по умолчанию изменена на /var/lib/etcd/vitastor.

Ссылки