Облако с нуля с использованием XenServer
Недавно мы создали небольшое облако для решения наших внутренних задач и хотим поделиться этим опытом с читателями Хабра. Здесь мы подробно опишем, какое оборудование было выбрано для развёртывания облака и как создать инфраструктуру облачной системы, опираясь на XenServer от компании Citrix. В этом продукте Citrix решила отказаться от стандартного подхода, когда у облака есть некоторый центральный управляющий узел, они разбили его на несколько составляющих и предложили их тоже поместить в облако. Кому интересно, как это всё работает — добро пожаловать под кат!
В нашей статье мы остановимся на таких моментах, как: подготовка аппаратной части, установка XenServer, установка лицензии, создание виртуальной сетевой инфраструктуры, опишем проблемы, возникшие с виртуальными машинами на ОС Ubuntu, расскажем про динамическую балансировку нагрузки, про настройки и разграничение доступа к облаку, и, разумеется, покажем, что у нас получилось.
Подготовка аппаратной части
Первой задачей становится выбор основы для любого облака, а именно — выбор серверов, на которых будет производиться виртуализация. Мы остановили свой выбор на серверах от компании IBM и выбрали IBMx3850 X5.
Каждый IBM основан на IBM X-Architecture и имеет:
• 4 процессора Intel® Xeon® CPUE7- 8860 с тактовой частотой 2.27GHz, что в итоге даёт 40 ядер на сервер (80 потоков);
• 150Гб RAM;
• 2 независимых блока питания;
• карту расширения fibre channel;
• сетевую карту для 10-гигабитного соединения;
• 2 жестких диска по 500Гб, объединённых в RAID1.
Дальше возникает вопрос: где хранить виртуальные машины? Если их хранить на самих серверах, то это уменьшает надёжность системы, т.к. при выходе из строя сервера мы потеряем все виртуальные машины, которые были на нём. Также такой подход сильно усложняет задачу балансировки нагрузки, потому что миграция виртуальной машины потребует перемещения её диска на другой сервер, а это — достаточно долгий процесс. Поэтому в нашем стенде используется внешнее хранилище DELL md3620f, оснащённое 4 выходами fibre channel. Это хранилище поддерживает до 24 жестких дисков, которые могут быть объединены во все популярные типы рейдов(RAID0, RAID1, RAID5, RAID6, RAID01). Мы в нашем случае используем 10 жестких дисков по 1ТБ, объединённых в RAID5.
Что требуется для быстрой миграции? Для обеспечения быстрой миграции между IBMами в состав стенда был добавлен 10гигабитный коммутатор summit x670, это теоретически должно было ускорить миграцию (самый долгий процесс в миграции — передача данных по сети от одного сервера к другому) в 10 раз, но на практике это дало выигрыш только в 5-6 раз. Чтобы у серверов и виртуальных машин был доступ в локальную сеть и Интернет, в состав стенда был добавлен коммутатор HP ProCurve.Также через него идёт трафик к внешним клиентам.
Подводя итог по аппаратной части, мы имеем стенд, включающий в себя:
• 4 сервера IBMx3850 X5
• коммутатор HP ProCurve для соединения до 1000 Мб/сек
• коммутатор Summit x670 для поддержки соединения 10Гбит/сек
• внешнее хранилище DELL md3620f с 10Тб дисковым массивом
• и прочее (источник бесперебойного питания APC Smart-UPS 3000VA, трансиверы для оптоволокна, восемь десятиметровых оптоволоконных кабелей, 50 метров витой пары )
Всё это выглядит так, как представлено на картинке, внизу пять источников бесперебойного питания, которые в случае выхода из строя центрального энергоснабжения, позволят корректно остановить всё запущенное на сервере и отключить сами сервера.
Логическая схема соединения выглядит следующем образом:
Если суммировать, то мы имеем:
• 160 вычислительных ядер (320 потоков);
• 600Гб RAM;
• 14ТБ дискового пространства;
• Высокоскоростную сетевую инфраструктуру.
Установка XenServer
Для запуска виртуальных машин на выбранном нами железе, было решено развернуть облачную платформу XenServer Platinum.
Краткая общая информация о XenServer, если кто не сталкивался: XenServer — это самостоятельная операционная система, основанная на ядре Linux. В основе всего лежит гипервизор XEN, последняя на данный момент версия — используемая версия XenServer 6.1 — основана на гипервизоре XEN 4.1. Для нормальной работы системы необходим процессор с поддержкой виртуализации и 1Гб RAM. Ребята из Citrix не любят писать свои минимальные требования, предпочитая писать максимальные системные требования, с ними можно ознакомиться тут. В семейство XenServer входит несколько версий продукта, отличающиеся ценой и дополнительными функциями.
На все сервера IBM необходимо установить XenServer. Сама установка XenServer является совершенно несложным процессом и не очень отличается от установки Ubuntu. Куда больший интерес представляет настройка системы для последующей удобной работы, что и будет рассмотрено дальше, основное внимание будет уделено компонентам расширения для XenServer, которые предоставляет Citrix. После установки XenServer на все хосты необходимо зайти в XenCenter (его можно скачать, зайдя на web-интерфейс установленного XenServer или с сайта Citrix). В XenCentеr необходимо создать пул и добавить к нему сервера.
Установка лицензии
После установки XenServer первым делом нужно установить лицензии на сервера. Это делается не с помощью ввода лицензионных ключей, а с помощью установки сертификата, полученного в личном кабинете на сайте Citrix. Сертификат представляет собой текстовый файл с лицензионными ключами, записанными в специальном формате. Его можно получить сразу на несколько серверов. Сертификат необходимо установить в специальный центр лицензирования. Тут стоит отметить, что если хотя бы один из сертификатов является не валидным, то все сертификаты не будут действовать.
Citrix предлагает установить центр лицензирования либо на отдельном хосте, либо на виртуальной машине в вашем облаке (она почти не потребляет ресурсов процессора и требует всего 256 Мб оперативной памяти). Но если вы установите его как виртуальную машину, вас могут ожидать неприятности. Однажды вы можете столкнуться с проблемой, с которой столкнулись мы, когда отключили сервера нашего стенда для их апгрейда, а вместе с ними выключилась, соответственно, и виртуалка с центром лицензирования. После включения XenServer выдал ошибку «Кончился срок пробной лицензии» (центр лицензирования ведь был не запущен). Вроде проблем быть не должно: просто включить виртуальную машину центра лицензирования с нормальной лицензией и принять её. Но не тут-то было: с истёкшей лицензией нельзя включить НИКАКУЮ виртуальную машину. Правда, после первоначальной паники в меню принятия лицензии была найдена кнопка «активировать бесплатную версию», после нажатия которой мы увидели фразу «у вас осталось 30 дней пробной лицензии». И уже потом можно запустить виртуальную машину с лицензией.
Создание виртуальной сетевой инфраструктуры
Чтобы гибко управлять сетевыми настройками виртуальных машин и чтобы они не были в одной подсети с серверами XenServer, необходимо наладить виртуальную сетевую инфраструктуру. Для этих целей у Citrix предусмотрен компонент Distributed Virtual Switch Controller (DVSC). Он также предоставляется в виде виртуальной машины, но она потребляет уже больше ресурсов: 2 VCPU и 2Гб оперативной памяти. Настройки DVSC не представляют собой ничего сложного: необходимо указать свободный IP-адрес для виртуальной машины, после чего добавить пул к DVSC.Всё это делается через web-интерфейс. После этих действий появляется возможность создавать виртуальные сети между виртуальными машинами, находящимися на разных серверах (Cross-ServerPrivateNetwork), тогда как до этого было возможно создавать виртуальные сети только в рамках одного сервера (Single-ServerPrivateNetwork).
Если зайти на web-интерфейс DVSС, то там можно увидеть много полезной информации о сетевой инфраструктуре: список созданных сетей, список виртуальных машин, подключенных к конкретной сети, сообщения об ошибках в сети, графики сетевой активности (как для конкретной виртуальной машины, так и для всей сети в целом).
Также DVSC может выступать в роли простого межсетевого экрана, правила которого можно создавать во вкладке AccessControl. Все политики сетевой безопасности делятся на 4 уровня: глобальные политики (т.к. к одному DVSC могут быть подключены несколько пулов), политики пула, политики конкретной сети, политики конкретной виртуальной машины. Правила описывают тип действия (разрешить или запретить), протокол (можно задать порты получатели и отправителя или указать известный протокол) и для кого это правило применять.
В работу межсетевой экран вступает сразу после установки, и в нём сразу записаны 4 базовых глобальных правила:
• разрешать все ARP-сообщения в сети
• разрешать виртуальным машинам получать IP-адрес по dhсp
• разрешать виртуальным машинам обращаться к DNS-серверам
• разрешать весь сетевой трафик (это правило применяется после проверки всех правил других уровней)
Вообще DVSC всем хорош, и по функционалу чем-то напоминает vShield Edge от VmWare, но Edge кажется удобнее за счёт разных мелочей: возможности создания DHCP-сервера, удобной организации Nat для виртуальных машин и т.д. Всё это (отсутствие DHCP-сервера и Nat), конечно, решается с помощью создания отдельной виртуальной машины на базе Ubuntu, но удобно, когда всё уже решено заранее.
Проблема с созданием виртуальной машины с Ubuntu
Вообще создание виртуальных машин с Ubuntu в первый раз вызывает шок и непонимание — как такое попало в релизную версию продукта? Дело вот в чём:
После создания виртуальной машины из стандартного шаблона она не может запуститься и пишет указанную выше ошибку (Error code: INVALID_SOURCE). Ошибка связана с параметрами загрузки виртуальной машины. Бороться с ней можно следующим образом(описание взято тут и чуть-чуть модифицировано для работы с большим числом виртуальных машин):
1. Зайти в консоль XenServer, что можно сделать через XenCenter (вкладка Console у сервера) или по ssh.
2. Узнать uuid виртуальной машины командой xe vm-listname-label=[НАЗВАНИЕ_ВМ]. В нашем примере это выглядит так:
3. Дальше необходимо установить параметры загрузки следующей командой: xe vm-param-setuuid=[UUID_ВМ] HVM-boot-policy=BIOS\ orderHVM-boot-params:order=dc.
4. После этих несложных манипуляций виртуальная машина успешно запустится.
Но на этом ошибки, связанные с работой Ubuntu, не заканчиваются. При создании нашего стенда было принято решение создать шаблоны виртуальных машин с разными ОС, чтобы не тратить время на установку нужной, а сразу брать готовую и туда ставить уже необходимое ПО. С машинами на базе Windows нет никаких проблем, тогда как с Ubuntu возникает проблема чёрного экрана при создании виртуальной машины из образа. Решение этой проблемы оказалось довольно простым, с одной стороны, и немного неправильным, с другой. Проблема решается простой установкой xen-tools на виртуальную машину. Минус такого решения в том, что невозможно предоставить чистую операционную систему, что иногда требуется в рамках решаемых задач.
Динамическая балансировка нагрузки
В рамках решаемых задач часто нужна динамическая балансировка нагрузки между серверами с XenServer. Для этих целей компания Citrix предоставляет виртуальную машину Citrix WLB Virtual Appliance, которую также необходимо добавить в облако, после чего произвести простую настройку через её консоль (при заходе в консоль все необходимые действия машина подскажет сама). После этого нужно зайти в XenCenter и указать пулу, что именно эта виртуальная машина будет отвечать за балансировку нагрузки между серверами (это действие производится во вкладке WLB).
Эта виртуальная машина отслеживает нагрузку на сервера (количество используемых ядер, количество используемой оперативной памяти, сетевая активность) и распределяет её между серверами. Это происходит как при включении виртуальной машины (она запускается на самом незагруженном сервере), так и во время её работы (за счёт миграции).
Настройка и разграничения доступа к облаку
Последней задачей, которую необходимо решить для нормальной работы, является предоставление доступа к облаку. И тут у Citrix, на наш взгляд, самые большие проблемы. Citrix предлагает два варианта получения доступа к облаку: через XenCenter и через web-интерфейс.
Доступ через XenCenter
Если к пулу подключить Active Directory (AD), то появляется возможность создавать пользователей в XenCenter. Компания Citrix решила отказаться от дискреционной модели доступа в XenCenter и реализовала ролевую. Отсюда основная проблема: ВСЕ пользователи видят и имеют доступ ко ВСЕМ виртуальным машинам, регулируется только тип доступа, но он применяется ко ВСЕМ виртуальным машинам сразу (т.е. если даётся роль на запуск виртуальных машин, то сразу всех). Также стоит отметить, что AD должен постоянно быть доступен, т.к. при перезагрузке AD автоматически не добавляется к пулу, и его необходимо каждый раз добавлять вручную.
Доступ через web-интерфейс
Для дискреционного доступа компания Citrix предлагает использовать доступ через web-интерфейс. Для настройки доступа через web-интерфейс необходимо установить виртуальную машину Citrix XenServer Web Self Service. После простой настройки виртуальной машины через её консоль (необходимо задать ip-адрес или указать, чтобы он получался по DHCP) необходимо выполнить ряд настроек через web-интерфейс. Тут Citrix выше всяких похвал за доступное и понятное описание: если вы вошли в качестве администратора, вам сразу будет показан список шагов, которые необходимо выполнить, а также подробно описано, как это делать.
В Citrix XenServer Web Self Service могут использоваться те же пользователи, что есть в AD, или создаваться новые. При первой загрузке XenServer Web Self Service администратору необходимо указать, как он хочет действовать, и это решение уже потом никак нельзя изменить (конечно, всегда можно переставить виртуальную машину, но это повлечёт за собой новую настройку прав доступа к виртуальным машинам). После настройки любой пользователь может получить доступ к конкретной виртуальной машине через браузер. И тут Citrix тоже очень радует: для работы может быть использован любой браузер, а не какой-то ограниченный набор, как у облака от Microsoft (только InternetExplorer) или VmWare (не поддерживается Opera). Для того чтобы пользователь получил доступ к виртуальной машине, администратор должен разрешить доступ к этой виртуальной машине для данного пользователя, что легко делается через web-интерфейс.
К большим недостаткам работы через web-интерфейс можно отнести невозможность настройки физических параметров виртуальной машины (количество процессоров, количество RAM, настройка подключённых сетей и жестких дисков). Так что web-интерфейс — это доступ к графическому интерфейсу виртуальной машины, а не к управлению её физическими параметрами. Мы выполнили все необходимые действия: подготовили аппаратуру, настроили лицензии, развернули… И теперь облако готово к работе!
Наш эксперимент
Для оценки реальной вычислительной мощности серверов мы провели эксперимент, целью которого было максимально загрузить все 80 логических ядер на системе. В качестве основы для проведения эксперимента была взята программа, выполняющая Ray-Tracing простой сцены, без операционной системы и использующая все ядра на всех процессорах в компьютере. О том, как работает эта программа и как получить исходные коды этой программы, можно прочитать тут.
Для эксперимента программа была немного доработана: добавили анимацию движения для одной из сфер на рисунке, добавлен подсчет скорости работы, и добавлена буферизация при рисовании каждого кадра. Для сравнения мощности работы полученной программы мы запускали ее на нескольких компьютерах разной конфигурации, в том числе, и на наших IBM серверах. В эксперименте выполнялся рендеринг сцены из 5-ти сфер в разрешении 800x600. Эксперимент увенчался успехом и IBM сервера показали внушительные показатели производительности. Для всех экспериментов мы записали видео, где цифры зеленого цвета в левом верхнем углу экрана означают количество кадров в секунду (FPS), цифры красного цвета — количество секунд на кадр. Вот такие результаты мы получили:
1. Обычный компьютер: Intel i3-2100, 3.1 GHz, всего 2 ядра. Для каждого ядра 800x600/2=240000 точек на кадр. Как видно из видео, скорость составила примерно 0.5 FPS (на один кадр тратилось более 2-х секунд).
2. Компьютер на современном мощном процессоре: Intel i7-4770, 3.4 GHz, всего 8 ядер. Для каждого ядра 800x600/8=60000 точек на кадр. Результат — примерно 2 кадра в секунду, как можно видеть на видео.
3. IBM сервер из стойки: Intel Xeon E7-8860 2.3 GHz, на каждом компьютере по 4 процессора по 10 физических ядер (на каждом ядре 2 логических) — итого 80 ядер. Для каждого ядра 800x600/80=6000 точек на кадр. Результат — 12-14 FPS — что значительно больше, чем у других систем.
Интересно, что если запустить на IBM сервере рендеринг в разрешении 1280x1024, и позволить ядрам процессора работать без буферизации, то можно заметить, как кадр рисуется из 80-ти полосок!
Вот что у нас получилось. Надеемся, что, прочитав нашу статью, вы сможете легко сделать облако сами, избежав тех проблем, которые мы здесь описали, или успешно справившись с ними!