flashcache

yum localinstall http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm DKMS
yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Исходная конфигурация сервера — 2 диска (sda, sdb) и один SSD (sdc). Задача — ускорить работу LVM-раздела, где будут располагаться данные виртуальных серверов (KVM).

Фрагмент kickstart:
part raid.01 --size=250 --asprimary --ondisk=sda
part raid.02 --size=250 --asprimary --ondisk=sdb

part raid.11 --size=40000 --ondisk=sda
part raid.12 --size=40000 --ondisk=sdb

part raid.21 --size=8192 --ondisk=sda
part raid.22 --size=8192 --ondisk=sdb

part raid.31 --size=1 --grow --ondisk=sda
part raid.32 --size=1 --grow --ondisk=sdb

raid /boot --fstype ext2 --device md0 --level=RAID1 raid.01 raid.02
raid / --fstype ext4 --device md1 --level=RAID1 raid.11 raid.12
raid swap --device md2 --level=RAID1 raid.21 raid.22

raid pv.01 --device md3 --level=RAID1 raid.31 raid.32
# примите во внимание, что md3 в ряде случаев меняет свой номер (например, становится md127).

Выключаем SELinux (setenforce 0 в командной строке, а в файле /etc/selinux/config устанавливаем его disable). Затем установим необходимые инструменты, получим исходные коды flashcache, скомпилируем и установим модуль:
yum install dkms gcc make yum-utils kernel kernel-devel git make gcc-c++ device-mapper iotop atop iftop mc inxi
cd /usr/local/src/
git clone git://github.com/facebook/flashcache.git
cd flashcache
make
make install

Загрузим модуль в ядро и удостоверимся, что это действие прошло успешно:
modprobe flashcache
lsmod |grep flashcache

Немного подправим /etc/lvm/lvm.conf. Необходимо найти строчку с filter = [ “a/.*/” ] и указать там несколько другое регулярное выражение:
filter = [ "r|/dev/md127|" ]

Подготовим устройство flashcache0 из нашего дискового массива и SSD-накопителя.
flashcache_create -v -p back flashcache0 /dev/sdc /dev/md127

Проверить готовность устройства и его статус можно разными способами. Во-первых, должен появится /dev/mapper/flashcache0, во-вторых, можно обратиться к /proc/flashcache/. Именно там будут находится специальные файлы со статистикой, например /proc/flashcache/sdc+md127/flashcache_stats.

Теперь дело за малым — автозапуск. Копируем /usr/local/src/flashcache/utils/flashcache в /etc/init.d/, устанавливаем верные права и порядок загрузки.

Редактируем /etc/init.d/flashcache, указываем верные наименования устройств. Кроме того, следует закомментировать вызовы команд mount/umount, ведь у нас используется LVM, где нет прямого монтирования разделов. Проверяем корректность работы скрипта командами /etc/init.d/flashcache stop, /etc/init.d/flashcache start или перезагрузкой системы. Вариант скрипта — см на http://pastebin.com/TtQjJu8T. Возможно взять готовый файл:

wget -O /etc/init.d/flashcache "http://stor.friendhosting.net/work/scripts/flashcache"
chmod +x /etc/init.d/flashcache
chkconfig --add /etc/init.d/flashcache

Далее создаем Volume Group (для примера — vds-vg1):
vgcreate vds-vg1 /dev/mapper/flashcache0
=============================================================================================
Выключите кэш. Варианты:
???
/etc/init.d/flashcache stop или
/etc/init.d/flashcache forcestop

См. подробнее https://raw.github.com/facebook/flashcache/master/doc/flashcache-sa-guide.txt

3) При замене модуля следует загрузится в single user, удалить старый кэш
vgchange -an
/etc/init.d/flashcache stop
flashcache_destroy /dev/sdc
заменить модуль
сделать новый кэш
flashcache_create -v -p back flashcache0 /dev/sdc /dev/md127
vgchange -ay??? — lvs появятся после ребута
проверить и перезагрузиться.
cat /proc/flashcache/sdc+md127/flashcache_stats
счетчики должны расти

cat /proc/flashcache/*/flashcache_errors

hdparm -T /dev/sdc

/dev/sdc:
Timing cached reads: 27954 MB in 2.00 seconds = 14000.68 MB/sec