Linux I/O. Вторая жизнь.

Рано или поздно в жизни любого администратора (либо владельца сервера) настает момент, когда серверу уже недостаточно текущих ресурсов. Причём, учитывая современные мощности, довольно часто узким местом становится дисковая подсистема. Сегодня мы хотели бы рассказать о том, как в определённых условиях можно обойтись без существенного апгрейда оборудования при минимуме затрат.

 

Дано:

Сервер с Linux (в данном случае Centos) на борту, аппаратный RAID-10, 4 x 500 GB HDD. Каждые 5 минут на диски пишется большое количество данных, что приводит к очень существенному замедлению работы дисковой подсистемы. При этом памяти и процессорных ресурсов более чем достаточно, поэтому обновлять оборудование не совсем целесообразно.

 

Задача:

Заставить сервер работать быстро при минимуме затрат.

 

И выход был найден — модуль ядра flashcache, который был разработан компанией Facebook.

Разрабатывался он как раз для подобных случаев когда одни блочные устройства (большие и медленные) используются для хранения данных, а другие (небольшие и быстрые) — для кеширования обращений к первым. Таким образом, flashcache соединяет воедино достоинства обоих видов дисковых накопителей. На сегодняшний день самыми быстрыми являются SSD диски, и нами было принято решение о приобретении серверного SSD OCZ Deneva 2 60 GB.
Даже если некуда вставить ещё один диск (а именно так и было у нас), выход тоже есть: адаптер SATA форм-фактора Slim DVD, например, Espada SS12
Espada SS12

Итак, приступим.

Скачиваем исходники с GitHub, распаковываем.

Сначала нужно установить необходимые для сборки пакеты и  заголовки текущего ядра:

{code}yum -y kernel-headers-$(uname -r) redhat-rpm-config unifdef{/code}

Собираем и устанавливаем модуль:

{code}make
make install{/code}

Если сборка прошла успешно, загружаем модуль:

{code}modprobe flashcache{/code}

Теперь приступим к самому интересному — созданию нового устройства, с которым впоследствии и будет работать ОС.

Допустим, мы хотим использовать flashcache для кеширования обращений к разделу /home, который является девайсом sda6.

Определим UUID диска:

{code}ls -la /dev/disk/by-uuid/1f8a05a7-06ec-4490-a22f-6291cbba9cac -> ../../sda6{/code}

Про UUID уже много сказано. Мы всегда предпочитаем использовать UUID вместо порядковых имен дисков в Linux, чтобы при замене одного из HDD не возникло проблем с нумерацией (мало ли: все могут ошибиться, инженер дата-центра в том числе)

Создадим новый девайс cachedev:

{code}flashcache_create -v -p thru cachedev \
/dev/sdb /dev/disk/by-uuid/1f8a05a7-06ec-4490-a22f-6291cbba9cac{/code}

Разберём каждый аргумент команды:

1. -p thru — Политика кеширующего устройства WriteThrough, которую мы использовали при создании кеширующего устройства cachedev, выбрана не случайно: пусть она будет не настолько быстра (нежели WriteBack), зато обеспечивает большую сохранность данных при разнообразных сбоях.
2. /dev/sdb — наш SSD диск, который будет использоваться для кеширования
3. /dev/disk/by-uuid/… — UUID диска, операции с которым мы хотим кешировать
4. -v — verbose (детализация вывода результатов команды)

Далее правим /etc/fstab, у нас вышло так:
{code}UUID=1f8a05a7-06ec-4490-a22f-6291cbba9cac /home ext4 defaults,usrquota,noatime 1 2{/code}
(UUID нового устройства, точка монтирования, фаловая система, параметры и т.д. — всё это в вашем случае может и будет другим).

Монтируем новый девайс:
{code}mount -o rw,remount /home{/code}

В итоге, у нас получилось так:

cpu iowait flashcache

Стрелкой на графике обозначен момент переключения на flashcache device. Как видно, iowait резко упал до нуля. Текущая статистика обращений к кешу:

flashcache hit percents
В нашем случае (мы много-много пишем на диск, помните?) количество write hit достигает 99%.
Итог: мы работой данной технологии более чем довольны 🙂

PS: бонус для тех, кто дочитал статью до конца.
В описанных выше условиях, при загрузке ОС возникнет проблема: запись в fstab есть, а сам раздел недоступен (на данном этапе модуль flashcache ещё не загружен, и ОС не может найти блочное устройство). Для успешной эксплуатации потребуется удалить запись о разделе из fstab, и воспользоваться init-скриптом. На 53 строке потребуется поправить условие с -L на -e, т.к. условием должно выступать наличие файла, а не директории.

One thought on “Linux I/O. Вторая жизнь.

  1. Александр Reply

    В этих тарифах — https://www.ihc.ru/vps.html все это уже включено или нужно настраивать вручную как описано выше, после приобретения VPS у вас?

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

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