• Русский
  • Включение кэша D3N для Ceph RGW

    Кэш D3N (Data Delivery Network) ускоряет доступ к горячим объектам, используя локальные NVMe/SSD диски на узлах RGW в качестве слоя кэша. Это снижает частоту операций чтения с бэкендных OSD и значительно улучшает производительность чтения горячих данных.

    Общая информация

    Основная идея D3N проста, но эффективна: вместо многократного получения данных объекта из бэкендного хранилища Ceph, RGW обслуживает горячие данные напрямую из локального постоянного кэша, расположенного на быстрых дисках (NVMe/SSD), подключённых к узлам RGW.

    Данный подход особенно полезен для:

    • Загрузки больших объектов
    • Повторных чтений горячих объектов
    • Нагрузок, чувствительных к пропускной способности

    Предварительные требования

    • Установлен кластер Ceph
    • Развернут Rook-Ceph
    • Создан Object Storage (RGW / CephObjectStore)
    • На узлах RGW доступны высокопроизводительные локальные диски (NVMe / SSD)

    Обзор работы

    1. Развернуть Ceph и создать Object Storage
    2. Подготовить высокоскоростной локальный диск на узлах RGW и смонтировать его в директорию
    3. Настроить CephObjectStore для:
      • Монтирования директории через hostPath
      • Включения параметров RGW, связанных с D3N

    Подготовка локальной файловой системы для кэша

    Смонтируйте директорию на каждом узле, где работает сервис RGW. Рекомендуется использовать выделенный высокопроизводительный диск (а не раздел), отформатированный в файловую систему XFS, и настроить /etc/fstab для сохранения монтирования после перезагрузки. В дальнейшем тексте замените </path/to/cache/dir> на фактический путь к директории, которую вы настроили.

    Включение кэша D3N в CephObjectStore

    Отредактируйте ресурс CephObjectStore:

    kubectl edit cephobjectstore object-store -n rook-ceph

    Добавьте следующую конфигурацию в раздел gateway:

    gateway:
      additionalVolumeMounts:
      - subPath: cache
        volumeSource:
          hostPath:
            path: </path/to/cache/dir>
      rgwConfig:
        rgw_d3n_l1_datacache_persistent_path: /var/rgw/cache/
        rgw_d3n_l1_datacache_size: "10737418240"
        rgw_d3n_l1_local_datacache_enabled: "true"

    Параметры

    ПараметрОписание
    rgw_d3n_l1_local_datacache_enabledВключение локального кэша D3N
    rgw_d3n_l1_datacache_persistent_pathДиректория кэша внутри контейнера RGW
    rgw_d3n_l1_datacache_sizeМаксимальный размер кэша в байтах

    Проверка конфигурации D3N

    Проверка конфигурации RGW через Ceph Tools

    В поде rook-ceph-tools выполните:

    ceph config dump | grep d3n

    Пример вывода:

    client.rgw.obj.a  advanced  rgw_cache_enabled                    true
    client.rgw.obj.a  advanced  rgw_d3n_l1_datacache_persistent_path /var/rgw/cache/
    client.rgw.obj.a  advanced  rgw_d3n_l1_datacache_size            10737418240
    client.rgw.obj.a  advanced  rgw_d3n_l1_local_datacache_enabled   true

    Проверка логов RGW

    После перезапуска пода RGW должны появиться логи инициализации D3N:

    kubectl logs -n rook-ceph rook-ceph-rgw-object-store-a-xxxx | grep -i d3n

    Пример вывода:

    rgw_d3n: rgw_d3n_l1_local_datacache_enabled=1
    rgw_d3n: rgw_d3n_l1_datacache_persistent_path='/var/rgw/cache/'
    rgw_d3n: rgw_d3n_l1_datacache_size=10737418240
    rgw_d3n: rgw_d3n_l1_evict_cache_on_start=1
    rgw_d3n: rgw_d3n_l1_eviction_policy=lru

    Проверка работы кэша

    При загрузке объектов через RGW в директории кэша на хосте появятся кэшированные файлы:

    ls </path/to/cache/dir>

    Пример вывода:

    40b934ab-6c7e-45e7-9fed-a35bc143ce95...multipart_v2v-demo.mkv.1
    40b934ab-6c7e-45e7-9fed-a35bc143ce95...multipart_v2v-demo.mkv.2
    40b934ab-6c7e-45e7-9fed-a35bc143ce95...shadow_v2v-demo.mkv.3_1
    ...

    Наличие этих файлов подтверждает, что RGW обслуживает данные из локального кэша D3N.