Project

General

Profile

НАСТРОЙКА

OVERVIEW | INSTALL | SETUP | OPERATIONS | LICENSE
ОБЗОР | УСТАНОВКА | НАСТРОЙКА | ОПЕРАЦИИ | ЛИЦЕНЗИЯ

Перед началом настройки убедитесь, что обе ноды включены и функционируют.

Если Вы планируете использовать второй сетевой адаптер для drbd линка, перед инициализацией кластера Вы должны настроить его.
Войдите на первую ноду через консоль или по ssh. (При соединении по ssh, из-за недоступности в этот момент DNS-сервиса, перед запросом пароля возможна
пауза до минуты).

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

Схемы настройки сети могут сильно различаться в зависимости от условий установки и назначения кластера.
Здесь приведена типовая схема с двумя интерфейсами - один для интерлинка (ganeti и drbd), а другой для локальной сети.

Эта схема предпочтительна для большинства ситуаций.
Она не требует наличия гигабитных коммутаторов, предоставляет неплохую надежность и производительность при низких затратах.
Два гигабитных интерфейса на узлах подключены друг к другу напрямую или через гигабитный коммутатор(если Вы хотите более чем 2 узла в кластере).
Два других интерфейса подключаются к LAN.
В этой схеме сбой в локальной сети не влияет на работоспособность кластера.
Пример конфигурации /etc/network/interfaces:

auto backbone
iface backbone inet static
    address 192.168.236.1
    netmask 255.255.255.0
    network 192.168.236.0
    broadcast 192.168.236.255
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
#       uncomment it to enable jumbo frame
#    up ifconfig eth0 mtu 9000

auto lan
iface lan inet static
    address 192.168.5.55
    netmask 255.255.255.0
    network 192.168.5.0
    broadcast 192.168.5.255
    gateway 192.168.5.1
    bridge_ports eth1
    bridge_stp off
    bridge_fd 0

Мост backbone используется для drbd и ganeti обмена, он автоматически настраивается при установке узлов.
Также адрес DNS сервера настроен установщиком - это будет адрес нашей сервисной машины(sci).
Мост lan используется для подключения к локальной сети и должен быть настроен вручную (в файле interfaces есть заготовка).
В такой конфигурации Вы должны заполнить следующие переменные в sci.conf:
NODE1_IP - Уже настроено установщиком.
NODE1_NAME - Уже настроено установщиком.
NODE2_IP - укажите ip адрес второй ноды на интерлинке (например, 192.168.236.2)
NODE2_NAME - укажите имя второй ноды (напр. gnt2)
NODE1_LAN_IP - ip адрес первой ноды в локальной сети. Он будет доступен в днс под именем $NODE1_NAME-lan.$DOMAIN
NODE2_LAN_IP - ip адрес второй ноды в локальной сети. Он будет доступен в днс под именем $NODE2_NAME-lan.$DOMAIN
CLUSTER_IP - Адрес кластера в локальной сети. НЕ должен совпадать с любым другим существующим адресом. Напр. 192.168.5.35.
CLUSTER_NAME - Имя кластера в локальной сети. Будет доступно в днс под $CLUSTER_NAME.
SCI_LAN_IP - если Вы хотите, чтобы виртуальная машина sci присутствовала в lan, назначьте этот адрес, напр. 192.168.5.95

На странице Настройка сети вы можете посмотреть и выбрать другие схемы на разные случаи жизни.

Задание параметров для кластера

Для задания параметров следует отредактировать /etc/sci/sci.conf

Большинство параметров уже было описано выше в секции "Настройка сети".
Здесь указаны дополнительные замечания по поводу настройки:

  • Вы должны указывать параметры двух узлов в соответствии с тем, как Вы их настроили.
  • ПРИМЕЧАНИЕ: Вы можете настроить кластер и с одним узлом. В этом случае оставьте переменные NODE2_* пустыми.
    По факту это опасная конфигурация, о чем Вы и будете предупреждены во время инициализации кластера.

Обязательные параметры:

  • CLUSTER_IP - Вы обязательно должны указать ip адрес кластера. Это адрес, по которому можно всегда попасть на мастер ноду кластера.
  • NODE2_NAME и NODE2_IP - Вы обязательно должны вписать имя и ip адрес второго узла, если он присутствует.

Необязательные параметры:

  • NODE#_SAN_IP - ip адрес узлов в отдельной сети для drbd. Используется, если в сети присутствует отдельный сегмент для drbd. Должен быть указан для обоих нод или ни для одной.
  • NODE#_LAN_IP - ip адрес узлов в LAN подсети. Должен быть указан для обоих нод или ни для одной.
  • Если Вы не имеете подключения к интернету или имеете локальные зеркала для apt, скорректируйте переменные APT_*
  • Если Вы хотите передавать запросы на сторонние DNS сервера, заполните DNS_FORWARDERS (не забудьте на конце ';').
  • MASTER_NETDEV - имя сетевого интерфейса для поднятия ip адреса кластера. По умолчанию определяется автоматически.
  • LAN_NETDEV - Сетевой интерфейс по умолчанию для виртуальных машин. По умолчанию определяется автоматически.
  • RESERVED_VOLS - Список lvm томов, игнорируемых ganeti. Разделяется запятой. Следует указывать VG для каждого элемента списка.

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

Удостоверьтесь, что на обоих узлах установлено одинаковое время.

# date
Thu Mar 12 12:23:10 MSK 2015

Если нет - установите его командой

# date -s "12 MAR 2015 12:23:00" 

Запустите:

# sci-setup cluster

Проверьте выведенные настройке и примите их, либо скорректируйте и запустите скрипт еще раз.
После принятия настроек запустится процесс инициализации кластера.
Далее Вы должны принять ssh ключ для второй ноды и набрать root пароль для второй ноды.
В конце Вы увидите вывод команды диагностики кластера. Он будет выглядеть наподобие этого:

Verify
Wed Jan 12 15:36:10 2011 * Verifying global settings
Wed Jan 12 15:36:10 2011 * Gathering data (1 nodes)
Wed Jan 12 15:36:11 2011 * Verifying node status
Wed Jan 12 15:36:11 2011 * Verifying instance status
Wed Jan 12 15:36:11 2011 * Verifying orphan volumes
Wed Jan 12 15:36:11 2011 * Verifying orphan instances
Wed Jan 12 15:36:11 2011 * Verifying N+1 Memory redundancy
Wed Jan 12 15:36:11 2011 * Other Notes
Wed Jan 12 15:36:11 2011 * Hooks Results
Node                    DTotal  DFree MTotal MNode MFree Pinst Sinst
gnt1.ganeti.example.org 100.0G 100.0G  1020M  379M  625M     0     0
gnt2.ganeti.example.org 100.0G 100.0G  1020M  379M  625M     0     0
If all is ok, proceed with /usr/local/sbin/sci-setup service

Установка сервисной виртуальной машины

Имя хоста для нашей сервисной виртуальной машине - sci, также имеются несколько алиасов.
Ее основной ip адрес берется из /etc/resolv.conf на первой ноде.
Эта виртуальная машина должна присутствовать в /etc/hosts на обоих нодах.

Запустите:

# sci-setup service

Вы увидите индикатор процесса синхронизации drbd дисков, затем:

* running the instance OS create scripts...

appears. The further may take a while. The process finishes with
* starting instance...

Теперь Вы можете подключиться к консоли виртуальной машины:

# gnt-instance console sci

Логиньтесь под рутом, пароль пустой.
ПРИМЕЧАНИЕ: Т.е. рутовый пароль пуст, ssh соединения запрещены. Установите пароль и установите openssh-server.

Автонастройка сервисной машины

Система будет настроена автоматически посредством puppet.
Вы можете следить за процессом выполнения в /var/log/daemon.log.
Поначалу в системе не будет команды less, но Вы можете использовать more, cat, tail или tail -f
пока less не будет автоматически установлен.
В процессе автонастройки может потребоваться перезапустить puppet. По умолчанию он запускается каждые полчаса.
При желании можно перезапустить его руками:

# /etc/init.d/puppet restart

Повторяйте это раз в несколько минут, пока не увидите, что puppet больше ничего не делает.

Установка новых виртуальных машин

Новые виртуальные машины добавляются стандартными командами ganeti:

gnt-instance add -t drbd -o debootstrap+default -s 10g -B memory=256m -n NODE1_NAME:NODE2_NAME INSTANCE_NAME
Однако, наш проект дополняет процесс несколькими специфичными хуками:
  1. На каждую машину ставится puppet для автоконфигурации, openssh-client для обмена файлами и т.д.
  2. На каждую машину ставится pygrub.
  3. Сетевые настройки для машины могут быть назначены автоматически(см. ниже).

Автонастройка сети на виртуальных машинах.

Если Вам необходимо, чтобы виртуальные машины могли быть подключены к нескольким сетям и Вам необходимы статичные
настройки сети на них, Вы должны заполнить файл /etc/ganeti/networks всеми нужными для подключения машин сетями.
Каждая строчка файла имеет формат:

NETWORK NETMASK BROADCAST GATEWAY

Ganeti instance debootstrap хук смотрит в этот файл, находит сеть для заданного ip и настраивает сеть
на виртуальной машине автоматически.

ПРИМЕЧАНИЕ: Этот файл заполняется при инициализации кластера, так что в большинстве случаев Вам не потребуется
туда что-то добавлять.
ПРИМЕЧАНИЕ: файл networks должен присутствовать на каждой ноде (еще не автоматизировано).

Добавление фильтра в настройки lvm:

При дефолтных настройках lvm многие операции с кластером могут быть сильно замедленными при большом количестве lvm томов.
Поэтому в sci по умолчанию используется фильтр в /etc/lvm/lvm.conf, который ищет vg только на md:

filter = [ "a/md/", "r/.*/" ]

Если Вы не используете md, фильтр нужно заменить на:
filter = [ "a/.*/" ]

и выполнить

vgscan

Добавление дополнительной VG

Если в сервере есть два типа дисков, например 4xSATA + 2xSSD, то необходимо иницииализировать вторую VG и (при необходимости) сделать ее основной для создания виртуальных машин:

Действия выполняются на каждой ноде:
Разметить диск:

выбираем диск

parted /dev/sdX 

выбираем в чем выводиться будет размер диска (в данном примере MiB)
unit MiB

создаем метку диска в нашем случае это msdos
mklabel msdos

Размечаем диск
(parted) mkpart

Выбираем тип раздела диска в нашем случае это primary
Partition type?  primary/extended? primary

Выбираем файловую систему в нашем случае ext2
File system type?  [ext2]? 

Начало диска у нас с 4MiB
Start? 4

Конец диска так как это ссд мы оставляем 1-2GB в MiB
End? 954000


Копируем разделы диска с sda (наш ssd что разбивали выше) на sdb (не размеченный диск второй ssd)
sfdisk -d /dev/sda|sfdisk /dev/sdb


Если у нас диски должны быть в софтварном рейде настраиваем raid в parted
(parted) mkpart
toggle 1 raid

Проинициализировать md, vg

-n2 (количество дисков в рейде) -l1 (какой рейд, в данном варианте рейд1) /dev/md3 (смотрим командой cat /proc/mdstat, свободный md в нашем случае это md3)

mdadm --create -n2 -l1 /dev/md3 /dev/sda1 /dev/sdb1 
pvcreate /dev/md3
vgcreate ssd /dev/md3

Так же необходимо добавить новый рейд в конфиг mdadm, чтобы он виделся после перезагрузки
Узнаем его UUID
mdadm --examine --scan

Добавляем строчку с нужным массивом в файл
/etc/mdadm/mdamd.conf

И пересобираем initrd

dpkg-reconfigure mdadm

И, наконец, настроить кластер по умолчанию на использование новой vg, а также на использование этой vg для метаданных drbd (выполняется 1 раз, на мастере):
gnt-cluster modify --vg-name=sas --disk-parameters=drbd:metavg=sas

По умолчанию для всех дисков в кластере устанавливается шедулер deadline
В случае, если используется аппаратный raid контроллер или отдельное хранилище, подключенное по FC/Infiniband/iSCSI, то, ВОЗМОЖНО, будет иметь смысл поставить шедулер noop. Однако, deadline подходит для всех типов дисков.

Статья про сравнение трех вариантов offset в raid10 (в SCI используется дефолтный, NEAR):
http://www.ilsistemista.net/index.php/linux-a-unix/35-linux-software-raid-10-layouts-performance-near-far-and-offset-benchmark-analysis.html?start=1

Настройка Hugepages

Операции с кластером

Читайте в ОПЕРАЦИИ.