36
Практический опыт использования решений виртуализации в web- проектах Александр Чистяков bOombate http://alexclear.livejournal.com

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

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

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

проектахАлександр Чистяков

bOombate

http://alexclear.livejournal.com

Page 2: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Докладчик?

• Разработчик серверных приложений• Эксплуатационщик• DevOps• Архитектор серверных приложений• Просто хороший человек

Page 3: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Аудитория?

• Разработчики серверных приложений• Эксплуатационщики• DevOps’ы• Архитекторы серверных приложений• Просто хорошие люди

Page 4: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Зачем нужна виртуализация?

• Возможность создания качественно разных окружений

• Возможность изоляции окружений• Возможность консолидации серверов• Слой абстракции между «голым железом» и

платформой• Возможность автоматического развертывания

и миграции

Page 5: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Не будем усложнять

• Windows-машины в Linux-окружении• Каждому разработчику – своя песочница• Один «железный» сервер на всех

разработчиков• Возможность легко выполнить миграцию

(апгрейд)• Возможность выполнить миграцию

автоматически, возможность быстро развернуть еще одну ноду

Page 6: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Типы виртуализации

• Программная:– Эмуляция (Bochs, PearPC)– Динамическая трансляция (VMWare, VirtualBox)– Паравиртуализация (Xen)

• Аппаратная виртуализация (Xen, KVM, VirtualBox, Hyper-V, VMWare)

• Виртуализация уровня ОС:– LXC, OpenVZ, Virtuozzo– FreeBSD Jail

Page 7: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Какой тип нужен нам?

• А чего хотим добиться?• Больше возможностей – меньше

производительность:– Попробуйте поставить Debian на Bochs

• Аппаратная виртуализация для Windows на Linux

• Уровня ОС (контейнерная) – для гомогенных сред (одно ядро на все инстансы)

• Паравиртуализация

Page 8: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Аппаратная виртуализация

• Xen и производные• KVM• VirtualBox• Hyper-V• VMWare Player• VMWare ESX• VMWare ESXi

Page 9: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Xen и производные

• Xen исторически первая Open Source система виртуализации, начинался как паравиртуализатор

• Отлично поддерживает ядро 2.6.18 и отлично поддерживался RedHat 5.x и производными

• Платный Citrix XenServer• Между 3-ей и 4-й версией был большой

перерыв, продукт перестал нормально поддерживаться многими дистрибутивами (отказ RedHat в пользу KVM)

Page 10: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Немного личного опыта

• Xen 3.X, CentOS 5.X• Настройка через virt-manager тривиальна

– Если вы не настраиваете паравиртуализацию с ядром вне образа диска

• “unaligned memory access” в логе на Dom0– Решение проблемы методом черных очков (помогло)

• Под большой нагрузкой не использовался• Никаких проблем не доставлял

Page 11: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Паравиртуализация

• Ядро для DomU не такое, как для Dom0, поэтому вариантов гест-систем больше

• Можно располагать ядро вне файловой системы виртуального диска

• Виртуальные диски можно подключать прямо как логические, что упрощает разметку

• Amazon и другие так и делают

Page 12: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Что еще хорошего?

• 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, например)

Page 13: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Семейство VMWare

• VMWare Player – невероятно интрузивное и неудобное решение (компилирует модули ядра, стартует какие-то сервисы и вообще ведет себя вызывающе)

• VMWare ESX, VMWare ESXi – не знаю, не пробовал, но если стоит ознакомиться, то дайте знать

Page 14: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

VirtualBox

• При определенной сноровке можно заставить его работать в headless режиме

• А можно просто взять Vagrant (http://vagrantup.com) и сделать все с его помощью

• Нужно только иметь в виду, что VirtualBox виртуализирует диск таким образом, что при вызове fsync() не происходит ничего– Некоторые приложения могут пострадать

Page 15: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Hyper-V

• Всего один график из Munin (в системе за это время не поменялось ничего, кроме апдейтов ядра):

• Все еще хотите что-то хостить под Hyper-V? Удачи!

Page 16: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

KVM

• Производится подразделением RedHat• Используется как базовая система

виртуализации в CentOS 6• Довольно давно код принят в ядро Linux• Виртуальные машины управляются через

libvirtd• Хорошие новости на этом закончились• Да ты просто не умеешь ее готовить!

Page 17: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Как готовить KVM

• Для сетевой подсистемы всегда выбирайте bridge с реальным устройством, а не виртуальный ethernet

• Для дисковой подсистемы лучше всего взять raw flat image либо block device целиком

• Кэш диска выставьте в none для block device– Или в writeback для image, если вы смелый человек

• Очень хорошо иметь RAID-контроллер с батарейкой

Page 18: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Как готовить KVM – тюнинг ядра

• Слева – host, справа - guest:

• kernel .... nohz=off highres=off• Видел один раз на Хетцнере

Page 19: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Все это не избавит вас от

• [ 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.

• Выглядит страшновато (к этому сообщению еще прилагается стекртрейс)

• У одного европейского «облачного хостера» раз в неделю отказывал виртуальный диск в инстансе

• Что же делать?

Page 20: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Виртуализация уровня ОС?

• Ядро одно и то же:– Файловая система разделяется между инстансами– Свободная память разделяется между всеми

инстансами• Звучит заманчиво, потери

производительности должны быть очень небольшими

• Linux:– OpenVZ– LXC

Page 21: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

OpenVZ

• Не входит в официальное ядро– Те же проблемы, что у Xen – есть только под stable

ядра• Давно на рынке

– Очень стабильно• Ориентировано на массовый хостинг

– Ограничения по умолчанию установлены довольно жестко

Page 22: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Личный опыт

• Работает отлично при любых нагрузках– 4 млн. хитов в день в контейнере с apache2

• Надо только следить за /proc/user_beancounters

• Есть тонкости при работе с IPsec• Хотите использовать Ubuntu 12.04 LTS в

контейнере? Good luck! (но это проблемы Canonical, а не ваши?)

Page 23: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

LXC

• Входит в официальное ядро– Нужны достаточно свежие ядра, в «серверных»

дистрибутивах их пока нет• Пользовательская база пока довольно мала

– Про стабильность на следующем слайде• Ориентировано на всех

– Конфигурация стандартизована и не вызывает удивления у новичков, ограничения по умолчанию гораздо мягче

Page 24: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

LXC – личный опыт

• Первые дни все работало прекрасно• Потом стали пропадать вещи:

– ping есть, а git pull сделать нельзя– Иногда icmp ответы о том, что пакет очень велик– Роутинг до всех узлов есть, а до mxs.mail.ru нет

• Что-то крепко сломано в сетевой подсистеме– Писал в рассылку разработчиков, но письмо даже не

прошло модерацию– Нет проблем, мигрируем на OpenVZ

Page 25: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

А как роутить?

• Если ситуация позволяет – static routes на подсети виртуальных машин на каждом хосте

• Если нет – IPsec туннели между хост-машинами с роутингом подсетей виртуальных машин

• IPsec:– Я использую racoon/setkey– iperf показывает 100Mbit/s, для моих задач

достаточно

Page 26: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

IPsec и OpenVZ

• Просто так не заработает, нужно тюнить параметры ядра на guest-машине (!)

• /etc/sysctl.conf:net.ipv4.conf.venet0.disable_policy=1net.ipv4.conf.venet0.disable_xfrm=1

Page 27: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

А как бэкапить?

• Общий принцип:– Сделать снэпшот– Переписать снэпшот в другое место

• Еще можно бэкапить guest-машину как обычную

• Снэпшоты:– Уровня системы виртуализации– Уровня блочного устройства– Уровня файловой системы

Page 28: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Снэпшоты

• Уровня системы виртуализации– Я лично применял только в Hyper-V

• Уровня блочного устройства– Снэпшот LVM со всеми его плюсами и минусами

• Снэпшоты уровня FS:– Нужна CoW файловая система– Лишены недостатков LVM снэпшотов– Все было бы хорошо, но...

Page 29: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

LVM

• Достоинства– Работают вне зависимости от типа вышележащей FS

• Недостатки– Необходимо не забывать предварительно оставлять

свободное место на LVM volume group– Потеря производительности– Снэпшот может переполниться– При увеличении одновременного числа снэпшотов

проблемы линейно растут

Page 30: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

CoW FSes• ZFS

– Давно в продакшн– Лицензионно несовместима с ядром Linux

• BTRFS– Пока не доросла до «беты»– Нет fsck– Не рекомендуется к использованию на разделах с

образами дисков виртуальных машин• HAMMER

– Кто-нибудь в зале о ней слышал?

Page 31: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

ZFS и Linux• ZFS-FUSE

– Работает в userspace– Довольно стабильна– Pool version 21

• ZFS on Linux (http://zfsonlinux.org)– Модуль ядра– POSIX layer появился сравнительно недавно– Pool version 28

Page 32: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

ZFS-FUSE vs ZFS on Linux• ZFS-FUSE: -a 86400 -e 3600 -v 160 -m 512• Найдите на графике момент перехода от ZFS-

FUSE к ZFS on Linux:

Page 33: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Развитие ситуации• ZFS-FUSE практически мертва• ZFS on Linux у многих в продакшне уже сейчас• В том числе, и у меня, но на некритичных

участках• BTRFS можно пытаться использовать для

OpenVZ и LXC уже сейчас

Page 34: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Выводы

• На вкус и цвет все решения виртуализации разные– Есть и такие, которые хорошо работают под

нагрузкой• При правильном использовании

виртуализация может приносить большую пользу– А при неправильном доставлять большую головную

боль• Универсального решения, по-прежнему, нет

– Но есть наборы граничных условий, определящих применимость того или иного варианта

Page 35: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Вопросы?

• • • • • •

Page 36: Александр Чистяков - Практический опыт использования решений виртуализации в веб-проектах | HappyDev'12

Спасибо за внимание!

• С вами был Александр Чистяков• http://alexclear.livejournal.com• [email protected]• http://github.com/alexclear