Практический опыт использования решений виртуализации в web-проектах Александр Чистяков

реклама
Практический опыт
использования решений
виртуализации в 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
VMWare ESXi
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/chxen.html
• Xen + DRBD + Heartbeat: http://old.nabble.com/DRBDXen-LVM2-Heartbeat-Ubuntu-Gutsy-HowTotd17245190.html (я делал без LVM2 и без Ubuntu
Gutsy, достаточно CentOS 6, например)
Семейство WMWare
• VMWare Player – невероятно интрузивное и неудобное
решение (компилирует модули ядра, стартует какието сервисы и вообще ведет себя вызывающе)
• VMWare ESX, VMWare ESXi – не знаю, не пробовал, но
если стоит ознакомиться, то дайте знать
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
– Потеря производительности
– Снэпшот может переполниться
– При увеличении одновременного числа снэпшотов проблемы
линейно растут
CoW FSes
• 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 практически мертва
ZFS on Linux у многих в продакшне уже сейчас
В том числе, и у меня, но на некритичных участках
BTRFS можно пытаться использовать для OpenVZ и
LXC уже сейчас
Выводы
• На вкус и цвет все решения виртуализации разные
– Есть и такие, которые хорошо работают под нагрузкой
• При правильном использовании виртуализация
может приносить большую пользу
– А при неправильном доставлять большую головную боль
• Универсального решения, по-прежнему, нет
– Но есть наборы граничных условий, определящих
применимость того или иного варианта
Вопросы?
•
•
•
•
•
•
Спасибо за внимание!
•
•
•
•
С вами был Александр Чистяков
http://alexclear.livejournal.com
[email protected]
http://github.com/alexclear
Скачать