2. Давайте знакомиться и дружить
Я:
Человек с горы
Опыт работы в должности не менее трех
лет
Навыки администрирования серверных
систем
3. Давайте знакомиться и дружить
Вы:
В зале есть пользователь MacBook?
Что он тут делает?
Системные администраторы
DevOps'ы
Ответственные за инфраструктуру (CTO,
архитекторы, etc, etc)
4. WARNING! DO NOT TRY @HOME!
Информации будет довольно много!
Прежде чем внедрять у себя — проверьте!
Сомневаетесь — не стесняйтесь спросить!
5. Содержание предыдущих серий
Первая серия: http://goo.gl/7bYAL
Началась с того, что виртуализация имеет
множество применений
Закончилась тем, что OpenVZ представлялась
неплохим решением для виртуализации
А ZFS — неплохим
решением для
организации
хранилища
Но был ряд проблем
6. Как скрестить ужа с ежом?
Напоминаю — ZFS не может быть принята
в ядро Linux
Две реализации — ZFS-FUSE и ZFS on
Linux
ZFS-FUSE — filesystem in userspace
Кроме того, ZFS-FUSE заброшен
ZFS on Linux — единственный живой
кандидат
Но был ряд проблем
7. Хроники внедрения
ZoL 0.6.0-rc7, Debian 6, OpenVZ
Постоянно заканчивалась память
Причина в том, что ARC не очень хорошо
интегрирован с ядром
Раз в три-семь дней — падения
8. Хроники внедрения
ZoL 0.6.0-rc9, CentOS 6, OpenVZ
Ограничить размер ARC
В /etc/modprobe.d/zfs.conf добавить
options zfs zfs_arc_max=2147483648
Uptime 210 дней
Но есть ряд проблем
9. Проблемы OpenVZ
Проблема с OpenJDK и FUTEX_WAIT:
http://goo.gl/N5dFw http://goo.gl/bwQ7a
http://goo.gl/lS55q
Проявляется в том, что JVM очень долго
стартует и при работе расходует CPU
Решена в RHEL ядрах
В ядрах Debian Stable не решена
Кстати, о ядрах, 3.2 уже здесь! (на
серверах), а где OpenVZ?
10. Пути решения
Взяли Oracle JDK — стартует быстро, но
расход процессора все равно велик
Сборка ядер от RHEL в deb-пакеты
Разработчики OpenVZ не рекомендуют
ядра Debian, только RHEL/CentOS
Скрипт для сборки deb-пакета:
http://goo.gl/X0Blo (спасибо, Роман!)
Сейчас все мои Debian-хосты используют
ядра от RHEL
11. Проблемы с OpenVZ на ZFS
Очень долго работал apt-get на guest'ах
Особенно это заметно при деплое на 10
машин на одном хосте
В ZoL 0.6.0-rc14 уже не наблюдается
Медленная работа с каталогами, в которых
много файлов
А что, если диск виртуализировать в виде
большого файла, а не части FS хоста?
Для OpenVZ это делается через ploop, но мы
не пробовали
Вместо этого OpenVZ поместили в KVM
виртуалку (почему, объясню позже)
12. Какие есть варианты?
Linux, OpenVZ, ZoL
ZFS
BTRFS — с версии ядра 3.7+, не раньше
HAMMER — а виртуализировать чем?
Linux
FreeBSD
Solaris
NetBSD — порт ZFS пока не готов
MacOS X — человек с MB еще здесь?
OpenVZ
VirtualBox — Solaris, Linux, FreeBSD
KVM — Linux, Solaris
FreeBSD jails
Solaris zones
13. Solaris
Долгая и запутанная история
Современная ситуация:
Oracle Solaris 11 — не Open Source
SmartOS — регулярно обновляется
OmniOS — регулярно обновляется
OpenIndiana — редко обновляется,
предназначена для десктопов
Illumian — не обновляется, нет KVM
Несколько других, менее известных сборок:
http://goo.gl/yihG4
14. SmartOS
Делается компанией Joyent
Составляет основу Joyent Cloud
Illumos kernel + open source drivers + ported
KVM + Node.JS
Управление виртуальными машинами с
помощью скрипта на JS
Собственная библиотека образов
виртуальных машин как для KVM, так и для
Zones
Естественно, образы ориентированы
на нужды Joyent Cloud
15. Развертывание SmartOS
Работает с USB flash
(Hetzner их продает за €40)
При установке автоматически создает
mirrored pool
Так как USB flash монтируется r/o, управление
конфигами не очень удобно — их нужно
копировать после рестарта
Firewall — ipfilter/ipnat
KVM виртуалки используют ZVOL
Общий образ клонируется
Каждая виртуалка — на своем разделе
16. Использование SmartOS
Первые десять дней все работало
Потом хост внезапно перегрузился
В Solaris есть crash dump раздел
Хост перезагружался в среднем раз-два в
неделю, crash dump раздел первый месяц
был пуст
Удалось получить дамп
Получить поддержку у авторов SmartOS не
удалось никакими путями
Даже через общих знакомых
Люди заняты, их можно понять
17. Наивная диагностика
По нашим наблюдениям, ребуты происходили
в моменты возрастания дисковой активности
Возможно, причина в драйверах контроллера
диска?
Странно, использовали обычный ICH9
Последующие эксперименты с такой же
дисковой подсистемой, но в OmniOS, не
выявили проблем
От SmartOS пришлось отказаться
Но ряд идей прижился
18. FreeBSD
Начинали с 9.0-RELEASE и VirtualBox 4.1.6
Железо: Core i7-3930K (HT, SpeedStep)
Для установки FreeBSD использовался
скрипт zfs-hetzner-9.0.sh (google it!),
впоследствии модифицированный мной
для 9.1
Проблемы начались сразу — виртуальные
машины работали с разной скоростью в
разные моменты времени (инсталляция
Debian занимала от 20 минут до 2 часов)
19. FreeBSD
Перешли на 9.0-STABLE и VirtualBox 4.2
У FreeBSD отличная (!) поддержка
Несколько раундов переписки в списке
рассылки про виртуализацию, и
проблему удалось решить
Суть проблемы: планировщик ОС
сбивался
Решение: отключить HT, отключить
SpeedStep, после чего планировщик стал
работать как надо
20. VirtualBox под FreeBSD
Иногда guest завершается с segfault
Иногда guest попадает в T-state, после чего
его не убить (проявлялось только на одном из
хостов)
Иногда guest перестает подавать признаки
жизни, при подключении к консоли — черный
экран
py-supervisor для слежения за guest'ами и
самодельный скрипт-watchdog для проверки
доступности по ping
sysctl debug.debugger_on_panic=0
21. Управление образами guest'ов
Файл или raw device?
Raw device в ZFS — ZVOL
В два раза медленнее, чем файл
Запись на ZVOL всегда синхронна!
(Если не сделано zfs set sync=disabled)
Но мы об этом узнали уже после того, как
выбрали файлы в качестве хранилища
Знание — сила!
22. Управление образами guest'ов
Каждый образ на своем ZFS разделе
Легче бэкапить, легче управлять
zfs snapshot pool/vol@`date +%F-%H` - и так
каждый час
На трех тысячах снэпшотов хост с ZoL начал
тормозить
(Сравните это с LVM)
Разные разделы могут иметь разные
параметры — сжатие, sync, настройки кэша
23. Управление образами guest'ов
zfs snapshot pool/vm1@master-copy
zfs clone pool/vm1@master-copy pool/vm2
zfs clone pool/vm1@master-copy pool/vm3
Теперь у нас не один, а три одинаковых
образа VM
А места на диске они занимают как один,
пишутся только изменения
Мы так клонировали 100-гигабайтную
PostgreSQL базу для стейджингов
24. Кстати, о PostgreSQL
Коллега обнаружил, что запрос на
PostgreSQL под FreeBSD работает в пять
раз медленнее, когда включена
репликация
Запись мешает чтению?
На машине с Linux и включенной
репликацией запрос работает в пять раз
быстрее!
Кто виноват?
25. Кто виноват?
Тестовый запрос:
update users set phone_number=id where id in (select
id from users offset 200000 limit 50000);
Ubuntu с ext4 — 15 минут
FreeBSD, Linux/ZoL, Solaris с экспортом по
iSCSI, Solaris с экспортом по NFS —
примерно 75 минут
Настройки PostgreSQL одинаковые
(дефолтные)
26. Что делать?
Делали sync=disabled
Уменьшали zfs recordsize до 8K (На что
надеялись? При записи вообще не влияет)
Пробовали VirtualBox, KVM, PostgreSQL во
FreeBSD jail
Ничего не помогает
Пока не знаю, в чем проблема
Надо попробовать профайлинг с DTrace
27. НЕ СПАТЬ, ПОЖАЛУЙСТА!
Ведь я пока рассказал всего только треть!
Но если вы — котик, то можно
28. Тем временем
Нужно было виртуализировать Windows
W2K8 как билд-сервер
Несколько WinXP для прочих нужд
На хосте Debian Stable + OpenVZ + ZoL
W2K8 не работает под версией KVM из
backports — STOP error ......., проблема с
паравиртуальными драйверами диска
А XP плохо работает с KVM из Debian
Stable — постоянные перезагрузки
29. Паравиртуальные драйвера
Свободные выходят по несколько раз в
год, а иногда и в месяц
Работают как мигалка (“работает”/”не
работает”), надо подбирать
Выяснилось, что XP под Debian Testing
ведет себя значительно стабильнее
W2K8 тоже работает под KVM из Testing
Но есть две проблемы:
Раз в месяц магически отваливается сеть
OpenVZ не портировано под ядро 3.2.0 из
состава Debian Testing
30. Сельхозмагия
При падении сети помогает зайти на
консоль XP-виртуалки по VNC и что угодно
там поделать — сеть вернется
Через четыре месяца это надоело, и
вместо KVM был взят хост с Windows и
Hyper-V, что закрыло вопрос навсегда
Чтобы сохранить существующие OpenVZ
контейнеры, их перенесли в Debian Stable
виртуальную машину, работающую под
KVM на хосте с Debian Testing
31. Раз уж речь зашла о KVM
Я просто не умею ее готовить
Но с каждым разом узнаю что-нибудь
новое
Диски — virtio, тип кэша хорошо бы none,
но ZFS не поддерживает Direct IO, поэтому
writeback
Если сторадж подключен по NFS или
iSCSI, тип кэша — none
Копируйте конфигурацию CPU с хоста,
чтобы не эмулировать лишние инструкции
32. И еще про KVM
KSM — Kernel Samepage Merging
Много одинаковых виртуалок — общая
память объединяется
В VirtualBox это называется “Page Fusion”
и работает только для Windows guests
Минус: приложение должно само сообщать
ядру, где находятся одинаковые страницы
Минус: сканирование идет медленно
UKSM, PKSM — сторонние пачти, выше
скорость, не нужны хинты от приложения
Но я пока не пробовал
33. Насколько хорош KSM?
cat /sys/kernel/mm/ksm/pages_sharing
На одном хосте (много однотипных
виртуалок) - 3378324
На другом — 309816
Скрипт для красивой печати:
http://goo.gl/LjKvh
13 гигабайт сэкономлено на первом хосте
и 1.2 гигабайта на втором
Визуальные наблюдения подтверждают
34. Тюнинг на стороне guest
Планировщик IO по умолчанию CFQ
Найдите на графике момент переключения
на deadline
Используйте deadline или noop!
35. Выводы
Третьей части — быть! (я ведь пока еще
ничего не рассказал про выделенные
сетевые хранилища)
Необходимо тщательно подбирать
инструменты под вашу задачу
Тем более, что выбор есть
Очень рекомендую попробовать ZFS в
любом виде
36. Вопросы?
Голосуйте за меня на
http://devconf.ru/offers !
Спасибо!
Чистяков Александр,
Cezurity
admin@cezurity.com
http://alexclear.livejournal.com
https://github.com/alexclear