SlideShare a Scribd company logo
1 of 36
Download to read offline
Использование
систем
виртуализации в веб
часть 2
Чистяков Александр, admin@cezurity.com
Cezurity
Давайте знакомиться и дружить

Я:

    Человек с горы

    Опыт работы в должности не менее трех
    лет

    Навыки администрирования серверных
    систем
Давайте знакомиться и дружить

Вы:

    В зале есть пользователь MacBook?

    Что он тут делает?

    Системные администраторы

    DevOps'ы

    Ответственные за инфраструктуру (CTO,
    архитекторы, etc, etc)
WARNING! DO NOT TRY @HOME!

    Информации будет довольно много!





    Прежде чем внедрять у себя — проверьте!

    Сомневаетесь — не стесняйтесь спросить!
Содержание предыдущих серий

    Первая серия: http://goo.gl/7bYAL

    Началась с того, что виртуализация имеет
    множество применений

    Закончилась тем, что OpenVZ представлялась
    неплохим решением для виртуализации

    А ZFS — неплохим
      решением для
      организации
      хранилища

    Но был ряд проблем
Как скрестить ужа с ежом?

    Напоминаю — ZFS не может быть принята
    в ядро Linux

    Две реализации — ZFS-FUSE и ZFS on
    Linux

    ZFS-FUSE — filesystem in userspace

    Кроме того, ZFS-FUSE заброшен

    ZFS on Linux — единственный живой
    кандидат

    Но был ряд проблем
Хроники внедрения

    ZoL 0.6.0-rc7, Debian 6, OpenVZ





    Постоянно заканчивалась память

    Причина в том, что ARC не очень хорошо
    интегрирован с ядром

    Раз в три-семь дней — падения
Хроники внедрения


    ZoL 0.6.0-rc9, CentOS 6, OpenVZ

    Ограничить размер ARC
     В /etc/modprobe.d/zfs.conf добавить
     options zfs zfs_arc_max=2147483648

    Uptime 210 дней

    Но есть ряд проблем
Проблемы OpenVZ

    Проблема с OpenJDK и FUTEX_WAIT:

    http://goo.gl/N5dFw http://goo.gl/bwQ7a

    http://goo.gl/lS55q

    Проявляется в том, что JVM очень долго
    стартует и при работе расходует CPU

    Решена в RHEL ядрах

    В ядрах Debian Stable не решена

    Кстати, о ядрах, 3.2 уже здесь! (на
    серверах), а где OpenVZ?
Пути решения

    Взяли Oracle JDK — стартует быстро, но
    расход процессора все равно велик

    Сборка ядер от RHEL в deb-пакеты

    Разработчики OpenVZ не рекомендуют
    ядра Debian, только RHEL/CentOS

    Скрипт для сборки deb-пакета:
    http://goo.gl/X0Blo (спасибо, Роман!)

    Сейчас все мои Debian-хосты используют
    ядра от RHEL
Проблемы с OpenVZ на ZFS

    Очень долго работал apt-get на guest'ах

    Особенно это заметно при деплое на 10
    машин на одном хосте

    В ZoL 0.6.0-rc14 уже не наблюдается

    Медленная работа с каталогами, в которых
    много файлов

    А что, если диск виртуализировать в виде
    большого файла, а не части FS хоста?

    Для OpenVZ это делается через ploop, но мы
    не пробовали

    Вместо этого OpenVZ поместили в KVM
    виртуалку (почему, объясню позже)
Какие есть варианты?

    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
Solaris

    Долгая и запутанная история

    Современная ситуация:

    Oracle Solaris 11 — не Open Source

    SmartOS — регулярно обновляется

    OmniOS — регулярно обновляется

    OpenIndiana — редко обновляется,
    предназначена для десктопов

    Illumian — не обновляется, нет KVM

    Несколько других, менее известных сборок:
    http://goo.gl/yihG4
SmartOS

    Делается компанией Joyent

    Составляет основу Joyent Cloud

    Illumos kernel + open source drivers + ported
    KVM + Node.JS

    Управление виртуальными машинами с
    помощью скрипта на JS

    Собственная библиотека образов
    виртуальных машин как для KVM, так и для
    Zones

       Естественно, образы ориентированы
    на нужды Joyent Cloud
Развертывание SmartOS

    Работает с USB flash

      (Hetzner их продает за €40)

    При установке автоматически создает
    mirrored pool

    Так как USB flash монтируется r/o, управление
    конфигами не очень удобно — их нужно
    копировать после рестарта

    Firewall — ipfilter/ipnat

    KVM виртуалки используют ZVOL

    Общий образ клонируется

    Каждая виртуалка — на своем разделе
Использование SmartOS

    Первые десять дней все работало

    Потом хост внезапно перегрузился

    В Solaris есть crash dump раздел

    Хост перезагружался в среднем раз-два в
    неделю, crash dump раздел первый месяц
    был пуст

    Удалось получить дамп

    Получить поддержку у авторов SmartOS не
    удалось никакими путями

    Даже через общих знакомых

    Люди заняты, их можно понять
Наивная диагностика

    По нашим наблюдениям, ребуты происходили
    в моменты возрастания дисковой активности

    Возможно, причина в драйверах контроллера
    диска?

    Странно, использовали обычный ICH9

    Последующие эксперименты с такой же
    дисковой подсистемой, но в OmniOS, не
    выявили проблем

    От SmartOS пришлось отказаться

    Но ряд идей прижился
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 часов)
FreeBSD

    Перешли на 9.0-STABLE и VirtualBox 4.2

    У FreeBSD отличная (!) поддержка

      Несколько раундов переписки в списке
      рассылки про виртуализацию, и
      проблему удалось решить

    Суть проблемы: планировщик ОС
    сбивался

    Решение: отключить HT, отключить
    SpeedStep, после чего планировщик стал
    работать как надо
VirtualBox под FreeBSD

    Иногда guest завершается с segfault

    Иногда guest попадает в T-state, после чего
    его не убить (проявлялось только на одном из
    хостов)

    Иногда guest перестает подавать признаки
    жизни, при подключении к консоли — черный
    экран

    py-supervisor для слежения за guest'ами и
    самодельный скрипт-watchdog для проверки
    доступности по ping

    sysctl debug.debugger_on_panic=0
Управление образами guest'ов

    Файл или raw device?

    Raw device в ZFS — ZVOL

    В два раза медленнее, чем файл

    Запись на ZVOL всегда синхронна!

    (Если не сделано zfs set sync=disabled)

    Но мы об этом узнали уже после того, как
    выбрали файлы в качестве хранилища

    Знание — сила!
Управление образами guest'ов

    Каждый образ на своем ZFS разделе

    Легче бэкапить, легче управлять

    zfs snapshot pool/vol@`date +%F-%H` - и так
    каждый час

    На трех тысячах снэпшотов хост с ZoL начал
    тормозить

    (Сравните это с LVM)

    Разные разделы могут иметь разные
    параметры — сжатие, sync, настройки кэша
Управление образами 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 базу для стейджингов
Кстати, о PostgreSQL

    Коллега обнаружил, что запрос на
    PostgreSQL под FreeBSD работает в пять
    раз медленнее, когда включена
    репликация

    Запись мешает чтению?

    На машине с Linux и включенной
    репликацией запрос работает в пять раз
    быстрее!

    Кто виноват?
Кто виноват?

    Тестовый запрос:

     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 одинаковые
    (дефолтные)
Что делать?

    Делали sync=disabled

    Уменьшали zfs recordsize до 8K (На что
    надеялись? При записи вообще не влияет)

    Пробовали VirtualBox, KVM, PostgreSQL во
    FreeBSD jail

    Ничего не помогает

    Пока не знаю, в чем проблема

    Надо попробовать профайлинг с DTrace
НЕ СПАТЬ, ПОЖАЛУЙСТА!

    Ведь я пока рассказал всего только треть!





    Но если вы — котик, то можно
Тем временем

    Нужно было виртуализировать Windows

    W2K8 как билд-сервер

    Несколько WinXP для прочих нужд

    На хосте Debian Stable + OpenVZ + ZoL

    W2K8 не работает под версией KVM из
    backports — STOP error ......., проблема с
    паравиртуальными драйверами диска

    А XP плохо работает с KVM из Debian
    Stable — постоянные перезагрузки
Паравиртуальные драйвера

    Свободные выходят по несколько раз в
    год, а иногда и в месяц

    Работают как мигалка (“работает”/”не
    работает”), надо подбирать

    Выяснилось, что XP под Debian Testing
    ведет себя значительно стабильнее

    W2K8 тоже работает под KVM из Testing

    Но есть две проблемы:

    Раз в месяц магически отваливается сеть

    OpenVZ не портировано под ядро 3.2.0 из
    состава Debian Testing
Сельхозмагия

    При падении сети помогает зайти на
    консоль XP-виртуалки по VNC и что угодно
    там поделать — сеть вернется

    Через четыре месяца это надоело, и
    вместо KVM был взят хост с Windows и
    Hyper-V, что закрыло вопрос навсегда

    Чтобы сохранить существующие OpenVZ
    контейнеры, их перенесли в Debian Stable
    виртуальную машину, работающую под
    KVM на хосте с Debian Testing
Раз уж речь зашла о KVM

    Я просто не умею ее готовить

    Но с каждым разом узнаю что-нибудь
    новое

    Диски — virtio, тип кэша хорошо бы none,
    но ZFS не поддерживает Direct IO, поэтому
    writeback

    Если сторадж подключен по NFS или
    iSCSI, тип кэша — none

    Копируйте конфигурацию CPU с хоста,
    чтобы не эмулировать лишние инструкции
И еще про KVM

    KSM — Kernel Samepage Merging

    Много одинаковых виртуалок — общая
    память объединяется

    В VirtualBox это называется “Page Fusion”
    и работает только для Windows guests

    Минус: приложение должно само сообщать
    ядру, где находятся одинаковые страницы

    Минус: сканирование идет медленно

    UKSM, PKSM — сторонние пачти, выше
    скорость, не нужны хинты от приложения

    Но я пока не пробовал
Насколько хорош KSM?

    cat /sys/kernel/mm/ksm/pages_sharing

    На одном хосте (много однотипных
    виртуалок) - 3378324

    На другом — 309816

    Скрипт для красивой печати:
    http://goo.gl/LjKvh

    13 гигабайт сэкономлено на первом хосте
    и 1.2 гигабайта на втором

    Визуальные наблюдения подтверждают
Тюнинг на стороне guest

    Планировщик IO по умолчанию CFQ

    Найдите на графике момент переключения
    на deadline





    Используйте deadline или noop!
Выводы

    Третьей части — быть! (я ведь пока еще
    ничего не рассказал про выделенные
    сетевые хранилища)

    Необходимо тщательно подбирать
    инструменты под вашу задачу

    Тем более, что выбор есть

    Очень рекомендую попробовать ZFS в
    любом виде
Вопросы?
Голосуйте за меня на
  http://devconf.ru/offers !

Спасибо!
Чистяков Александр,
Cezurity
admin@cezurity.com
http://alexclear.livejournal.com
https://github.com/alexclear

More Related Content

What's hot

presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
Max Glekov
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Ontico
 
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
Provectus
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
Ontico
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умирать
DataArt
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
it-people
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
Ruslan Sharipov
 
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
it-people
 

What's hot (18)

Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного багаЛев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
Лев Казаркин, Удивительные приключения регистров SSE или в поисках одного бага
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
SECON'2016. Кириллов Александр, Continuous Integration под микроскопом
SECON'2016. Кириллов Александр, Continuous Integration под микроскопомSECON'2016. Кириллов Александр, Continuous Integration под микроскопом
SECON'2016. Кириллов Александр, Continuous Integration под микроскопом
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
[Demo-day] Slava Mogilevsky: "Cluster CI on Jenkins"
 
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
Отказоустойчивый микрокластер своими руками, Виталий Гаврилов (Ленвендо)
 
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)DC/OS – больше чем PAAS, Никита Борзых (Express 42)
DC/OS – больше чем PAAS, Никита Борзых (Express 42)
 
ZFS - файловая система будущего
ZFS - файловая система будущегоZFS - файловая система будущего
ZFS - файловая система будущего
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умирать
 
ESXi 5.x CPU scheduler
ESXi 5.x CPU schedulerESXi 5.x CPU scheduler
ESXi 5.x CPU scheduler
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
Docker. Зачем он нам?
Docker. Зачем он нам?Docker. Зачем он нам?
Docker. Зачем он нам?
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Mac os and ubuntu
 Mac os and ubuntu  Mac os and ubuntu
Mac os and ubuntu
 
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
Python-разработка в части Яндекс-вселенной - Александр Кошелев, PyCon RU 2014
 

Viewers also liked

CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная CassandraCodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest
 
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
CodeFest
 
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лицCodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
CodeFest
 
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
CodeFest
 
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest
 
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
CodeFest
 

Viewers also liked (8)

CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная CassandraCodeFest 2013. Анастасьев О. — Класс!ная Cassandra
CodeFest 2013. Анастасьев О. — Класс!ная Cassandra
 
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
CodeFest 2010. Кузьмичев А. — Быстрее быстрого: о требованиях к производитель...
 
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лицCodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
CodeFest 2013. Мирютов А. — Мотивация заинтересованных лиц
 
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
CodeFest 2013. Кудрявцев Г. — Как продакту найти язык с разработчиками. В чем...
 
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
CodeFest 2010. Гаджибалаев Н. — сlass Server::Cloud < Server::Hardware // ...
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
 
CodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается YiiCodeFest 2011. Макаров А. — Как разрабатывается Yii
CodeFest 2011. Макаров А. — Как разрабатывается Yii
 
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
CodeFest 2011. Зиновьев А. — Куда приводят мечты: разработка мобильных онлайн...
 

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

Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
HappyDev
 
Hl09 Free Bsd2009 Pantyukhin
Hl09 Free Bsd2009 PantyukhinHl09 Free Bsd2009 Pantyukhin
Hl09 Free Bsd2009 Pantyukhin
HighLoad2009
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
HighLoad2009
 
Running Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-VRunning Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-V
Andrey Beshkov
 

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

Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...Александр Чистяков - Практический опыт использования решений виртуализации в ...
Александр Чистяков - Практический опыт использования решений виртуализации в ...
 
Использование контейнеризации в среде массового хостинга
Использование контейнеризации в среде массового хостингаИспользование контейнеризации в среде массового хостинга
Использование контейнеризации в среде массового хостинга
 
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва  Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
Релиз-инжениринг Mail.ru. Взгляд изнутри. Максим Глеков, Mail.Ru Group, Москва
 
Presentation. OpenSolaris.
Presentation. OpenSolaris. Presentation. OpenSolaris.
Presentation. OpenSolaris.
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Hl09 Free Bsd2009 Pantyukhin
Hl09 Free Bsd2009 PantyukhinHl09 Free Bsd2009 Pantyukhin
Hl09 Free Bsd2009 Pantyukhin
 
Что нового в NOVA Microhypervisor
Что нового в NOVA MicrohypervisorЧто нового в NOVA Microhypervisor
Что нового в NOVA Microhypervisor
 
Freebsd11
Freebsd11Freebsd11
Freebsd11
 
Dz Java Hi Load 0.4
Dz Java Hi Load 0.4Dz Java Hi Load 0.4
Dz Java Hi Load 0.4
 
What's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey BronnikovWhat's missing from upstream kernel containers? - Sergey Bronnikov
What's missing from upstream kernel containers? - Sergey Bronnikov
 
Express test BSD desktop
Express test BSD desktopExpress test BSD desktop
Express test BSD desktop
 
Мифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZМифы и легенды о проекте OpenVZ
Мифы и легенды о проекте OpenVZ
 
Слава Машканов — “Wubuntu”: Построение гетерогенной среды Windows+Linux на н...
Слава Машканов — “Wubuntu”: Построение гетерогенной среды  Windows+Linux на н...Слава Машканов — “Wubuntu”: Построение гетерогенной среды  Windows+Linux на н...
Слава Машканов — “Wubuntu”: Построение гетерогенной среды Windows+Linux на н...
 
Running Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-VRunning Linux and Unix on Hyper-V
Running Linux and Unix on Hyper-V
 
Эволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover ClusteringЭволюция High availability: Windows Server 2016 Failover Clustering
Эволюция High availability: Windows Server 2016 Failover Clustering
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Interbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios androidInterbase xe7 - универсальная субд для windows linux mac ios android
Interbase xe7 - универсальная субд для windows linux mac ios android
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 

More from CodeFest

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

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

  • 1. Использование систем виртуализации в веб часть 2 Чистяков Александр, admin@cezurity.com Cezurity
  • 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