Настройка SSD кеширования LVM Cache в CentOS
В этой статье мы покажем, как использовать SSD диск в качестве кэширующего устройства для двух SATA дисков, объединенных в RAID 1 на сервере с CentOS Linux на примере LVM Cache. В такой конфигурации кэширующее и кэшируемое устройство должно входить в одну группу томов LVM, а отключение/включение кэша можно выполнять без на ходу без без перезагрузок и перемонтирования.
SSD-кэширование — технология, когда твердотельные SSD накопители используются в качестве буфера для часто запрашиваемых данных. Система определяет данные по степени “теплоты” и перемещает их на быстрый накопитель, используемый в качестве кэширующего диска. Кэш позволяется системе получать доступ к данным в несколько раз быстрее, чем если бы они были получены с более медленного жесткого диска.
После установки ОС на RAID1 из двух SATA дисков, мы подключили отдельный SSD диск на 240 Гб. Проверим, что он доступен:
# fdisk -l
SSD-кэширование включить до установки программ и настройки сервера.
С помощью менеджера пакетов установите утилиту lvm2, которая будет использоваться для реализации кэша .
# yum install lvm2 -y
После установки ПО, нужно определить блочное устройство SSD-диска и раздел, к которому примонтирована нужная директория. В моем случае это будет директория home, раздел для которой я создал при установке ОС.
Директории /home соответствует раздел /dev/md126p2. Обратите на это внимание, так как дальнейшая настройка будет связана именно с этим разделом.
Теперь можно перейти к настройке кэша. Отмонтируйте директорию:
# 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
Описание команд:
-
pvcreate
— инициализирует физический том для LVM -
vgcreate
– создать группу томов -
lvcreate -l
– создать логический том, размер тома указывается в процентах -
lvcreate -L
– создание логического тома с метаданными для кэша -
lvconvert
— объединяем кэш-пул и логический том через метаданные. Задаем режима кеширования, в нашем случае writeback.
Есть два режима кеширования:
- Writeback — данные сначала пишутся в кэш, затем на диск. Это более производительный вариант. При сбое кэширующего SSD диска, вы потеряете данные, которые не успели записаться на HDD. Хотя и не рекомендуется использовать этот режим на серверах с SSD без RAID, мне кажется с учетом надежности SSD дисков, это вполне рабочее решение.
- Writethrough — данные сразу пишутся одновременно на диск и в кэш, после чего наиболее часто используемые попадают в кэш. Это безопасный вариант, подходит для серверов с 1*SSD, но гораздо менее производительный.
Выбранный режим кэширования относится только к операциям записи. На скорость чтения данных с LVM тома с кэшем он не влияет.
После выполнения всех настроек, можно проверить кэш на наличие ошибок:
# lvs -a
Если ошибок нет, значит вы все сделали верно. Данная команда покажет процент использования кэша. На данный момент размер кэша будет чуть практически нулевой.
Теперь создадим файловую систему на новом LVM разделе:
# mkfs.ext4 /dev/ssdcache/hdd_data
После создания раздела, нужно определить его UUID, чтобы заменить его в fstab:
# blkid|grep cache
/dev/mapper/ssdcache-hdd_data: UUID="a89f0bb8-7bb2-4d83-87e2-39918154135b" TYPE="ext4"
Заменяем в /etc/fstab
# nano /etc/fstab
После замены UUID в fstab для нужного раздела, перезагрузите сервер и проверяем текущие настройки:
# df -h
Чтобы узнать текущий режим работы SSD кэша, используйте команду:
# lvs -o+cache_mode ssdcache
Для смены режима, используются команды:
# 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 раза.
Linux
Настройка SSD кеширования LVM Cache в CentOS