1. Git in Sky, 2013
ZFS — файловая система
будущего
2. Git in Sky, 2013
Пара слов о будущем
● Первый релиз ZFS был в 2005-м
● 2005-й — не совсем «будущее»
● «Конверсионные военные технологии»?
● «Нанопокрытие» в «Телемагазине»?
● «Парадокс близнецов»:
● Пока коллеги несли вахту в космосе, здесь,
● на Земле, многое изменилось
3. Git in Sky, 2013
Итак, кто я?
● Ваш проводник по современной Земле
● (Веб) разработчик с большим стажем
● Инженер по эксплуатации веб-проектов с
большим стажем
● Инженер компании Git in Sky
● ZFS-аддикт
● ^ а можно ли верить словам наркомана?
4. Git in Sky, 2013
Кто вы?
● Вернувшиеся на Землю космо(астро?)навты
● Архитекторы программных систем
● CIO, CTO
● Веб-разработчики
● Системные администраторы (инженеры)
5. Git in Sky, 2013
Зачем?
● Файловая система хранит данные
● Хорошая файловая система обеспечивает
быстрый доступ и быструю модификацию
● UNIX way:
● Файловая система хранит данные
● Менеджер томов управляет томами
● fdisk создает разделы на дисках
● <другая программа> делает бэкапы
● Engineer's way:
● challenge the UNIX way
6. Git in Sky, 2013
В чем проблема?
● Языков программирования — 100 и больше
● Современных FS — 10 и вряд ли больше
● http://en.wikipedia.org/wiki/Memory_hierarchy
● Rotational media — медленно
● Non-rotational media — дорого, относительно
ненадежно, относительно ново
● Нужен компромисс
● ^ (пока еще)
8. Git in Sky, 2013
Возможности ZFS
● Управление томами
● Управление разделами
● Двухуровневое кэширование
● Контроль целостности данных
● Сжатие данных
● Дедупликация
● Снэпшоты
● (псевдо)Репликация
9. Git in Sky, 2013
Словарик
● «физический том» - «пул»
● «раздел» - «дейтасет»
● «логический том» - «ZVOL»
● «RAID1» - «mirror»
● «RAID5» ~ «raidz», «raidz1»
● «RAID6» ~ «raidz2»
● ^ нет времени объяснять, создавайте пул!
● Бывает также «raidz3»
● ^ цифра — просто число parity disks
10. Git in Sky, 2013
Создание пула
● zpool create <name> <vdev1> ... <vdevN>
● vdev - <type> <dev1> ... <devN>
● vdev types: «disk», «file», «mirror», «raidz»,
«raidz2», «raidz3», «spare», «log», «cache»
● «raidz» - это такой RAID5 без проблемы
«RAID5 write hole»
● vdevs не могут быть вложенными (нельзя
сделать зеркало зеркал и т.п.)
● Про «log» и «cache» поговорим отдельно
11. Git in Sky, 2013
Операции с пулом
● zpool destory - никогда так не делайте!
● zpool export - «отключить» пул
● zpool import - «подключить» пул
● zpool replace <name> <dev1> <dev2> -
заменить устройство dev1 устройством dev2
● ^ при этом выполнится операция
«resilvering», при которой вся занятая часть
пула прочитывается и перераспределяется с
учетом добавленного устройства
● Это еще не всё!
12. Git in Sky, 2013
Управление дейтасетами
● pool0 исходно смонтирован в /pool0
● /etc/fstab по умолчанию не используется
● точка монтирования — свойство раздела
● zfs create pool0/nfs-exports
● ^ точка монтирования наследуется и будет
/pool0/nfs-exports
● zfs set mountpoint=/var/lib/nfs-exports
pool0/nfs-exports
● ^ установим другую точку монтирования
(целевой каталог обязательно должен
быть пустым!), изменения мгновенны
13. Git in Sky, 2013
Управление дейтасетами
● zfs umount <name>
● zfs mount <name>
● zfs rename <oldname> <newname>
● zfs userspace <name>
● zfs groupspace <name>
● ^ показывают, сколько места занимают
файлы пользователей/групп
14. Git in Sky, 2013
Управление дейтасетами
● zfs set userquota@name=size
● ^ ограничивает выделенное пространство
15. Git in Sky, 2013
Свойства дейтасетов
● zfs get all zpool/live
● пул свойство значение происхождение
● zpool/live quota 3.91T local
● zpool/live recordsize 128K default
● zpool/live compression lz4 local
● zpool/live primarycache all default
● zpool/live secondarycache all default
● zpool/live sync disabled local
● И это еще не всё!
16. Git in Sky, 2013
Кэширование
● ARC (adaptive replacement cache) — одна из
главных составляющих ZFS
● Кэширует frequently used и recently used
records, динамически распределяя память
между ними
● L2ARC — кэш второго уровня (тип vdev
«cache», обычно используется SSD)
● Необходимо помнить, что при использовании
L2ARC из ARC выделяется память под
headers, что сказывается на эффективном
размере ARC
20. Git in Sky, 2013
Снова свойства
дейтасетов
● zpool/live primarycache all default
● zpool/live secondarycache all default
● Варианты вместо «all»:
● «metadata» - только метаданные
● «none» - вообще ничего
● По умолчанию - «all», что означает
«кэшировать всё»
21. Git in Sky, 2013
Снова операции с пулом
● Контроль целостности данных:
● zpool scrub pool0 — запустить проверку
● zpool scrub -s pool0 — прервать проверку
● ZFS хранит контрольные суммы каждой
записи и проверяет их соответствие
● В связи с тем, что под действием злых сил из
космоса битики протухают — это очень
здравая идея
● А иногда и космос не при чем
● zpool status <name>
22. Git in Sky, 2013
Иногда протухает сама
железка
● Да, я уже заказал новую
23. Git in Sky, 2013
Сжатие данных
● zpool/live compression lz4 local
● compression: «on», «off», «lzjb», «gzip-N» (1-9),
«gzip» (6), «zle», «lz4»
● Раньше default был «lzjb», сейчас — «lz4»
● Каждый record сжимается отдельно, чем
больше recordsize, тем лучше сжатие
● Я включаю сжатие всегда — чем меньше
данных на диске, тем быстрее они читаются
● Если данные уже сжаты — можно отключать
● zroot/nfs/old-mysql refcompressratio 2.49x
24. Git in Sky, 2013
Дедупликация?
● Нет, не слышал!
● Сравниваются контрольные суммы записей,
если совпадают — вторая копия не хранится
● Не бесплатно — таблицы дедупликации
хранятся в RAM (есть патчи для хранения их
на SSD, но они не в открытом доступе)
● ^ вот поэтому я ее никогда не использую —
RAM более дорогой ресурс, чем
пространство на диске
25. Git in Sky, 2013
Снэпшоты
● Снэпшот — мгновенное состояние системы
● ZFS работает при помощи механизма CoW —
данные никогда не перезаписываются
● Создание снэпшота происходит мгновенно
● Практически не потребляют ресурсов (кроме
места на диске)
● Проблемы начинались при 3000-6000
снэпшотов
● Сравните с LVM!
● Но чудес не бывает — удаление снэпшотов
достаточно ресурсоемко
26. Git in Sky, 2013
Работа со снэпшотами
● zfs snapshot <dataset>@<snapshot_name>
● zfs snapshot zroot/vbox-images/client@clean
● Снэпшоты можно только читать
● ^ на самом деле, их можно клонировать
● zfs clone zroot/vbox-images/client@clean
zroot/vbox-images/client-2
● Клоны снэпшотов — обычные дейтасеты (r/w)
● Иерархия — дерево
27. Git in Sky, 2013
Сценарий
использования №1
● Снэпшоты — отличная защита от логического
сбоя («хакер удалил весь контент»)
● Их можно делать хоть каждый час
● Восстановление:
● zfs rollback <snapshot_name>
● ^ я никогда не использовал, деструктивно,
убьет все более поздние данные
● zfs set mountpoint=/tmp1 zroot/orig_ds
● zfs clone zroot/orig_ds@snap zroot/new_ds
● zfs set mountpoint=/orig zroot/new_ds
● ^ так мне нравится гораздо больше
28. Git in Sky, 2013
Сценарий
использования №2
● Окружения разработчиков — большой дамп
базы, нужен каждому свежий
● 10 окружений — 10 баз
● 10 раз вливать дамп?
● Дамп вливается один раз, после чего zfs
snapshot, zfs clone и ряд других манипуляций
● ^ очень сильно экономятся время и место
29. Git in Sky, 2013
Репликация
● zfs send <snap_name> | zfs receive <name>
● send читает данные с диска и пишет в
stdout, receive — с stdin пишет на диск
● Это не было бы похоже на репликацию, если
бы не
● zfs send -i <base_snapshot> <target_snapshot>
● ^ генерит инкрементальные апдейты
● Их можно пересылать по сети
● Чтобы применять инкрементальные апдейты,
целевой дейтасет должен быть
немодифицированным (я ставлю в r/o)
30. Git in Sky, 2013
ZFS не умеет
● Наливать пиво
● Работать на low-end железе
● Быть кластерной файловой системой
● Поддерживать флаг O_DIRECT вызова open()
● ^ cache=none для KVM не работает
● innodb_flush_method=O_DIRECT не
работает
● ^ свойство sync=disabled — это то же самое
31. Git in Sky, 2013
ZFS бывает под
● Oracle Solaris 11
● OpenSolaris — Illumos — Illumos-based distros
(тысячи их!)
● FreeBSD
● NetBSD (не пытайтесь дома)
● MacOS X
● Linux:
● ZFS-FUSE
● ZoL — kernel module
● нельзя включить в ядро, CDDL — GPL
32. Git in Sky, 2013
В ZFS нельзя
● Начинать использование, не настраивая:
● Нужно понимать характер нагрузки
● Базы данных и системы виртуализации
требуют recordsize=8k, а не 128k default
● Разделу, экспортированному по NFS, лучше
поставить sync=disabled, иначе высокое
latency
● Занимать пул более чем на 70-80%
● ^ помните, у меня стояла quota?
Специально поставлена!
33. Git in Sky, 2013
Бывают ли проблемы?
● http://goo.gl/GulrMQ — пишут , что нет (врут)
● http://goo.gl/AUguXi — восстановление пула
после сбоя вручную (ZFS не была причиной
сбоя)
● За два года использования у меня был один
сбой (ZFS не была причиной сбоя)
● Я поступил как читер — вместо ручного
восстановления просто импортировал пул в
Solaris 11, в версии ZFS которого проблема
уже была исправлена
34. Git in Sky, 2013
Выводы
● ZFS — отличный продукт инженерной мысли
● Вы можете не использовать ZFS, но теперь,
после того, как я вам все рассказал,
● Вы должны придумать ответ на вопрос:
● «Почему я еще не использую ZFS?»
● (И это должен быть не стыдный ответ)
35. Git in Sky, 2013
Обязательный слайд
● Спасибо! С вами был
● Александр Чистяков, инженер
● Компания Git in Sky
● alex@gitinsky.com