LINUX.ORG.RU
решено ФорумAdmin

Label для VLAN интерфейса без начального адреса

 , , , ,


0

1

Вопрос, в общем-то, по несколько нетривиальной, как оказалось, но всё-таки матчасти.
Исходные данные:
SLES11
Кластер на основе Corosync+Pacemaker
Две ноды с двумя сетевыми интерфейсами, один под управление, второй под трафик приложений, часть сетей живёт в VLAN интерфейсах

Условия задачи:
Нужно сделать плавающий IP на VLAN интерфейсе.
Так как интерфейсов много, то мне для удобства хочется на каждый адрес назначить метку (iflabel в терминах кластерного конфига, ну или раньше так IP alias назывался во времена ifconfig)
Так как адреса сети управления уже есть на каждом хосте, то выделять адреса из сети где работают приложения на хост мне видится быссмысленным.

Загадки во тьме:
Проблем не возникло с обычным интерфейсом (например bond1), нюансы попёрли в случае VLAN интерфейса - плавающий адрес не подымался с ошибкой.
Причём он подымался нормально если не назначать метку, или если предварительно назначить хосту физический адрес из этой сети. Ошибка в логах при этом следующая:

[INFO] ip -f inet addr add 192.168.77.227.41/255.255.255.224 brd 10.77.227.63 dev vlan123 label app
[ERROR] Start Failed,return 1,execute ip -f inet addr add 192.168.227.41/255.255.255.224 brd 192.168.77.227.63 dev vlan123 label app failed
В других логах видно что фейлится всё на iproute2, в консоли это воспроизвести можно так:
# ip a a 192.168.227.41/27 dev vlan123 label app
"dev" (vlan123) must match "label" (app)
Что ведёт к https://github.com/shemminger/iproute2/blob/master/ip/ipaddress.c
if (l && matches(d, l) != 0) {
fprintf(stderr, "\"dev\" (%s) must match \"label\" (%s).\n", d, l);
return -1;
}
но вопрос не о том.

В хорошем случае, когда адрес уже есть у хоста лог такой:

[INFO] ip -f inet addr add 192.168.227.41/27 brd 192.168.227.63 dev vlan123 label vlan123:app
[INFO] ip link set vlan123 up

Вопрос у меня пока следующий:
Интерфейс что с адресом, что без адреса находится в Up. Но явно есть какая-то разница, когда он находится в Up с назначенным адресом. Кластер видит эту разницу каким-то образом и назначает метку интерфейсу по разному: либо просто «app», либо «vlan123:app» В чём разница и как имитировать «поднятость» интерфейса не выделяя ему адрес? Собственно выделить не проблема, но это неспортивно.

Конфиги интерфейсов:

cat /etc/sysconfig/network/ifcfg-vlan123                                                         
STARTMODE='onboot'
ETHERDEVICE='bond1'
IPADDR=''
NETMASK=''


cat /etc/sysconfig/network/ifcfg-bond1
BOOTPROTO='static'
STARTMODE='onboot'
WIRELESS='no'
device='bond1'
IPADDR=''
NETMASK=''
BONDING_MASTER='yes'
BONDING_MODULE_OPTS='mode=1 miimon=200 use_carrier=1'
BONDING_SLAVE0='eth2'
BONDING_SLAVE1='eth3'

mky frob, router

★★★★★

Последнее исправление: zolden (всего исправлений: 1)

Я, как понимаю, "dev" must match "label" в любом случае, что vlan, что eth. Поэтому нужно ковырять pacemaker, почему он хочет ip-адрес на vlan интерфейсе, где его парсер ошибается в разборе ″ip addr″. Может поможет смена схемы именования VLAN'ов, там ведь разные варианты возможны, eth0.123, vlan123@eth0 и т.д.

У вас через sysctl параметер promote_secondaries = 1 установлен?

mky ★★★★★
()
Ответ на: комментарий от mky

Да, promote_secondaries выставлен.
Сейчас даже попробовал выставить iflabel явно как «vlan123:app», адрес поднялся, но дальше зафейлились какие-то кластерные проверки

zolden ★★★★★
() автор топика

Незнаю, может быть из-за того что в первом варианте в параметре label передаёте имя интерфейса и метку, а во втором только метку:
ip -f inet addr add 192.168.227.41/27 brd 192.168.227.63 dev vlan123 label vlan123:app
ip a a 192.168.227.41/27 dev vlan123 label app

===[добавлено через пару минут]===
Да, похоже ошибка у вас в параметре label, там нужно указывать имя устройства.

$ sudo brctl addbr br-test
$ sudo vconfig add br-test 10
Added VLAN with VID == 10 to IF -:br-test:-
$ sudo ip addr add 192.168.227.41/27 dev br-test.10 label app
"dev" (br-test.10) must match "label" (app).
$ sudo ip addr add 192.168.227.41/27 dev br-test.10 label br-test.10:app
DiMoN ★★★
()
Последнее исправление: DiMoN (всего исправлений: 1)
Ответ на: комментарий от DiMoN

может быть из-за того что в первом варианте в параметре label передаёте имя интерфейса и метку, а во втором только метку

Я это собственно и сказал.
Вопрос немного в другом: когда кластер видит что на интерфейсе уже есть адрес, то он использует правильный формат (nic:label), когда адреса нет - использует неправильный формат(label).
В случае физических интерфейсов (не VLAN) метка всегда формируется правильно.

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

когда кластер видит что на интерфейсе уже есть адрес, то он использует
правильный формат (nic:label), когда адреса нет - использует неправильный
формат(label).

Это ошибка в данном ПО, надо с ним и разбираться, почему он имя устройства не добавляет в строку вызова ip.

AS ★★★★★
()
Ответ на: комментарий от AS

Да, тоже склоняюсь к этой версии уже. Теперь проблема воспроизводится и с обычными интерфейсами, не только c VLAN

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

если софт кривой и неадекватно реагирует на точку в имени, то можно vlan-ы создавать без имени физического устройства ( vconfig name-type VLAN_PLUS_VID ) или переименовывать их через «ip li»

vel ★★★★★
()
Ответ на: комментарий от vel

Точки нет. Я везде обращаюсь к нему просто как vlan123

# ip l l dev vlan123
15: vlan123@bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP

zolden ★★★★★
() автор топика
Ответ на: комментарий от zolden

Ну в этих исходниках команда ip вызывается из функции add_interface(), которая вызывается из ip_start().

Параметры для add_interface() определяются в ip_init(), интересуемый $IFLABEL определяется ближе к концу ip_init(). И, на первый взгляд, значение $IFLABEL не может остаться неизменным, в нём должно появится двоеточие, непонятно, как у вас там остаётся ″app″.

Рекомендую натыкать в ip_init() отладочной печати (через ″ocf_log info″), чтобы выяснять в чём проблема.

mky ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.