Ganeti

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 00:02, 2 апреля 2016.

Введение

Ganeti — система управления виртуальными машинами на кластере физических серверов, построенном на основе систем виртуализации Xen или KVM. Использует DRBD для организации отказоустойчивых кластеров. Знает про живую миграцию (для KVM, начиная с Ganeti 2.0) и умеет ею пользоваться.

Ganeti – это набор инструментов для управления кластером виртуальных серверов, он является надстройкой над монитором виртуальной машины Xen и некоторыми другими программами с открытым исходным кодом. После настройки, у вас появится автоматизированное окружение для управления виртуальной машиной высокой доступности. Этот набор был разработан для облегчения управления кластером виртуальных машин и позволяет просто и быстро провести восстановление на стандартных аппаратных средствах после физического сбоя. Он возьмёт на себя такие операции как:

  • обеспечение избыточности при создании и управлении дисками;
  • установка операционной системы (при поддержке специализированных для ОС сценариев установки);
  • запуск;
  • установка;
  • обеспечение отказоустойчивости на нескольких физических системах.

Возможности Ganeti

  • Гипервизоры - Xen и KVM
  • Дисковые разделы - файлы, LVM или DRBD-устройства
  • Централизованное (из единой точки для всего кластера) создание/удаление/миграция виртуальных машин.
  • Создание "пустых" виртуальных машин из пакетов репозитория (ganeti-instance-altbootstrap)[1]

Руководство по быстрой установке Ganeti

Требование к программному обеспечению

Перед установкой убедитесь что у вас установлены следующие программы:

  • Xen Hypervisor, версия 3.0 или выше , если работает на Xen.
  • KVM Hypervisor, версия 72 или выше если работает на KVM. Для того чтобы использовать расширенные возможности, такие как Живая_миграция_(Операционные_Системы), virtio, и так далее.
  • DRBD, режим ядра и пользовательские утилиты , версия 8.0.7 или выше.
  • LVM2
  • OpenSSL
  • OpenSSH
  • Bridge Utilities
  • Iproute2
  • arping(Часть iputils)
  • Python, версии 2.4 или выше ,но не выше 3.0
  • Python OpenSSL bindings
  • simplejson Python module
  • pyparsing Python module
  • pyinotify Python module
  • ctypes Python module
  • socat

Эти программы поставляются в составе большинства дистрибутивов Linux, поэтому они могут быть установлены через стандартный менеджер пакетов. Также многие из них уже должны быть установлены на стандартную машину. На Debian/Ubuntu , вы можете использовать следующие командную строку для установки всех необходимых пакетов , за исключением DRBD и Xen.

                 $ apt-get install lvm2 ssh bridge-utils iproute iputils-arping \
                 python python-pyopenssl openssl python-pyparsing \
                 python-simplejson python-pyinotify scout

.

Установка программного обеспечения

Чтобы установить, просто запустите следующую команду:

               ./configure --localstatedir=/var --sysconfdir=/etc && \
               make && \
               make install

Это позволит установить программное обеспечение в соотвествии с /usr/local. Затем необходимо скопировать doc/examples/ganeti.initd в /etc/init.d/ganeti и интегрировать его в загрузку (chkconfig, update-rc.d, etc.).

Установка кластера

Прежде чем устанавливать кластер, на каждом узле необходимо создать следующие каталоги:

  • /etc/ganeti
  • /var/lib/ganeti
  • /var/log/ganeti
  • /srv/ganeti
  • /srv/ganeti/os
  • /srv/ganeti/export

После этого, использовать gnt-cluster init.[2]

Установка базовой системы и базовых компонентов

Требование к оборудованию

Подойдет любая система поддерживающая linux дистрибутив. Лучше использовать 64 битную систему, так как она поддерживает больше памяти.

Любой диск распознается Linux (IDE/SCSI/SATA/etc.) и поддерживается в Ganeti. Обратите внимание на то, что ненужно общего хранилища (например SAN ) для получения функций обеспечения быстрого доступа (но конечно, она может быть использована для хранения изображений).Настоятельно рекомендуем использовать более одно диска для улучшения скорости. Но Ganeti также работает с одного диска на каждую машину.

Установка базовой системы.

Установка обязательна на всех узлах.

Рекомендовано начинать с базовой установки операционной системы. Единственное требование, которое необходимо на данном этапе ,достаточное количество свободного места для для больших томов (минимум 20Gb)LVM группы, которая будет размещать экземпляр файловой системы, если вы хотите использовать все функции Ganeti. Имя группы томов Ganeti использует по умолчанию xenvg.

Также вы можете использовать файловое хранилище, только без lvm, но эта установка не описана детально в этой статье.

В то время как вы используете существующую систему, обратите внимание на то, что установка Ganeti восприимчива к изменениям системной конфигурации и лучше использовать недавно установленную систему без важных изменений в ней.

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

Это упростит этот процесс.

Проблемы хоста

Обратите внимание , что Ganeti требует полные имена хостов( то есть чтобы host команда выводит полностью определенное имя, а не короткое.Другими словами, нужно использовать node1.example.com в качестве хоста , а не просто node1 )

В Debian : В Debian lenny и etch формирует имя хоста по другому , чем это нужно Ganeti. Например, это, то что etch вставляет в /etc/hosts в определенных ситуациях:

                    127.0.0.1       localhost
                    127.0.1.1       node1.example.com node1

но для Ganeti необходимо иметь:

                    127.0.0.1       localhost
                    192.168.1.1     node1.example.com node1

замена 192.168.1.1. с адресе узла. Кроме того , файл , /etc/hostname , который формирует имя хоста, должен содержать node1.example.com, а не просто node1 ( нужно выполнить команду /etc/init.d/hostname.sh start после изменения файла)

Почему нужно указывать полное имя хоста: Хотя большинство дистрибутивов используют только короткое имя в /etc/hostname файле, мы до сих пор считает , что узлы Ganeti должны использовать полное имя. Причина этого состоит в том , что запрос имени хоста 'hostname -fqdn' требует, чтобы работала распозновательная библиотека и является 'guess' через эвристику в которой является доменным именем. Также Ganeti могут использоваться для размещения DNS серверов, мы не хотим зависеть от них на столько , на сколько это возможно и мы бы предпочли бы иметь uname() syscall возвращающий полное имя узла.

Мы никогда не находили поломки в использовании полного имени хоста в системе linux, и так или иначе мы рекомендуем иметь только базовую установки Ganeti на узлах и использовать версии( или другие выделенные машины) чтобы управлять остальной частью сетевых служб. Делая, это Вы можете изменить имя /etc/hostname файла содержащего FQDN без опасения повредить, то что с нем не связанно.

Установка Гипервизора

УстановкаОбязательна на всех узлах.

В то время как Ganeti разработана с возможностью модульно работать на различных средах виртуализации, на данный момент пригодны к использованию только две системы Xen и Kvm. Поддерживаемые версии Xen являются:3.0.3.,3.0.4.и 3.1. Поддерживаемые версии KVM от 72 и выше.

Пожалуйста, следуйте рекомендуемым способом дистрибутива для установки и настройки Xen.Для KVM , убедитесь , что у вас есть KVM с поддержкой ядра и KVM инструменты.

После установки Xen, нужно перегрузиться в новую систему. Некоторые дистрибутивы могут включать в себя конфигурации Grub соответственно, в то время как другие будут настроены автоматически при установке соответствующих ядер. Для KVM перезагрузка не требуется.

Xen на Debian: В lenny или etch можно установить соответствующий пакет xen-linux-system , который будет тянуть гипервизор и соответсвующее ядро. Если вы устанавливаете 32- разрядную lenny/etch, вы должны установить пакет libc6-xen ( запуск apt-get install libc6-xen)

Xen настройки

Рекомендуется , чтобы dom0 был ограничен низким объемом памяти(512Мб или 1гб разумно) и что увеличения памяти было отключено в файле /etc/xen/xend-config.spx, установив значение dom0-min-mem в 0, как в этом примере:

          (dom0-min-mem 0)

Для оптимальной производительности при работе процессора и ввода/вывода при экстренных случаях , также рекомендуется , чтобы dom0 был ограничен только одним центральным процессором, например, загрузившись с параметром ядра nosmp.

Рекомендуется отключить автоматическое сохранение состояний виртуальных машин на завершение работы и последующего восстановления их при перезагрузке Xen.Для достижения этого убедитесь что разнообразные XENDOMAIN_SAVE находятся в файле /etc/default/xendomains настоянные на пустое значение.

Если вы хотите использовать динамическую живую миграцию , убедитесь что вы имеете в Xen файл конфигурацию , что позволяет узлам меняться между собой. Например:

          (xend-relocation-server yes)
          (xend-relocation-port 8002)
          (xend-relocation-address )
          (xend-relocation-hosts-allow '^192\\.168\\.3\\.[0-9]+$')

Вторая строчка предполагает , что параметр гипервизора , migration_port установлен 8002 , иначе изменяет его. Последняя строчка предполагается, что все узлы имеют вторичный IP в 192.168.3.0/24 сети , регулируют ее соотвественно вашей установке.

В Debian: Изменение расширения , которые необходимо установить /etc/xen/xend-config.sxp , установить память и nosmp параметры в файл /boot/grub/menu.lst. Нужно изменить переменные xenhopt,чтобы добавить dom0_mem-1024M как это:

         ## Xen hypervisor options to use with the default Xen boot option
         # xenhopt=dom0_mem=1024M

и xenkopt должен включать выбор параметра nosmp как это:

      ## Xen Linux kernel options to use with the default Xen boot option
      # xenkopt=nosmp

Любые существующие параметры можно выставить по умолчанию: xenkopt=консоли=tty0 nosmp После изменения файлом необходимо запустить:

     /sbin/update-grub

Если вы хотите запустить HVM также с Ganeti и иметь доступ VNC консоли , установите следующие в /etc/xen/xend-config.sxp:

      (vnc-listen '0.0.0.0') (vncpasswd )

Перезапускаем Xen демон для этих параметров , чтобы активировать их:

      /etc/init.d/xend restart

Выбор ядра

После того , как установлен Xen, нужно сообщить Ganeti что ядро для экземпляров будет создавать она. Это делается путем создания symlink от фактического ядра до /boot/vmlinuz-2.6-xenU , и один от initrd до /boot/initrd-2.6-xenU. Обратите внимание на то, что если вы не используете initrd для ядра domU то создавать initrd symlink не нужно. Debian: После установки пакета xen-linus-system вы должны запустить (заменив номер версии на свою)

         cd /boot
        ln -s vmlinuz-2.6.26-1-xen-amd64 vmlinuz-2.6-xenU  
        ln -s initrd.img-2.6.26-1-xen-amd64 initrd-2.6-xenU

Установка DRBD

Рекомендуется на всех узлах: DRBD требуется ,если необходимо использовать функции быстрого доступа (HA) Ganeti, но если вам они не требуются или вы запускаете Ganeti с кластера одного узла, то вы можете выбрать параметры. Вы можете обновить функции быстрого доступа позднее на кластерах, но вам может понадобиться экспортировать и импортировать все шаблоны,чтобы воспользоваться новыми функциями.

Поддержка в DRBD начинается с 8.0+. Рекомендуется иметь как минимум версию 8.0.12. Обратите внимание, что для версии 8.2 и новее нужно передать параметр usermode_helper=/bin/true к модулю , или формируя /etc/modeules вставить его в ручную.

Недостатки: если ваш дистрибутив уже содержит DRBD , то установка может потребовать перекомпиляцию ядра или в любом случае настройка совместимости с ним.

Преимущества: вам не нужно настраивать DRBD, Ganeti сделает это за Вас на каждый узел который вы устанавливаете. Если есть установлены утилиты DRBD и модуль в ядре то система будет работать.Проверьте, что ваша система формируется для загрузки модуля при каждом запуске и то что он передает следующие параметры модулю: minor_count=NUMBER. Рекомендуется использовать 128 в качестве значения minor_count это позволит использовать до 64 шаблонов в общем на каждый узел( как первичного так и вторичного только для одного диска в шаблоне ). Можно увеличить это число до 255 , если вам нужно дополнительные шаблоны узла.

В Debian: НА Debian можно просто установить модуль DRBD со следующими командами, удостоверяясь, что Вы управляете целевым ядром (Xen или KVM) :

   apt-get install drbd8-source drbd8-utils
   m-a update
   m-a a-i drbd8
   echo drbd minor_count=128 usermode_helper=/bin/true >> /etc/modules
   depmod -a
   modprobe drbd minor_count=128 usermode_helper=/bin/true

Также рекомендуется , чтобы была информация о функциях по умолчанию в файле /etc/drbd.conf , чтобы<code> init подлинник не пытался формировать любые drbd устройства .Это делается путем предварительного фиксирования всех линий ресурса в файле с ключевым словом skip , как это:

   skip resource r0 {
    ...
  }
   skip resource "r1" {
     ...
   }

Настройка окружения для Ganeti

Настройка сети

Обязательна на всех узлах.

Ganet можно запустить либо в режиме моста, либо в режиме маршрутиризации. В режиме моста , по умолчанию, шаблоны сетевых интерфейсов будут присоединены к мосту программного обеспечения,запущенному на dom0. Xen по умолчанию создает мост при запуске, но дистрибутив может иметь другой способ сделать это , и нужно вручную настроить его под KVM.

Помните по умолчанию имя которое использует Ganeti xen-br0 (который был использован в Xen 2.0) в то время как Xen 3.0 использует xenbr0 по умолчанию. Посмотрите раздел инициализация кластера что бы узнать как выбрать другой мост или не использовать его совсем, а использовать узел маршрутизации.

Для того что бы использовать режим маршрутизации в Xen, нужно изменить соответсвующие параметры в файле конфигурации Xen. Под KVM вместо этого , изменение конфигурации не требуется, но нужно настроить сетевые интерфейсы правильно.

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

Нужно формировать свою таблицу маршрутизации основных маршрутов и правил за пределами Ganeti.

Под Debian: Рекомендуемый способ формировать Xen мост состоит в том что бы отредактировать файл /etc/network/interaces и заменить на:

        auto xen-br0
       iface xen-br0 inet static
       address YOUR_IP_ADDRESS
       netmask YOUR_NETMASK
       network YOUR_NETWORK
       broadcast YOUR_BROADCAST_ADDRESS
       gateway YOUR_GATEWAY
       bridge_ports eth0
       bridge_stp off
       bridge_fd 0

Следующие команды должны быть выполнены на локальной консоли:

ifdown eth0 ifup xen-br0

Чтобы проверить работоспособность моста используйте команды brctl show и ip


          # ip a show xen-br0
          9: xen-br0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc noqueue
              link/ether 00:20:fc:1e:d5:5d brd ff:ff:ff:ff:ff:ff
              inet 10.1.1.200/24 brd 10.1.1.255 scope global xen-br0
              inet6 fe80::220:fcff:fe1e:d55d/64 scope link
                 valid_lft forever preferred_lft forever
          # brctl show xen-br0
          bridge name     bridge id               STP enabled     interfaces
          xen-br0         8000.0020fc1ed55d       no              eth0

Конфигурирование LVM

УстановкаОбязательна на всех узлах.

Для группы томов покрасней мере не обходимо 20GiB

Если настройки группы томов еще не происходило, то необходимо сделать это , прежде чем инициализировать кластер Ganeti. Это делается путем форматирования устройства,разделов которые будут использованы, а затем добавление в соотвествующие группы томов:

      pvcreate /dev/sda3
      vgcreate xenvg /dev/sda3

или:

      pvcreate /dev/sdb1
      pvcreate /dev/sdc1
      vgcreate xenvg /dev/sdb1 /dev/sdc1

Чтобы добавить устройство позже, это можно сделать так с командой vgextend :

      pvcreate /dev/sdd1
      vgextend xenvg /dev/sdd1

Дополнительно: рекомендуется настроить LVM не скандируя DRBD устройства для физических томов. Это можно сделать путем редактирования /etc/lvm/lvm.conf и добавляя регулярное выражение /dev/drbd[0-9]+к переменной filter , как это:

filter = ["r|/dev/cdrom|", "r|/dev/drbd[0-9]+|" ]

Обратите внимание, что в Ganeti предусмотрен вспомогательный скрипт lvmstrapкоторый будет стирать и конфигурировать ,как LVM любой не использованный диск в вашей системе. Это опасно и рекомендуется прочитать --helpпри использовании.

Установка Ganeti

УстановкаОбязательна на всех узлах.

Пора теперь установить само программное обеспечение Ganeti. Загрузите файл установки со страницы проекта Ganeti и установите его (заменив 2.0.0 на вашу версию):

     tar xvzf ganeti-2.0.0.tar.gz
     cd ganeti-2.0.0
     ./configure --localstatedir=/var --sysconfdir=/etc
     make
     make install
     mkdir /srv/ganeti/ /srv/ganeti/os /srv/ganeti/export

Так Требуется скопировать файл doc/examples/ganeti.initd от исходного архива в /etc/init.d/ganeti и зарегистрировать его с помощью скриптов запуска дистрибутива, например , в Debian:

update-rc.d ganeti defaults 20 80

Для того, чтобы автоматически перезапустить не рабочие шаблоны , нужно настроить задание: выполнить команду ganeti-watcher .Образец хрон файла в исходном на doc/examples/ganeti.cron скопировать в /etc/cron.d/ganeti.

Что было установлено

Выше по ссылке make install через механизм дистрибутивов установите в системе:

  • Библиотеки python под именем ganeti в зависимости от версии языка python который может быть расположен или в lib/python-$ver/site-packages или в любых других расположениях.
  • Набор программ по /usr/local/sbin или /usr/sbin
  • Страница руководства для выше перечисленных программ.
  • Набор инструментовlib/ganeti/tools директории
  • Пример скрипт распределения шаблонов( смотрите руководство Администратора для более детальной информации ) по lib/ganeti/iallocators
  • Хрон работа которая необходима для поддержки кластера
  • Внутренний скрипт для автоматической установки демонов Ganeti
  • Обеспечено но не установлено автоматически male installэто скрипт будет легко работать с другими многочисленными программами кластера

Установка операционной системы поддержки пакетов

Установка обязательна на всех узлах

Для того что бы установить шаблоны, вам необходимо иметь Скрипт установки Операционной Системы, например OS которая работает на Debian и может установить Debian и Ubuntu обеспечивается через webсайт проекта.Загрузите его со страницы проекта и следуйте инструкция в файле READMEздесь происходит процедура установки (замените 0.9 на последнюю версию которая совместима с версией Ganeti)

     $ cd /usr/local/src/
     $ wget http://ganeti.googlecode.com/files/ganeti-instance-debootstrap-0.14.tar.gz
     $ tar xzf ganeti-instance-debootstrap-0.14.tar.gz
     $ cd ganeti-instance-debootstrap-0.14
     $ ./configure --with-os-dir=/srv/ganeti/os
     $ make
     $ make install

Для того чтобы использовать эту версию OS, вам необходимо иметь интернет доступ с ваших узлов, и иметь возможность debootstrap, dump and restore команды установленные на всех узлах. Также операционная система OS сконфигурирована для отправки шаблона диска в /etc/default/ganeti-instance-debootstrapвам необходимо установить kpartx

В Debian:Используйте эту команду на всех узлах для установки необходимых пакетов

    $ apt-get install debootstrap dump kpartx

KVM: Для установки и запуска шаблонов необходимо перезапустить систему , чтобы шаблоны могли установить основные acpiконфигурации поддержки внутри самого шаблона. Какие пакеты требуются зависит от конфигурации Debian или Ubuntu которые вы устанавливаете, но с примером фала по умолчанию сообщает конфигурацию которая работает на Debian lenny :

      EXTRA_PKGS="acpi-support-base,console-tools,udder"

kbd может быть использован вместо console-tools и больше пакетом может быть добавлено при необходимости.

Альтернативно, вы можете создать свою собственную OS. Cмотрите руководство пользователя |ganeti-os-interface

Инициализация кластера

УстановкаОбязательна на один из узлов, на первый.

Последний шаг состоит в инициализации кластера , после того как выше описанная процедура была проделана на всех узлах, выбираем один узел как мастер, и выполняем:

gnt-cluster init <CLUSTERNAME>

В CLUSTERNAME -это имя хоста, которое должно быть разрешимым ( например , он должен существовать в DNS или в /etc/hosts ) всеми узлами в группе. Имя кластера должно отличаться от любого из названий узлов группы мультиузла. В целом лучше всего выбрать уникальное имя для группы, даже если она состоит из одной машины, посколько в дальнейшемможно будет расширить ее.

Если используется мост,который не является xen-br0или нет моста вообще, измените его с помощью опции --nic-parameters.Например, мост на br0:

--nic-parameters link=br0

или не использовать мост вообще и использовать отдельную таблицу маршрутизации:

--nic-parameters mode=routed,link=100

Если нет интерфейса xen-br0,нужно также определять различный сетевой интерфейс,который получить ip группы, на главном узле, при помощи выбора --master-netdev <device>

Можно использовать другое имя , в отличие от xenvg для группы( но имя должно быть идентично на всех узлах).В этом случае вам необходимо его специфицировать опустив букву -g <VGNAME> до gnt-cluster init

Для настройки кластера, как кластера виртуализации Xen HVM , используется опция --enabled-hypervisors=xen-hvm чтобы включить гипервизор. Также нужно создать сервер VNC кластера файла паролей /etc/ganeti/vnc-cluster-password который по умолчанию содержит одну строчку с паролем для кластера.

Для установки кластера для использования только KVM ( KVM и Xen не могут быть смешанны пропустите --enabled-hypervisors=kvm в init

Что бы увидеть все возможности используйте команду --help

Присоединение узлов к кластеру

Обязательно для всех узлов.

После инициализации кластера нужно присоединить все оставшиеся узлы к нему. Для этого нужно выполнить следующую команду на главном узле:

gnt-node add <NODENAME>


Тестирование установки

Выполните команду gnt-node list чтобы увидеть все узлы в группе:

       # gnt-node list
       Node              DTotal  DFree MTotal MNode MFree Pinst Sinst
       node1.example.com 197404 197404   2047  1896   125     0     0


Вышеизложенное показывает несколько вещей:

  • Различные Ganeti демоны могут общаться друг с другом.
  • Ganeti может проверять хранилище узла(DTotal/DFree)
  • Ganeti может говорить с выбранным гипервизором. (MTotal/Mode/Free)[3]

Список источников

Ganeti public git