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

  • 328 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
328
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
3
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

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