Project

General

Profile

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

Назад на страницу НАСТРОЙКА

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

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

Один интерфейс, одна подсеть, подключение к интернет предоставляется сторонним(не входящим в кластер) сетевым оборудованием.
В данной настройке обе ноды должны быть подключены к гигабитному свитчу.
По умолчанию установщик создает бридж xen-br0. Вы можете изменить параметры, изменяя /etc/network/interfaces.
Изначально он выглядит примерно так:

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

Важные параметры, помимо настроек ipv4:
bridge_ports eth0

Означает, какое сетевое устройство привязано к бриджу.
up ifconfig eth0 mtu 9000
up ifconfig xen-br0 mtu 9000

Настройка jumbo frame на бридже для большей скорости сети и меньшей нагрузки на процессор
Это актуально для интерфейса, на котором будет drbd линк.
Однако, включение jumbo frame приведет к проблемам со связью с любым сетевым оборудованием,
не поддерживающим это. Поэтому данные параметры закомментированы по умолчанию.

Рекомендуемая схема - 2 ethernet: для интерлинка (ganeti и drbd) и для локальной сети

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

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

Бридж 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
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

Много ethernet-интерфейсов с маршрутизацией и прямым доступом в интернет

Это немного более сложная конфигурация сети.
В этом примере мы имеем две приватные сети и одно подключение к wan. Вся маршрутизация и фильтрация трафика
выполняется отдельной виртуальной машиной-фаерволом внутри кластера.
Такая конфигурация подходит Вам, если у Вас нет дорогого и качественного сетевого оборудования для маршутизации и фильтрации.
/etc/default/interfaces на нодах будет выглядить наподобие этого:

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

Здесь мы имеем отдельный интерфейс для 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
NODE2_LAN_IP - ip адрес второй ноды в локальной сети. Он будет доступен в днс под именем $NODE2_NAME-lan.$DOMAIN
CLUSTER_IP - Адрес кластера в сегменте серверов. НЕ должен совпадать с любым другим существующим адресом. Напр. 192.168.20.35.
CLUSTER_NAME - Имя кластера в сегменте серверов. Будет доступно в днс под $CLUSTER_NAME.
SCI_LAN_IP - если Вы хотите, чтобы виртуальная машина sci присутствовала в lan, назначьте этот адрес, напр. 192.168.20.95

А это пример /etc/network/interfaces на виртуальной машине-роутере:

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

Где eth0 подключен к server, eth1 к lan, eth2 к wan.

Схема для датацентров - отдельные интерфейсы для lan, ganeti, drbd

Если у Вас мощная сетевая инфраструктура и есть выделенный высокоскоростной сегмент SAN, и выделенный сегмент для меж-серверного обмена, то имеет смысл трафик drbd пустить через SAN, а координацию ganeti-узлов и межузловые пересылки файлов осуществлять через серверный сегмент.

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

В данном примере ноды не имеют адреса в lan.
Вы должны заполнить следующие переменные в sci.conf:
NODE1_IP - Уже настроено установщиком.
NODE1_NAME - Уже настроено установщиком.
NODE2_IP - укажите ip адрес второй ноды на интерлинке(например, 192.168.236.2)
NODE2_NAME - укажите имя второй ноды(напр. gnt2)
NODE1_SAN_IP - ip адрес первой ноды в SAN. Он будет доступен в днс под именем $NODE1_NAME-san.$DOMAIN
NODE2_SAN_IP - ip адрес второй ноды в SAN. Он будет доступен в днс под именем $NODE2_NAME-san.$DOMAIN
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 линк
должен быть на отдельном сетевом интерфейсе.

Схема с VLAN

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

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

Где 55 - номер VLAN.
В этом примере узел не имеет адреса в этой VLAN, однако вы можете назначить адрес узлу в этой сети на бридже bridge-example-vlan так же, как и на обычном бридже.

Альтернативный способ конфигурации VLAN:

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

То же самое, но другим путем.

Бондинг

для drbd имеет смысл только бондинг в режиме 0 - round robin.
Он работает поверх глупых свитчей, поверх управляемых свитчей - далеко не всех.
Проверено, НЕ работает поверх cisco(SG500x и другие), поверх Allied Telesis AT-8000
Работает поверх D-link DES-3028P.

В качестве work around для работы поверх управляемых свитчей нужно развести интерфейсы бондинга попарно в разные вланы.
Т.е. на свитче создаются access порты в двух вланах для всех членов кластера (при этой схеме на всех узлах кластера должно быть одинаковое количество интерфейсов для бондинга).
Каждый eth0 включаются в access порты первого vlan, каждый eth1 включается в access порт второго влана.
Настроить VLAN поверх бонда в данной конфигурации не получится.

Настройки на узлах:

apt-get install ifenslave
auto bond0
iface bond0 inet manual
    slaves none

auto eth0
iface eth0 inet manual
    bond-master bond0

auto eth1
iface eth1 inet manual
    bond-master bond0

auto backbone
iface backbone inet static
        address 192.168.238.14
        netmask 255.255.255.0
        bridge_ports bond0
        bridge_stp off
        bridge_fd 0

http://www.adminia.ru/linux-bonding-obiedinenie-setevyih-interfeysov-v-linux/

STP

Между площадками есть основной канал ethernet, а также резервный vpn канал через интернет, нужно обеспечить автоматическое резервирование.
Создается виртуальая машина, подключаемая к ethernet и поднимающая vpn.

Настройки бриджа на первой машине:

auto xen-br0
iface xen-br0 inet static
    address 192.168.232.31
    netmask 255.255.255.0
        bridge_ports eth0
        bridge_fd 5
        bridge_hello 2
        bridge_maxage 5
        bridge_stp on
        bridge_bridgeprio 0
        bridge_pathcost eth0 1
        bridge_pathcost tap0 100

на второй:
auto xen-br0
iface xen-br0 inet static
    address 192.168.232.32
    netmask 255.255.255.0
        bridge_ports eth0
        bridge_fd 5
        bridge_hello 2
        bridge_maxage 5
        bridge_stp on
        bridge_bridgeprio 10
        bridge_pathcost eth0 1
        bridge_pathcost tap0 100

Пока оба канала работают, один из портов блокируется во избежание петли.

Поверх умных свитчей cisco это работает только в случае, если STP отключен на cisco, а также BPDU (пакеты STP) приходят не из VLAN. Если пакеты BPDU приходят тегированными (802.1q), то циска их отбрасывает. Возможно, работает схема с MSTP, не проверялась.