360 likes | 587 Views
Практический опыт использования решений виртуализации в web- проектах. Александр Чистяков bOombate http://alexclear.livejournal.com. Докладчик ?. Разработчик серверных приложений Эксплуатационщик DevOps Архитектор серверных приложений Просто хороший человек. Аудитория ?.
E N D
Практический опыт использования решений виртуализации в web-проектах Александр Чистяков bOombate http://alexclear.livejournal.com
Докладчик? • Разработчик серверных приложений • Эксплуатационщик • DevOps • Архитектор серверных приложений • Просто хороший человек
Аудитория? • Разработчики серверных приложений • Эксплуатационщики • DevOps’ы • Архитекторы серверных приложений • Просто хорошие люди
Зачем нужна виртуализация? • Возможность создания качественно разных окружений • Возможность изоляции окружений • Возможность консолидации серверов • Слой абстракции между «голым железом» и платформой • Возможность автоматического развертывания и миграции
Не будем усложнять • Windows-машины в Linux-окружении • Каждому разработчику – своя песочница • Один «железный» сервер на всех разработчиков • Возможность легко выполнить миграцию (апгрейд) • Возможность выполнить миграцию автоматически, возможность быстро развернуть еще одну ноду
Типы виртуализации • Программная: • Эмуляция (Bochs, PearPC) • Динамическая трансляция (VMWare, VirtualBox) • Паравиртуализация (Xen) • Аппаратная виртуализация (Xen, KVM, VirtualBox, Hyper-V, VMWare) • Виртуализация уровня ОС: • LXC, OpenVZ, Virtuozzo • FreeBSD Jail
Какой тип нужен нам? • А чего хотим добиться? • Больше возможностей – меньше производительность: • Попробуйте поставить Debianна Bochs • Аппаратная виртуализация для Windows на Linux • Уровня ОС (контейнерная) – для гомогенных сред (одно ядро на все инстансы) • Паравиртуализация
Аппаратная виртуализация • Xenи производные • KVM • VirtualBox • Hyper-V • VMWare Player • VMWare ESX • VMWareESXi
Xenипроизводные • Xenисторически первая Open Source система виртуализации, начинался как паравиртуализатор • Отлично поддерживает ядро 2.6.18 и отлично поддерживался RedHat 5.x и производными • Платный Citrix XenServer • Между 3-ей и 4-й версией был большой перерыв, продукт перестал нормально поддерживаться многими дистрибутивами (отказ RedHatв пользу KVM)
Немного личного опыта • Xen 3.X, CentOS 5.X • Настройка через virt-manager тривиальна • Если вы не настраиваете паравиртуализациюс ядром вне образа диска • “unaligned memory access” в логе на Dom0 • Решение проблемы методом черных очков (помогло) • Под большой нагрузкой не использовался • Никаких проблем не доставлял
Паравиртуализация • Ядро для DomUне такое, как для Dom0, поэтому вариантов гест-систем больше • Можно располагать ядро вне файловой системы виртуального диска • Виртуальные диски можно подключать прямо как логические, что упрощает разметку • Amazon и другие так и делают
Что еще хорошего? • Remus – механизм отказоустойчивости путем репликации системы в целом (в т.ч. состояния RAM) • Xen + DRBD: http://www.drbd.org/users-guide/ch-xen.html • Xen + DRBD + Heartbeat: http://old.nabble.com/DRBD-Xen-LVM2-Heartbeat-Ubuntu-Gutsy-HowTo-td17245190.html (я делал без LVM2 и без Ubuntu Gutsy, достаточно CentOS 6, например)
Семейство WMWare • VMWare Player – невероятно интрузивное и неудобное решение (компилирует модули ядра, стартует какие-то сервисы и вообще ведет себя вызывающе) • VMWare ESX, VMWareESXi– не знаю, не пробовал, но если стоит ознакомиться, то дайте знать
VirtualBox • При определенной сноровке можно заставить его работать в headless режиме • А можно просто взять Vagrant (http://vagrantup.com) и сделать все с его помощью • Нужно только иметь в виду, чтоVirtualBoxвиртуализирует диск таким образом, что при вызове fsync() не происходит ничего • Некоторые приложения могут пострадать
Hyper-V • Всего один график из Munin (в системе за это время не поменялось ничего, кроме апдейтов ядра): • Все еще хотите что-то хостить под Hyper-V? Удачи!
KVM • Производится подразделением RedHat • Используется как базовая система виртуализации в CentOS 6 • Довольно давно код принят в ядро Linux • Виртуальные машины управляются через libvirtd • Хорошие новости на этом закончились • Да ты просто не умеешь ее готовить!
Как готовить KVM • Для сетевой подсистемы всегда выбирайте bridge с реальным устройством, а не виртуальный ethernet • Для дисковой подсистемы лучше всего взять raw flat image либо block device целиком • Кэш диска выставьте в none для block device • Или в writebackдля image, если вы смелый человек • Очень хорошо иметь RAID-контроллер с батарейкой
Как готовить KVM – тюнинг ядра • Слева – host, справа - guest: • kernel .... nohz=off highres=off • Видел один раз на Хетцнере
Все это не избавит вас от • [ 839.921196] INFO: task apache2:2444 blocked for more than 120 seconds. [ 839.921562] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message. • Выглядит страшновато (к этому сообщению еще прилагается стекртрейс) • У одного европейского «облачного хостера» раз в неделю отказывал виртуальный диск в инстансе • Что же делать?
Виртуализация уровня ОС? • Ядро одно и то же: • Файловая система разделяется между инстансами • Свободная память разделяется между всеми инстансами • Звучит заманчиво, потери производительности должны быть очень небольшими • Linux: • OpenVZ • LXC
OpenVZ • Не входит в официальное ядро • Те же проблемы, что у Xen – есть только под stable ядра • Давно на рынке • Очень стабильно • Ориентировано на массовый хостинг • Ограничения по умолчанию установлены довольно жестко
Личный опыт • Работает отлично при любых нагрузках • 4 млн. хитов в день в контейнере с apache2 • Надо только следить за /proc/user_beancounters • Есть тонкости при работе с IPsec • Хотите использовать Ubuntu 12.04 LTS в контейнере? Good luck! (но это проблемы Canonical, а не ваши?)
LXC • Входит в официальное ядро • Нужны достаточно свежие ядра, в «серверных» дистрибутивах их пока нет • Пользовательская база пока довольно мала • Про стабильность на следующем слайде • Ориентировано на всех • Конфигурация стандартизована и не вызывает удивления у новичков, ограничения по умолчанию гораздо мягче
LXC – личный опыт • Первые дни все работало прекрасно • Потом стали пропадать вещи: • ping есть, а git pull сделать нельзя • Иногда icmpответы о том, что пакет очень велик • Роутинг до всех узлов есть, а до mxs.mail.ru нет • Что-то крепко сломано в сетевой подсистеме • Писал в рассылку разработчиков, но письмо даже не прошло модерацию • Нет проблем, мигрируем на OpenVZ
А как роутить? • Если ситуация позволяет – static routes на подсети виртуальных машин на каждом хосте • Если нет – IPsec туннели между хост-машинами с роутингом подсетей виртуальных машин • IPsec: • Я использую racoon/setkey • iperfпоказывает 100Mbit/s, для моих задач достаточно
IPsec и OpenVZ • Просто так не заработает, нужно тюнить параметры ядрана guest-машине (!) • /etc/sysctl.conf: net.ipv4.conf.venet0.disable_policy=1 net.ipv4.conf.venet0.disable_xfrm=1
А как бэкапить? • Общий принцип: • Сделать снэпшот • Переписать снэпшот в другое место • Еще можно бэкапить guest-машину как обычную • Снэпшоты: • Уровня системы виртуализации • Уровня блочного устройства • Уровня файловой системы
Снэпшоты • Уровня системы виртуализации • Я лично применял только в Hyper-V • Уровня блочного устройства • Снэпшот LVM со всеми его плюсами и минусами • Снэпшоты уровня FS: • Нужна CoWфайловая система • Лишены недостатков LVM снэпшотов • Все было бы хорошо, но...
LVM • Достоинства • Работают вне зависимости от типа вышележащей FS • Недостатки • Необходимо не забывать предварительно оставлять свободное место на LVM volume group • Потеря производительности • Снэпшот может переполниться • При увеличении одновременного числа снэпшотов проблемы линейно растут
CoWFSes • ZFS • Давно в продакшн • Лицензионно несовместима с ядром Linux • BTRFS • Пока не доросла до «беты» • Нет fsck • Не рекомендуется к использованию на разделах с образами дисков виртуальных машин • HAMMER • Кто-нибудь в зале о ней слышал?
ZFS и Linux • ZFS-FUSE • Работает в userspace • Довольно стабильна • Pool version 21 • ZFS on Linux (http://zfsonlinux.org) • Модуль ядра • POSIX layer появился сравнительно недавно • Pool version 28
ZFS-FUSE vs ZFS on Linux • ZFS-FUSE: -a 86400 -e 3600 -v 160 -m 512 • Найдите на графике момент перехода от ZFS-FUSE к ZFS on Linux:
Развитие ситуации • ZFS-FUSE практически мертва • ZFSon Linux у многих в продакшне уже сейчас • В том числе, и у меня, но на некритичных участках • BTRFS можно пытаться использовать для OpenVZи LXC уже сейчас
Выводы • На вкус и цвет все решения виртуализации разные • Есть и такие, которые хорошо работают под нагрузкой • При правильном использовании виртуализация может приносить большую пользу • А при неправильном доставлять большую головную боль • Универсального решения, по-прежнему, нет • Но есть наборы граничных условий, определящих применимость того или иного варианта
Спасибо за внимание! • С вами был Александр Чистяков • http://alexclear.livejournal.com • alexclear@gmail.com • http://github.com/alexclear