CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб

on

  • 604 views

http://2013.codefest.ru/doklad/38

http://2013.codefest.ru/doklad/38

Statistics

Views

Total Views
604
Views on SlideShare
420
Embed Views
184

Actions

Likes
0
Downloads
2
Comments
0

1 Embed 184

http://2013.codefest.ru 184

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

CodeFest 2013. Чистяков А. — Использование систем виртуализации в веб Presentation Transcript

  • 1. Использованиесистемвиртуализации в вебчасть 2Чистяков Александр, admin@cezurity.comCezurity
  • 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 !Спасибо!Чистяков Александр,Cezurityadmin@cezurity.comhttp://alexclear.livejournal.comhttps://github.com/alexclear