Проект

Общее

Профиль

НАСТРОЙКА » История » Версия 5

Версия 4 (Dmitry Chernyak, 26.11.2012 00:07) → Версия 5/36 (Dmitry Chernyak, 26.11.2012 00:08)

h1. НАСТРОЙКА

{{toc}}

[[УСТАНОВКА]] | [[СБОРКА-ISO]] | [[НАСТРОЙКА]] | [[ОПЕРАЦИИ]] | [[ЛИЦЕНЗИЯ]] | [[СОСТОЯНИЕ]]
in English: [[OVERVIEW]] | [[INSTALL]] | [[BUILD-ISO]] | [[SETUP]] | [[OPERATIONS]] | [[GITMAGIC]] | [[LICENSE]] | [[STATUS]]

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

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

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

Схемы настройки сети могут сильно различаться.
Далее мы рассмотрим несколько распространенных примеров.

h3. Простая схема - один ethernet для всего

Один интерфейс, одна подсеть, подключение к интернет предоставляется сторонним(не входящим в кластер) сетевым оборудованием.
В данной настройке обе ноды должны быть подключены к гигабитному свитчу.
По умолчанию установщик создает бридж xen-br0. Вы можете изменить параметры, изменяя /etc/network/interfaces.
Изначально он выглядит примерно так:
<pre>
auto xen-br0
iface xen-br0 inet static
address 192.168.5.88
netmask 255.255.255.0
network 192.168.5.0
broadcast 192.168.5.255
gateway 192.168.5.1
bridge_ports eth0
bridge_stp off
bridge_fd 0
# up ifconfig eth0 mtu 9000
# up ifconfig xen-br0 mtu 9000
</pre>
Важные параметры, помимо настроек ipv4:
<pre>
bridge_ports eth0
</pre>
Означает, какое сетевое устройство привязано к бриджу.
<pre>
up ifconfig eth0 mtu 9000
up ifconfig xen-br0 mtu 9000
</pre>
Настройка jumbo frame на бридже для большей скорости сети и меньшей нагрузки на процессор
Это актуально для интерфейса, на котором будет drbd линк.
Однако, включение jumbo frame приведет к проблемам со связью с любым сетевым оборудованием,
не поддерживающим это. Поэтому данные параметры закомментированы по умолчанию.

h3. Схема по умолчанию - 2 ethernet, один для интерлинка(взаимодействия ganeti и drbd линка) и один для локальной сети.

Эта схема предпочтительна для большинства ситуаций.
Она не требует наличия гигабитных свитчей, предоставляет неплохую надежность и производительность при низких затратах.
Два гигабитных интерфейса на нодах подключены друг к другу напрямую или через гигабитный свитч(если Вы хотите более чем 2 ноды в кластере).
Остальные интерфейсы подключаются в lan.
В этой схеме сбой в локальной сети не влияет на работоспособность кластера.
Пример конфигурации /etc/network/interfaces для этой схемы.
<pre>auto xen-br0
iface xen-br0 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
# up ifconfig eth0 mtu 9000
# up ifconfig xen-br0 mtu 9000

auto xen-lan
iface xen-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
</pre>
Бридж xen-br0 используется для drbd и ganeti обмена, он настроен при установке нод.
Также адрес днс сервера настроен установщиком - это будет адрес нашей сервисной машины(sci).
Бридж xen-lan используется для подключения к локальной сети и должен быть настроен вручную.
В такой конфигурации Вы должны заполнить следующие переменные в sci.conf:
NODE1_IP - Уже настроено установщиком.
NODE1_NAME - Уже настроено установщиком.
NODE2_IP - укажите ip адрес второй ноды на интерлинке(например, 192.168.236.2)
NODE2_NAME - укажите имя второй ноды(напр. gnt2)
NODE1_LAN_IP - ip адрес первой ноды в локальной сети. Он будет доступен в днс под именем $NODE1_NAME-lan.$DOMAIN(напр. 192.168.5.55)
NODE2_LAN_IP - ip адрес второй ноды в локальной сети. Он будет доступен в днс под именем $NODE2_NAME-lan.$DOMAIN(напр. 192.168.5.56)
CLUSTER_IP - Адрес кластера в локальной сети. НЕ должен совпадать с любым другим существующим адресом. Напр. 192.168.5.35.
CLUSTER_NAME - Имя кластера в локальной сети. Будет доступно в днс под $CLUSTER_NAME.
SCI_LAN_IP - если Вы хотите, чтобы виртуальная машина sci присутствовала в lan, назначьте этот адрес, напр. 192.168.5.95

h3. Много бриджей с маршрутизацией и прямым доступом в интернет.

Это немного более сложная конфигурация сети.
В этом примере мы имеем две приватные сети и одно подключение к wan. Вся маршрутизация и фильтрация трафика
выполняется отдельной виртуальной машиной-фаерволом внутри кластера.
Такая конфигурация подходит Вам, если у Вас нет дорогого и качественного сетевого оборудования для маршутизации и фильтрации.
/etc/default/interfaces на нодах будет выглядить наподобие этого:
<pre>
auto lan
iface lan inet static
address 192.168.21.10
netmask 255.255.255.0
bridge_ports eth0
bridge_stp off
bridge_fd 0

auto server
iface server inet static
address 192.168.20.10
netmask 255.255.255.0
gateway 192.168.20.1
bridge_ports eth1
bridge_stp off
bridge_fd 0
up ifconfig eth1 mtu 9000
up ifconfig dmz mtu 9000

auto wan1
iface wan1 inet manual
bridge_ports eth2
bridge_stp off
bridge_fd 0
</pre>
Здесь мы имеем отдельный интерфейс для lan, серверный интерфейс (в данном примере сервера отделены от локальной
сети и клиенты подключаются к серверам через роутер в виртуальной машине) и подключение к wan.
Серверный интерфейс служит еще и для ganeti обмена и drbd линка, так что на нем установлен mtu 9000.
В этом примере мы не имеем адреса в wan на гипервизорах, однако мы рекомендуем Вам получить у Вашего провайдера
подесь для того, чтобы можно было назначить гипервизору публичные ip адреса для того, чтобы иметь доступ к ним
даже если виртуальная машина с маршрутизатором не функционирует.
В этом примере мы должны назначить следующие переменные в sci.conf:
NODE1_IP - Уже настроено установщиком.
NODE1_NAME - Уже настроено установщиком.
NODE2_IP - укажите ip адрес второй ноды на интерлинке(например, 192.168.20.2)
NODE2_NAME - укажите имя второй ноды(напр. gnt2)
NODE1_LAN_IP - ip адрес первой ноды в локальной сети. Он будет доступен в днс под именем $NODE1_NAME-lan.$DOMAIN(напр. 192.168.21.55)
NODE2_LAN_IP - ip адрес второй ноды в локальной сети. Он будет доступен в днс под именем $NODE2_NAME-lan.$DOMAIN(напр. 192.168.21.56)
CLUSTER_IP - Адрес кластера в сегменте серверов. НЕ должен совпадать с любым другим существующим адресом. Напр. 192.168.20.35.
CLUSTER_NAME - Имя кластера в сегменте серверов. Будет доступно в днс под $CLUSTER_NAME.
SCI_LAN_IP - если Вы хотите, чтобы виртуальная машина sci присутствовала в lan, назначьте этот адрес, напр. 192.168.20.95

А это пример /etc/network/interfaces на виртуальной машине-роутере:
<pre>
auto eth0
iface eth0 inet static
address 192.168.20.1
netmask 255.255.255.0

auto eth1
iface eth1 inet static
address 192.168.21.1
netmask 255.255.255.0

auto eth2
iface eth2 inet static
address 1.1.1.2
netmask 255.255.255.0
address 1.1.1.1
</pre>
Где eth0 подключен к server, eth1 к lan, eth2 к wan.

h3. Datacenter schema - separate interfaces for lan, ganeti interoperation, drbd link.
h3.
Схема для датацентров - отдельные интерфейсы для lan, ganeti обмена, drbd линка.

Если у Вас мощная сетевая инфраструктура.
Здесь мы имеем отдельный интерфейс для ganeti обмена(в данной конфигурации его можно называть сегментом для управления)
<pre>auto mgmt
iface mgmt inet static
address 192.168.236.1
netmask 255.255.255.0
network 192.168.236.0
gateway 192.168.236.1
broadcast 192.168.236.255
bridge_ports eth0
bridge_stp off
bridge_fd 0

auto xen-san
iface xen-san inet static
address 192.168.237.1
netmask 255.255.255.0
network 192.168.237.0
broadcast 192.168.237.255
bridge_ports eth1
bridge_stp off
bridge_fd 0
up ifconfig eth1 mtu 9000
up ifconfig xen-san mtu 9000

auto xen-lan
iface xen-lan inet manual
bridge_ports eth2
bridge_stp off
bridge_fd 0
</pre>
В данном примере ноды не имеют адреса в lan.
Вы должны заполнить следующие переменные в sci.conf:
NODE1_IP - Уже настроено установщиком.
NODE1_NAME - Уже настроено установщиком.
NODE2_IP - укажите ip адрес второй ноды на интерлинке(например, 192.168.236.2)
NODE2_NAME - укажите имя второй ноды(напр. gnt2)
NODE1_SAN_IP - ip адрес первой ноды в СХД. Он будет доступен в днс под именем $NODE1_NAME-san.$DOMAIN(напр. 192.168.237.1)
NODE2_SAN_IP - ip адрес второй ноды в СХД. Он будет доступен в днс под именем $NODE2_NAME-san.$DOMAIN(напр. 192.168.237.2)
CLUSTER_IP - Адрес кластера в локальной сети. НЕ должен совпадать с любым другим существующим адресом. Напр. 192.168.35.5.
CLUSTER_NAME - Имя кластера в локальной сети. Будет доступно в днс под $CLUSTER_NAME.
SCI_LAN_IP - если Вы хотите, чтобы виртуальная машина sci присутствовала в lan, назначьте этот адрес, напр. 192.168.35.95
SCI_LAN_NETMASK - ноды не имеют адреса в lan, поэтому требуется указать маску для этой сети, напр. 255.255.255.0
SCI_LAN_GATEWAY - ноды не имеют адреса в lan, поэтому требуется указать шлюз для этой сети, напр. 192.168.35.1

Конечно, в данных условиях удобно использовать VLAN-ы. Следующий пример опишет, как. Однако, следует помнить, что drbd линк
должен быть на отдельном сетевом интерфейсе.

h3. Схема с VLAN

Если у Вас есть управляемые свитчи, Вы можете настроить сеть в кластере с VLAN.
Вы должны добавить в конфиг на каждый вилан что-то наподобие этого:
<pre>
auto eth0.55
iface eth0.55 inet manual
up ifconfig eth0.55 up

auto bridge-example-vlan
iface bridge-example-vlan inet manual
up brctl addbr bridge-example-vlan
up brctl addif bridge-example-vlan eth0.55
up brctl stp bridge-example-vlan off
up ifconfig bridge-example-vlan up
down ifconfig bridge-example-vlan down
down brctl delbr bridge-example-vlan
</pre>
Где 55 - номер вилана.
В этом примере нода не имеет адреса в этом вилане, однако Вы можете назначить адрес ноде на этом бридже
так же, как и на обычном бридже.

Альтернативный способ конфигурации:
<pre>
auto vlan55
iface vlan55 inet manual
vlan_raw_device eth0

auto bridge-example-vlan
iface bridge-example-vlan inet manual
bridge_ports vlan55
bridge_stp off
bridge_fd 0
</pre>
Это делает то же самое, но другим путем.

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

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

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

* Вы должны указывать параметры двух нод в соотвествии с тем, как Вы их настроили.

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

* Вы обязательно должны указать имя кластера и его ip адрес

* NODE#_SAN_IP должен быть указан для обоих нод или ни для одной.

* NODE#_LAN_IP должен быть указан для обоих нод или ни для одной.

* Если Вы не имеете подключения к интернету или имеете локальные зеркала для apt, скорректируйте переменные APT_*

* Если Вы хотите передавать запросы на сторонние днс сервера, заполните DNS_FORWARDERS (не забудьте на конце ';').

* MASTER_NETDEV - имя сетевого интерфейса для поднятия ip адреса кластера. Авто-определение по умолчанию.

* LAN_NETDEV - Сетевой интерфейс по умолчанию для виртуальных машин. Авто-определение по умолчанию.

* RESERVED_VOLS - Список lvm томов, игнорируемых ganeti. Разделяется запятой. Следует указывать VG для каждого элемента списка.

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

Запустите:

<pre>
# sci-setup cluster
</pre>

Проверьте выведенные настройке и примите их, либо скорректируйте и запустите скрипт еще раз.
После принятия настроек запустится процесс инициализации кластера.
Далее Вы должны принять ssh ключ для второй ноды и набрать root пароль для второй ноды.
В конце Вы увидите вывод команды диагностики кластера. Он будет выглядеть наподобие этого:
<pre>
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
</pre>

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

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

Запустите:

<pre>
# sci-setup service
</pre>

Вы увидите индикатор процесса синхронизации drbd дисков, затем:
<pre>
* running the instance OS create scripts...
</pre>
appears. The further may take a while. The process finishes with
<pre>
* starting instance...
</pre>

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

<pre>
# gnt-instance console sci
</pre>

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

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

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

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

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

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

<pre>
gnt-instance add -t drbd -o debootstrap+default -s 10g -B memory=256m -n NODE1_NAME:NODE2_NAME INSTANCE_NAME
</pre>

Однако, наш проект дополняет процесс несколькими специфичными хуками:
# На каждую машину ставится @puppet@ для автоконфигурации, @openssh-client@ для обмена файлами и т.д.
# На каждую машину ставится pygrub.
# Сетевые настройки для машины могут быть назначены автоматически(см. ниже).

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

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

|NETWORK|NETMASK|BROADCAST|GATEWAY|

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

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

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

Читайте в [[OPERATIONS]].