SlideShare a Scribd company logo
1 of 35
Download to read offline
Git in Sky, 2013
ZFS — файловая система
будущего
Git in Sky, 2013
Пара слов о будущем
● Первый релиз ZFS был в 2005-м
● 2005-й — не совсем «будущее»
● «Конверсионные военные технологии»?
● «Нанопокрытие» в «Телемагазине»?
● «Парадокс близнецов»:
● Пока коллеги несли вахту в космосе, здесь,
● на Земле, многое изменилось
Git in Sky, 2013
Итак, кто я?
● Ваш проводник по современной Земле
● (Веб) разработчик с большим стажем
● Инженер по эксплуатации веб-проектов с
большим стажем
● Инженер компании Git in Sky
● ZFS-аддикт
● ^ а можно ли верить словам наркомана?
Git in Sky, 2013
Кто вы?
● Вернувшиеся на Землю космо(астро?)навты
● Архитекторы программных систем
● CIO, CTO
● Веб-разработчики
● Системные администраторы (инженеры)
Git in Sky, 2013
Зачем?
● Файловая система хранит данные
● Хорошая файловая система обеспечивает
быстрый доступ и быструю модификацию
● UNIX way:
● Файловая система хранит данные
● Менеджер томов управляет томами
● fdisk создает разделы на дисках
● <другая программа> делает бэкапы
● Engineer's way:
● challenge the UNIX way
Git in Sky, 2013
В чем проблема?
● Языков программирования — 100 и больше
● Современных FS — 10 и вряд ли больше
● http://en.wikipedia.org/wiki/Memory_hierarchy
● Rotational media — медленно
● Non-rotational media — дорого, относительно
ненадежно, относительно ново
● Нужен компромисс
● ^ (пока еще)
Git in Sky, 2013
Немного истории
● FAT — 1977
● HFS — 1985
● JFS — 1990
● VxFS — 1991
● ext2 — 1993
● NTFS — 1993
● ReiserFS — 2001
● ZFS — 2005
● btrfs — 2009
Git in Sky, 2013
Возможности ZFS
● Управление томами
● Управление разделами
● Двухуровневое кэширование
● Контроль целостности данных
● Сжатие данных
● Дедупликация
● Снэпшоты
● (псевдо)Репликация
Git in Sky, 2013
Словарик
● «физический том» - «пул»
● «раздел» - «дейтасет»
● «логический том» - «ZVOL»
● «RAID1» - «mirror»
● «RAID5» ~ «raidz», «raidz1»
● «RAID6» ~ «raidz2»
● ^ нет времени объяснять, создавайте пул!
● Бывает также «raidz3»
● ^ цифра — просто число parity disks
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» поговорим отдельно
Git in Sky, 2013
Операции с пулом
● zpool destory - никогда так не делайте!
● zpool export - «отключить» пул
● zpool import - «подключить» пул
● zpool replace <name> <dev1> <dev2> -
заменить устройство dev1 устройством dev2
● ^ при этом выполнится операция
«resilvering», при которой вся занятая часть
пула прочитывается и перераспределяется с
учетом добавленного устройства
● Это еще не всё!
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
● ^ установим другую точку монтирования
(целевой каталог обязательно должен
быть пустым!), изменения мгновенны
Git in Sky, 2013
Управление дейтасетами
● zfs umount <name>
● zfs mount <name>
● zfs rename <oldname> <newname>
● zfs userspace <name>
● zfs groupspace <name>
● ^ показывают, сколько места занимают
файлы пользователей/групп
Git in Sky, 2013
Управление дейтасетами
● zfs set userquota@name=size
● ^ ограничивает выделенное пространство
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
● И это еще не всё!
Git in Sky, 2013
Кэширование
● ARC (adaptive replacement cache) — одна из
главных составляющих ZFS
● Кэширует frequently used и recently used
records, динамически распределяя память
между ними
● L2ARC — кэш второго уровня (тип vdev
«cache», обычно используется SSD)
● Необходимо помнить, что при использовании
L2ARC из ARC выделяется память под
headers, что сказывается на эффективном
размере ARC
Git in Sky, 2013
Размер ARC в памяти
Git in Sky, 2013
Сколько отдать под
ARC?
● MRU Ghost / MFU Ghost — «уже были в кэше,
но были
вытеснены,
и попали
в него
опять»
● меньше -
лучше
Git in Sky, 2013
Размер L2ARC
Git in Sky, 2013
Снова свойства
дейтасетов
● zpool/live primarycache all default
● zpool/live secondarycache all default
● Варианты вместо «all»:
● «metadata» - только метаданные
● «none» - вообще ничего
● По умолчанию - «all», что означает
«кэшировать всё»
Git in Sky, 2013
Снова операции с пулом
● Контроль целостности данных:
● zpool scrub pool0 — запустить проверку
● zpool scrub -s pool0 — прервать проверку
● ZFS хранит контрольные суммы каждой
записи и проверяет их соответствие
● В связи с тем, что под действием злых сил из
космоса битики протухают — это очень
здравая идея
● А иногда и космос не при чем
● zpool status <name>
Git in Sky, 2013
Иногда протухает сама
железка
● Да, я уже заказал новую
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
Git in Sky, 2013
Дедупликация?
● Нет, не слышал!
● Сравниваются контрольные суммы записей,
если совпадают — вторая копия не хранится
● Не бесплатно — таблицы дедупликации
хранятся в RAM (есть патчи для хранения их
на SSD, но они не в открытом доступе)
● ^ вот поэтому я ее никогда не использую —
RAM более дорогой ресурс, чем
пространство на диске
Git in Sky, 2013
Снэпшоты
● Снэпшот — мгновенное состояние системы
● ZFS работает при помощи механизма CoW —
данные никогда не перезаписываются
● Создание снэпшота происходит мгновенно
● Практически не потребляют ресурсов (кроме
места на диске)
● Проблемы начинались при 3000-6000
снэпшотов
● Сравните с LVM!
● Но чудес не бывает — удаление снэпшотов
достаточно ресурсоемко
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)
● Иерархия — дерево
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
● ^ так мне нравится гораздо больше
Git in Sky, 2013
Сценарий
использования №2
● Окружения разработчиков — большой дамп
базы, нужен каждому свежий
● 10 окружений — 10 баз
● 10 раз вливать дамп?
● Дамп вливается один раз, после чего zfs
snapshot, zfs clone и ряд других манипуляций
● ^ очень сильно экономятся время и место
Git in Sky, 2013
Репликация
● zfs send <snap_name> | zfs receive <name>
● send читает данные с диска и пишет в
stdout, receive — с stdin пишет на диск
● Это не было бы похоже на репликацию, если
бы не
● zfs send -i <base_snapshot> <target_snapshot>
● ^ генерит инкрементальные апдейты
● Их можно пересылать по сети
● Чтобы применять инкрементальные апдейты,
целевой дейтасет должен быть
немодифицированным (я ставлю в r/o)
Git in Sky, 2013
ZFS не умеет
● Наливать пиво
● Работать на low-end железе
● Быть кластерной файловой системой
● Поддерживать флаг O_DIRECT вызова open()
● ^ cache=none для KVM не работает
● innodb_flush_method=O_DIRECT не
работает
● ^ свойство sync=disabled — это то же самое
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
Git in Sky, 2013
В ZFS нельзя
● Начинать использование, не настраивая:
● Нужно понимать характер нагрузки
● Базы данных и системы виртуализации
требуют recordsize=8k, а не 128k default
● Разделу, экспортированному по NFS, лучше
поставить sync=disabled, иначе высокое
latency
● Занимать пул более чем на 70-80%
● ^ помните, у меня стояла quota?
Специально поставлена!
Git in Sky, 2013
Бывают ли проблемы?
● http://goo.gl/GulrMQ — пишут , что нет (врут)
● http://goo.gl/AUguXi — восстановление пула
после сбоя вручную (ZFS не была причиной
сбоя)
● За два года использования у меня был один
сбой (ZFS не была причиной сбоя)
● Я поступил как читер — вместо ручного
восстановления просто импортировал пул в
Solaris 11, в версии ZFS которого проблема
уже была исправлена
Git in Sky, 2013
Выводы
● ZFS — отличный продукт инженерной мысли
● Вы можете не использовать ZFS, но теперь,
после того, как я вам все рассказал,
● Вы должны придумать ответ на вопрос:
● «Почему я еще не использую ZFS?»
● (И это должен быть не стыдный ответ)
Git in Sky, 2013
Обязательный слайд
● Спасибо! С вами был
● Александр Чистяков, инженер
● Компания Git in Sky
● alex@gitinsky.com

More Related Content

What's hot

My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Ontico
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)Ontico
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConAlex Chistyakov
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Ontico
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоCodeFest
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose HadoopSerguei Gitinsky
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) АксеновAlex Chistyakov
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаКонстантин Никифоров
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиOSLL
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Ontico
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Ontico
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 

What's hot (20)

My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
Что особенного в СУБД для данных в оперативной памяти / Константин Осипов (Ta...
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
DPDK в виртуальном коммутаторе Open vSwitch / Александр Джуринский (Selectel)
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
My talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPConMy talk on Hadoop stack operations engineering at OSPCon
My talk on Hadoop stack operations engineering at OSPCon
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Why we did not choose Hadoop
Why we did not choose HadoopWhy we did not choose Hadoop
Why we did not choose Hadoop
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
"Мы два месяца долбались, а потом построили индекс" (c) Аксенов
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
обзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторингаобзор архитектуры и подсистем деплоя и мониторинга
обзор архитектуры и подсистем деплоя и мониторинга
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...Автоматизация тестирования клиентской производительности / Николай Лавлинский...
Автоматизация тестирования клиентской производительности / Николай Лавлинский...
 
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
Строим сервисы на базе Nginx и Tarantool / Василий Сошников, Андрей Дроздов (...
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 

Similar to ZFS - файловая система будущего

SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4Alex Chistyakov
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаITCrowd Almaty
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013Alex Chistyakov
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеAlex Chistyakov
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...SQALab
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Ontico
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...IT-Portfolio
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg PresentationHighLoad2009
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...IT-Portfolio
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrusAlex Chistyakov
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalVlad Savitsky
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014it-people
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_drupalconf
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе dockerIvan Grishaev
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годAnton Turetsky
 

Similar to ZFS - файловая система будущего (20)

SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4SmartOS on SPb.LinuxFest 2013Q4
SmartOS on SPb.LinuxFest 2013Q4
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 
SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013SaltStack vs Chef, HappyDev 2013
SaltStack vs Chef, HappyDev 2013
 
Презентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в МинскеПрезентация про DTrace на ADDconf в Минске
Презентация про DTrace на ADDconf в Минске
 
Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...Применение DTrace для оптимизации производительности на примере двух больших ...
Применение DTrace для оптимизации производительности на примере двух больших ...
 
Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)Сергей Житинский, Александр Чистяков (Git in Sky)
Сергей Житинский, Александр Чистяков (Git in Sky)
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
16 декабря, DEV {highload} - конференция о Highload веб-разработке, "Эксплуат...
 
High Load 2009 Imdg Presentation
High Load 2009   Imdg PresentationHigh Load 2009   Imdg Presentation
High Load 2009 Imdg Presentation
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
20 апреля, DEV {highload}, "Демоны в большом проекте – проблемы и их решения ...
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
Оптимизация JavaScript в Drupal
Оптимизация JavaScript в DrupalОптимизация JavaScript в Drupal
Оптимизация JavaScript в Drupal
 
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
Я. Садовская "Управление конфигурациями и тестовой средой", DUMP-2014
 
Hosting for forbes.ru_
Hosting for forbes.ru_Hosting for forbes.ru_
Hosting for forbes.ru_
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 

More from Alex Chistyakov

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019Alex Chistyakov
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 Alex Chistyakov
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018Alex Chistyakov
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtAlex Chistyakov
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019Alex Chistyakov
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019Alex Chistyakov
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and KubernetesAlex Chistyakov
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017Alex Chistyakov
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMAlex Chistyakov
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017Alex Chistyakov
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10Alex Chistyakov
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017Alex Chistyakov
 

More from Alex Chistyakov (20)

My slides from DevOpsDays 2019
My slides from DevOpsDays 2019My slides from DevOpsDays 2019
My slides from DevOpsDays 2019
 
My slides from BMM №3 May 2019
My slides from BMM №3 May 2019My slides from BMM №3 May 2019
My slides from BMM №3 May 2019
 
My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019 My slides from DevOps-40 meetup Jun 2019
My slides from DevOps-40 meetup Jun 2019
 
My slides from SECR'2018
My slides from SECR'2018My slides from SECR'2018
My slides from SECR'2018
 
My slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArtMy slides from the first SPb SRE community meetup at DataArt
My slides from the first SPb SRE community meetup at DataArt
 
My slides from CC'2019
My slides from CC'2019My slides from CC'2019
My slides from CC'2019
 
My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019My slides from BMM №4 Nov 2019
My slides from BMM №4 Nov 2019
 
My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019My slides from DevOps-40 meetup Oct 2019
My slides from DevOps-40 meetup Oct 2019
 
My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019My slides from DevOps-40 meetup Dec 2019
My slides from DevOps-40 meetup Dec 2019
 
Configuration management and Kubernetes
Configuration management and KubernetesConfiguration management and Kubernetes
Configuration management and Kubernetes
 
Ansible and other stuff
Ansible and other stuffAnsible and other stuff
Ansible and other stuff
 
Python performance engineering in 2017
Python performance engineering in 2017Python performance engineering in 2017
Python performance engineering in 2017
 
My talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGMMy talk at SPb SQA sub-meetup of ITGM
My talk at SPb SQA sub-meetup of ITGM
 
My talk at SECR 2017
My talk at SECR 2017My talk at SECR 2017
My talk at SECR 2017
 
On scaling teams
On scaling teamsOn scaling teams
On scaling teams
 
MariaDB workshop
MariaDB workshopMariaDB workshop
MariaDB workshop
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
My talk on DevOps engineer's adventures in the Windows world at UWDC 2017
 
My talk on GitHub open data at ITGM #10
 My talk on GitHub open data at ITGM #10 My talk on GitHub open data at ITGM #10
My talk on GitHub open data at ITGM #10
 
My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017My talk on DevOps :) at Stachka 2017
My talk on DevOps :) at Stachka 2017
 

ZFS - файловая система будущего

  • 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 — дорого, относительно ненадежно, относительно ново ● Нужен компромисс ● ^ (пока еще)
  • 7. Git in Sky, 2013 Немного истории ● FAT — 1977 ● HFS — 1985 ● JFS — 1990 ● VxFS — 1991 ● ext2 — 1993 ● NTFS — 1993 ● ReiserFS — 2001 ● ZFS — 2005 ● btrfs — 2009
  • 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
  • 17. Git in Sky, 2013 Размер ARC в памяти
  • 18. Git in Sky, 2013 Сколько отдать под ARC? ● MRU Ghost / MFU Ghost — «уже были в кэше, но были вытеснены, и попали в него опять» ● меньше - лучше
  • 19. Git in Sky, 2013 Размер L2ARC
  • 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