Вопрос, в общем-то, по несколько нетривиальной, как оказалось, но всё-таки матчасти.
Исходные данные:
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
# ip a a 192.168.227.41/27 dev vlan123 label app
"dev" (vlan123) must match "label" (app)
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'