Настройка SSD кеширования LVM Cache в CentOS

В этой статье мы покажем, как использовать SSD диск в качестве кэширующего устройства для двух SATA дисков, объединенных в RAID 1 на сервере с CentOS Linux на примере LVM Cache. В такой конфигурации кэширующее и кэшируемое устройство должно входить в одну группу томов LVM , а отключение/включение кэша можно выполнять без на ходу без без перезагрузок и перемонтирования.

SSD-кэширование — технология, когда твердотельные SSD накопители используются в качестве буфера для часто запрашиваемых данных. Система определяет данные по степени “теплоты” и перемещает их на быстрый накопитель, используемый в качестве кэширующего диска. Кэш позволяется системе получать доступ к данным в несколько раз быстрее, чем если бы они были получены с более медленного жесткого диска.

После установки ОС на RAID1 из двух SATA дисков, мы подключили отдельный SSD диск на 240 Гб. Проверим, что он доступен:

# fdisk -l

ssd диск в linux centos

SSD-кэширование включить до установки программ и настройки сервера.

С помощью менеджера пакетов установите утилиту lvm2, которая будет использоваться для реализации кэша .

# yum install lvm2 -y

установка lvm2

После установки ПО, нужно определить блочное устройство SSD-диска и раздел, к которому примонтирована нужная директория. В моем случае это будет директория home, раздел для которой я создал при установке ОС.

определить нвзвание раздела директории

Директории /home соответствует раздел /dev/md126p2 . Обратите на это внимание, так как дальнейшая настройка будет связана именно с этим разделом.

Теперь можно перейти к настройке кэша. Отмонтируйте директорию:

# umount /home

umount /home

Для создания кэширующего SSD устройства выполните следующие команды

# pvcreate /dev/md126p2
# pvcreate /dev/sdb
# vgcreate ssdcache /dev/md126p2 /dev/sdb
# lvcreate -l 100%FREE -n hdd_data ssdcache /dev/md126p2
# lvcreate -L 16G -n ssd_meta ssdcache /dev/sdb
# lvcreate -l 90%FREE -n ssd_data ssdcache /dev/sdb
# lvconvert --type cache-pool --poolmetadata ssdcache/ssd_meta ssdcache/ssd_data
# lvconvert --type cache --cachemode writeback --cachepool ssdcache/ssd_data ssdcache/hdd_data

создание LVM кэша на SSD диске в linux

Описание команд:

  • pvcreate — инициализирует физический том для LVM
  • vgcreate – создать группу томов
  • lvcreate -l – создать логический том, размер тома указывается в процентах
  • lvcreate -L – создание логического тома с метаданными для кэша
  • lvconvert — объединяем кэш-пул и логический том через метаданные. Задаем режима кеширования, в нашем случае writeback .

Есть два режима кеширования:

  • Writeback — данные сначала пишутся в кэш, затем на диск. Это более производительный вариант. При сбое кэширующего SSD диска, вы потеряете данные, которые не успели записаться на HDD. Хотя и не рекомендуется использовать этот режим на серверах с SSD без RAID, мне кажется с учетом надежности SSD дисков, это вполне рабочее решение.
  • Writethrough — данные сразу пишутся одновременно на диск и в кэш, после чего наиболее часто используемые попадают в кэш. Это безопасный вариант, подходит для серверов с 1*SSD, но гораздо менее производительный.
Выбранный режим кэширования относится только к операциям записи. На скорость чтения данных с LVM тома с кэшем он не влияет.

После выполнения всех настроек, можно проверить кэш на наличие ошибок:

# lvs -a

Если ошибок нет, значит вы все сделали верно. Данная команда покажет процент использования кэша. На данный момент размер кэша будет чуть практически нулевой.

инвормация о lvm томах

Теперь создадим файловую систему на новом LVM разделе:

# mkfs.ext4 /dev/ssdcache/hdd_data

создать файловую систему на LVM разделе mkfs.ext4

После создания раздела, нужно определить его UUID, чтобы заменить его в fstab :

# blkid|grep cache

/dev/mapper/ssdcache-hdd_data: UUID="a89f0bb8-7bb2-4d83-87e2-39918154135b" TYPE="ext4"

Заменяем в /etc/fstab

# nano /etc/fstab

получить UUID раздела

После замены UUID в fstab для нужного раздела, перезагрузите сервер и проверяем текущие настройки:

# df -h

информация о разделах df

Чтобы узнать текущий режим работы SSD кэша, используйте команду:

# lvs -o+cache_mode ssdcache

lvs -o+cache_mode ssdcache режим работы ssd кэша

Для смены режима, используются команды:

# lvchange --cachemode writeback ssdcache
# lvchange --cachemode writethrough ssdcache

Если вам нужно заменить SSD диск, обязательно нужно удалить кэш:

# lvconvert --uncache /dev/ssdcache/hdd_data
# lvremove /dev/ssdcache/ssd_meta
# vgreduce ssdcache /dev/sdb
# pvremove /dev/sdb

После этого вы смело можете отключить сервер, заменить диске и добавить кэш заново с помощью следующих команд:

# pvcreate /dev/sdb
# vgextend ssdcache /dev/sdb
# lvcreate -L 16G -n ssd_meta ssdcache /dev/sdb
# lvcreate -l 90%FREE -n ssd_data ssdcache /dev/sdb
# lvconvert --type cache-pool --poolmetadata ssdcache/ssd_meta ssdcache/ssd_data
# lvconvert --type cache --cachemode writeback --cachepool ssdcache/ssd_data

На этом работа по настройке SSD-кэширования окончена. Определить скорость работы ssd-кэша обычными утилитами для замера операций чтения/записи, невозможно. Скорость будет такая же как на обычном SATA диске, но это все из-за специфики работы кэша, как ранее мы описывали, он срабатывает именно для “горячих” данных. При тестировании работы в различных приложениях, повышение скорости действительно ощутимо, где-то в 3-4 раза.

EnglishRussianUkrainian