Кеш на SSD в CEPH

08/06/2021

cache_img

Система хранения CEPH уже давно поддерживает функционал кеширования HDD пулов с помощью дисков SSD или NVMe. То есть, сами данные хранятся на массивах медленных HDD дисках, но при этом при оперативной записи/чтении могут использоваться намного более быстрые диски SSD/NVMe. Такой функционал считается одним из базовых в дорогих коммерческих стораджах middle-range уровня. В свое время долгое время занимался такого типа оборудованием. По своему опыту могу сказать, что такое кеширование является одним из важных моментов при выборе СХД в организации. Для Open Source продукта Ceph это важная фича, которая позволяет обеспечить нужную производительность общей системы при использовании шпиндельных дисков при необходимости.

Как настроить

Будем считать, что у нас уже есть готовый кластер CEPH версии 15 – Octopus, на котором настроены, как минимум, роли OSD, MON, MGR. Как поднять кластер с нуля, можно почитать на моем блоге в одной из статей – Установка кластера CEPH. В системе должны присутствовать 2 типа дисков – HDD и SSD. Первый тип дисков будет использоваться для хранения данных, а второй для кеширования. Как известно, по умолчанию CEPH пишет данные любого пула на все имеющиеся в наличии диски. Чтобы разнести данные по разным типам дисков, нужно настроить соответствующие CRUSH правила. Об этом в свое время писал в соответствующей статье – Разносим данные по hdd и ssd в CEPH. Далее все манипуляции проводим в командной строке, в силу отсутствия соответствующего функционал в графическом интерфейсе.

Во-первых, необходимо все имеющиеся системные пулы на кластере CEPH перевести на использование HDD дисков. Для этого перенастраиваем CRUSH rule для каждого из пулов и ждем, когда произойдет ресинхронизация. Потери данных при этом не происходит. Пример такой команды для пула .rgw.root представлен ниже.

# ceph osd pool set .rgw.root crush_rule hddrule

После завершения всех синхронизаций, данные на кластере будут распределены только по hdd дискам.

Во-вторых, необходимо создать CRUSH правило для распределения данных по ssd дискам для кеш слоя. Будем использовать тип правила – replicated rule. С помощью него все данные будут реплицироваться на 3 хоста нашего кластера. Пример команды для создания CRUSH rule под названием ssdrule для класса дисков ssd приведен ниже.

# ceph osd crush rule create-replicated ssdrule default host ssd

В-третьих, создается пул, который будет выступать в качестве кеширующего слоя. Данный пул будет использовать строго быстрые ssd диски на кластере. Команда, которая выполняет создание такого пула под именем ssdcache приведена ниже.

# ceph osd pool create ssdcache 32 32 ssdrule

В-четвертых, настраивается связка между основным пулом, на котором будут храниться данные и горячим пулом для кеширования. Допустим для нашего примера, что пул для хранения данных называется mypoolhdd. Его мы связываем с ssd пулом – ssdcache. В качестве режима работы кеширующего слоя выбирается – writeback. Это позволяет записывать данные на ssd диски и потом уже переносить информацию с них непосредственно на основной пул.

# ceph osd tier add mypoolhdd ssdcache
# ceph osd tier cache-mode ssdcache writeback
# ceph osd tier set-overlay mypoolhdd ssdcache

В-пятых, для кеширующего слоя необходимо сконфигурировать параметры попадания в него. Прежде всего мы выбираем фильтр bloom, который будет использоваться для опредления попадания в кеширующий слой. Также указываем количественные параметры срабатывания кеша – hit_set_count и hit_set_period. Первый из них указывает сколько раз нужно обратиться к объекту, чтобы он попал в кеш, а второй показывает время жизни объекта в кеше.

# ceph osd pool set ssdcache hit_set_type bloom
# ceph osd pool set ssdcache hit_set_count 6
# ceph osd pool set ssdcache hit_set_period 3600

В-шестых, настраиваем дополнительные параметры работы кеширующего слоя. Нам необходимо указать максимальный размер, который может быть помещен в горячий пул, количество объектов для кеширования, а также параметры сброса данных с ssd пула на обычный пул. Пример настройки приведен ниже.

# ceph osd pool set ssdcache target_max_bytes 1000000000000
# ceph osd pool set ssdcache target_max_objects 102400
# ceph osd pool set ssdcache cache_target_dirty_ratio 0.4
# ceph osd pool set ssdcache cache_target_dirty_high_ratio 0.6
# ceph osd pool set ssdcache cache_target_full_ratio 0.8

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

На данном этапе создание тиринга для организация кеширующего слоя на базе ssd дисков завершено. Можно подключать основной hdd пул к выбранному CEPH клиенту и использовать его по назначению с увеличенной производительностью.

Заключение

Использование кеширования в СХД CEPH является хорошим примером того, что в этой системе инженеру приходится постоянно изучать документацию и эксперементировать. Если Вы решили, что для внедрения и администрирования этого программного хранилища достаточно использования веб интерфейса и можно положиться на интуитивно понятный интерфейс, то это не тот случай. Во-первых, большая часть нестандартного функционала недоступна в графическом интерфейсе администратора. Во-вторых, для достижения посавленной задачи порой нужно выполнить множество различных манипуляций в консоли. С моей точки зрения данный продукт просто является одной из квинт эсенцией Open Source сообщества.

Кеш на SSD в CEPH: 3 комментария

  1. Доброго дня. Может подскажете, куда копать?
    Кластер на три ноды. На каждой 7 дисков.
    1. Прокс
    2. 1 сата ссд под вм
    3. 4 сата ссд под данные
    4. 1 нвме под бд
    Хочется разнести ссд под данные и вирт.машины
    пробовал создавать класс, но при создании osd в интерфейсе в выборе класса, его не появляется
    ceph osd crush class create ssdvm

  2. Здравствуйте.
    В этой статье описана настройка кэша для всего? Т.е. и для журналов Ceph тоже?
    Где-то читал что в Ceph делают два вида екша – 1. для данных на пулах дисков. 2 для журналов Ceph. И второй вроде бы намного больше влияет на производительность.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *