Pull to refresh

Какая система виртуализации лучше?

Reading time3 min
Views82K
День добрый.

Люди, имеющие опыт поднятия виртуалок, на различных системах, подскажите:
Какую систему виртуализации (из opensource) поставить на сервер, с учетом, что гостевые системы преимущественно будут заниматься роутингом?


У нас на фирме сейчас зоопарк серверов (обычные PC-шки), которые занимаются всем — от роутинга пакетов, до FTP-серверов. Всё это жрет электричество, требует охлаждения, и замены деталей по мере старения.
Ввод в строй нового сервера например на замену старому требует покупки железа, установки и настройки.
Потом нужно держать оба сервера включенными какое-то время, чтобы в случае если на новом какие-то проблемы (не донастроили, столкнулись с неожиданным глюком) быстренько переключить всё на старый.

Решение видится в затаскиванию всех этих железных монстров внутрь одной машины.

Т.к. большинство наших «серверов» по мощности остались далеко позади одного современного компа на базе Core 2 Duo или Core 2 Quad — то в расчетах мы исходили из того, что на компьютер на базе Core 2 Duo E6400 @ 3GHz / 4096 RAM удасться затащить хотя бы 4 реальных машины.

В качестве кандидатов к переносу выбраны были самые важные серверы: VPN (около 500 одновременных сессий), пару софтовых Linux-роутеров, radius-сервер, и пару серверов, отоброжающих админский web-интерфейс.

Дальше начался подбор систем виртуализации. Из кандидатов были:
-OpenVZ
-KVM
-Xen
-VMWare ESXi

В результате отбора получилось следущее:
-OpenVZ. Опыт работы с ним уже был. Он вообще фактически не разграничивает системы между собой, и работает чисто на уровне эмуляции вызовов ядра. Кроме того, он не позволяет поднимать новые сетевые интерфейсы внутри системы, а значит VPN сервер на нем уже не получится. Для web-хостинга еще пойдет. Для роутеров — нет

-VMWare ESXi не смогли запустить ни на одном из доступных нам компов. Установщик либо просто не запускался, либо система после установки банально не грузилась.

-Xen — отпал потому, что в каждой гостевой машине должно быть то же ядро, что и на хост-машине. Кроме того. Собственно заставить его работать мне вообще не удалось. Может быть виной мои кривые ручки. Поэтому мы перешли к последнему кандидату…

-KVM — ему без разницы, какая гостевая машина запускается внутри хост-машины. Хоть с Виндой, хоть c OS/2. По сути полная изоляция машин друг от друга. Подкупило и то, что RedHat делает ставку именно на эту систему, и советует ее для Enterprise применений. Соответственно всем нашим требованиям оно соответствовало.

Поставили KVM. Быстро разобрались как ставить внутри системы, наладили сетку и маршрутизацию между виртуалками.
Схема была такая. У хост-машины 2 сетевых карты, внутри они связаны в следующую систему:
eth0-хост-машины — виртуальный br0 — [eth0-гостевой-машины-1 — eth1-гостевой-машины-1] — виртуальный br1 — [eth0-гостевой-машины-2 — eth1-гостевой-машины-2] — виртуальный br2 — eth1-хост-машины

Стали тестить. В тестах такая схема вела себя замечательно. Нагрузки почти никакой. Работает стабильно.
Поставили в продакшн. И тут БАЦ! Нагрузка возросла в разы.

Выяснилось, что при потоке трафика через виртуалку около 15Мбит, она жрёт 40% процессора (согласно top) на хост машине. Соответственно уже 2 машины сжирают почти всю процессорную мощность на хост-машине. При этом внутри виртуалок загрузка 1-2%.

Прочитали, что нормальные люди без virtio не живут. Это такие специальные драйвера, которые напрямую пробрасывают физическое железо в виртуалку, без эмуляции его. Собственно это уменьшает нагрузку на хост-машину.

Попробовали. И столкнулись с двумя непонятными вещами:
1) При включении virtio гостевая машина может просто упасть без объяснения причин через 3-8 часов работы
2) Нагрузка на хост-машине не уменьшилась, а осталась на прежнем уровне.

На хост-машине система Gentoo, с ядром 2.6.30, собранным вручную. Всё, что нужно для виртуализации в нее уже вкомпилено.
На гостевых машинах пробовали Ubuntu и ArchLinux. Разницы нет. Падают все.

Пробовали обновлять ядро на хост-машине, обновлять KVM, обновлять гостевую машину… пока это ничего не дало. Все работает без virtio и порой оказывается перегружено
Сейчас продолжаю эксперименты с KVM на другой машине, но уже закралась мысль опробовать Xen… и вообще, может быть я что-то делаю неправильно?
Например чтобы работало virtio, нельзя объединять интерфейс виртуалки с реальной сетевушкой в софтовый бридж… А может все правильно делаю, и так и должно быть? Такая нагрузка, такие проблемы…

В общем нужна помощь компетентных людей.

P/S: Огромная просьба, не давать советы вроде «замени всё на Cisco», «линукс фигня, ставьте фряху». Если вы немного подумаете, то поймете почему эти советы довольно далеки от реальности.
Tags:
Hubs:
+10
Comments107

Articles

Change theme settings