2. Зачем?
§ On-demand blocks allocation:
§ Старый добрый overselling
§ «Прозрачное» добавление ресурсов по необходимости
§ Побочный эффект — возможность создания снэпшотов в
«правильном» порядке
Использование LVM thin provisioning. 2014
3. Отсортируем в порядке важности для меня
§ Побочный эффект — возможность создания снэпшотов в
«правильном» порядке
§ «Прозрачное» добавление ресурсов по необходимости
§ Старый добрый overselling*
* Мы не оверселлим!
Использование LVM thin provisioning. 2014
5. Как снэпшоты работали раньше?
§ Доктор, откуда у вас такие картинки?
§ Это blktrace + iowatcher
§ По оси X — время, по оси Y — смещение относительно
начала диска
§ Исследуется запуск bonnie++ (последовательная запись,
потом перезапись записанного, потом случайное чтение,
потом создание большой пачки файлов)
Использование LVM thin provisioning. 2014
6. Как снэпшоты работали раньше?
§ Алгоритм последовательной записи:
§ Сначала читаются данные, которые были на разделе
исходно
§ Потом они записываются на отдельный раздел (кстати, он
может переполниться)
§ Потом, наконец, данные записываются куда следует
§ Вместо одной записи — чтение и две записи
Использование LVM thin provisioning. 2014
7. Как работает без снэпшотов?
Использование LVM thin provisioning. 2014
8. Как организовать LVM thin provisioning?
§ pvcreate и vgcreate — как обычно
§ lvcreate --size 1700G --type thin-pool --thinpool thin_pool vg0
§ ^ Создаем ThinPoolLV (ThinDataLV + ThinMetaLV)
§ Можно разбить на два этапа:
§ lvcreate -n pool0 -L 1600G vg0
§ lvcreate -n pool0meta -L 110M vg0
§ lvconvert --thinpool vg/pool0 --poolmetadata vg/pool0meta
Использование LVM thin provisioning. 2014
9. Как организовать LVM thin provisioning?
§ Создание thin provisioned томов:
§ lvcreate -V300G -T vg0/thin_pool --name var
§ lvcreate -V100G -T vg0/thin_pool --name home
§ Создание thin снэпшотов:
§ lvcreate -s -n home_`date +"%F-%H"` /dev/vg0/home
§ lvcreate -s -n var_`date +"%F-%H"` /dev/vg0/var
Использование LVM thin provisioning. 2014
10. Как теперь работает снэпшот?
§ Thin том (thin снэпшот) — это блоки данных и метаданные,
описывающие их принадлежность
§ Одна запись — это (почти) всегда одна запись, если не
считать метаданные
§ Новые данные пишутся последовательно, старые — в
зависимости от того, принадлежат или нет они какому-
нибудь снэпшоту
§ ^ Последовательная запись не всегда последовательна
§ Одновременная запись в два тома — тоже боль
Использование LVM thin provisioning. 2014
11. Совместимость с популярными сборками Linux
§ OpenSUSE, Gentoo, ArchLinux, ... - ???
§ Ubuntu 14.04 — LVM нужной версии, есть пакет thin-provisioning-tools,
без которого нельзя грузиться с thin LV и монтировать их через
fstab
§ Ubuntu 12.04 — LVM из бэкпортов, thin-provisioning-tools я собрал
статически:
§ http://ns2.1888.spb.ru/thin-provisioning-tools_0.2.8-1_amd64.deb
§ Для 14.04 и 12.04 нужны хуки для initramfs: http://goo.gl/2ckrdG
Использование LVM thin provisioning. 2014
12. О чем еще необходимо помнить
§ Область метаданных может переполниться
§ Чем больше снэпшотов — тем быстрее заполняется область
метаданных
§ Новые блоки данных заполняются нулями перед их отдачей в
thin LV, к счастью, это можно отключить командой
§ lvchange -Zn vg0/thin_pool (только вот в LVM 2.02.95 такой
команды еще нет)
Использование LVM thin provisioning. 2014
13. Выводы:
§ Пользователи Linux должны страдать
§ Варианты страдания различаются:
§ ZFSOnLinux
§ BTRFS
§ LVM thin provisioning
§ Но суть остается неизменной!
§ man lvmthin — отличное чтение на ночь
Использование LVM thin provisioning. 2014
15. С вами был Александр Чистяков,
главный инженер Git in Sky
alex@gitinsky.com
http://gitinsky.com
http://meetup.com/DevOps-40
Пожалуйста, ваши вопросы.
Спасибо за внимание!