История о том, что при добавлении более 20 IP-адресов в keepalived не происходит связи
Сервер
Published: 2016-05-16

Контент был перенесен из Qiita.

В одном месте я использую keepalived, настроенный на VRRP + LVS как балансировщик нагрузки.
Этот балансировщик нагрузки работает с множеством IP-адресов (в связи с сертификатами SSL и прочими причинами) в следующие конфигурации.

В процессе добавления IP-адресов произошла печальная ситуация, когда связь не устанавливалась.

Конфигурация балансировщика нагрузки keepalived (DSR)

IP-адреса, используемые для SSL, маршрутизируются через статический маршрут от маршрутизатора,
и IP-адреса добавляются (добавляются по мере необходимости).

→ Таким образом, число IP-адресов, добавляемых в keepalived балансировщика нагрузки, постепенно увеличилось.
Для удобства указаны частные IP-адреса.

Невозможно настроить более 20 IP-адресов в VRRP

  • В конфигурационном файле указано 21 IP-адрес (например, конфигурация для примера)
vrrp_instance BOND0 {
    state MASTER
    interface bond0 
    virtual_router_id 100 
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.4 dev bond0
        192.168.2.1 dev bond0
        192.168.2.2 dev bond0
        192.168.2.3 dev bond0
        192.168.2.4 dev bond0
        192.168.2.5 dev bond0
        192.168.2.6 dev bond0
        192.168.2.7 dev bond0
        192.168.2.8 dev bond0
        192.168.2.9 dev bond0
        192.168.2.10 dev bond0
        192.168.2.11 dev bond0
        192.168.2.12 dev bond0
        192.168.2.13 dev bond0
        192.168.2.14 dev bond0
        192.168.2.15 dev bond0
        192.168.2.16 dev bond0
        192.168.2.17 dev bond0
        192.168.2.18 dev bond0
        192.168.2.19 dev bond0
        192.168.2.20 dev bond0
    }
}
  • Хотя я должен был настроить 21 IP-адрес, недостаточно !!
# ip addr show bond0 | grep "inet 192"
    inet 192.168.1.4/32 scope global bond0
    inet 192.168.2.1/32 scope global bond0
    inet 192.168.2.2/32 scope global bond0
    inet 192.168.2.3/32 scope global bond0
    inet 192.168.2.4/32 scope global bond0
    inet 192.168.2.5/32 scope global bond0
    inet 192.168.2.6/32 scope global bond0
    inet 192.168.2.7/32 scope global bond0
    inet 192.168.2.8/32 scope global bond0
    inet 192.168.2.9/32 scope global bond0
    inet 192.168.2.10/32 scope global bond0
    inet 192.168.2.11/32 scope global bond0
    inet 192.168.2.12/32 scope global bond0
    inet 192.168.2.13/32 scope global bond0
    inet 192.168.2.14/32 scope global bond0
    inet 192.168.2.15/32 scope global bond0
    inet 192.168.2.16/32 scope global bond0
    inet 192.168.2.17/32 scope global bond0
    inet 192.168.2.18/32 scope global bond0
    inet 192.168.2.19/32 scope global bond0

На самом деле это указано в документации к keepalived…
http://www.keepalived.org/pdf/UserGuide.pdf

virtual_ipaddress { # Блок ограничен 20 IP-адресами
    @IP
    @IP
    @IP
}

20 IP-адресов до предела! Это явно указано, позор на мне!

Добавление более 20 IP-адресов

  • Используйте virtual_ipaddress_excluded в конфигурационном файле для добавления IP-адресов (например, конфигурация для примера)
vrrp_instance BOND0 {
    state MASTER
    interface bond0 
    virtual_router_id 100 
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.4 dev bond0
    }
    virtual_ipaddress_excluded {
        192.168.2.1 dev bond0
        192.168.2.2 dev bond0
        192.168.2.3 dev bond0
        192.168.2.4 dev bond0
        192.168.2.5 dev bond0
        192.168.2.6 dev bond0
        192.168.2.7 dev bond0
        192.168.2.8 dev bond0
        192.168.2.9 dev bond0
        192.168.2.10 dev bond0
        192.168.2.11 dev bond0
        192.168.2.12 dev bond0
        192.168.2.13 dev bond0
        192.168.2.14 dev bond0
        192.168.2.15 dev bond0
        192.168.2.16 dev bond0
        192.168.2.17 dev bond0
        192.168.2.18 dev bond0
        192.168.2.19 dev bond0
        192.168.2.20 dev bond0
    }
}
  • Я успешно добавил более 20 IP-адресов.
# ip addr show bond0 | grep "inet 192"
    inet 192.168.1.4/32 scope global bond0
    inet 192.168.2.1/32 scope global bond0
    inet 192.168.2.2/32 scope global bond0
    inet 192.168.2.3/32 scope global bond0
    inet 192.168.2.4/32 scope global bond0
    inet 192.168.2.5/32 scope global bond0
    inet 192.168.2.6/32 scope global bond0
    inet 192.168.2.7/32 scope global bond0
    inet 192.168.2.8/32 scope global bond0
    inet 192.168.2.9/32 scope global bond0
    inet 192.168.2.10/32 scope global bond0
    inet 192.168.2.11/32 scope global bond0
    inet 192.168.2.12/32 scope global bond0
    inet 192.168.2.13/32 scope global bond0
    inet 192.168.2.14/32 scope global bond0
    inet 192.168.2.15/32 scope global bond0
    inet 192.168.2.16/32 scope global bond0
    inet 192.168.2.17/32 scope global bond0
    inet 192.168.2.18/32 scope global bond0
    inet 192.168.2.19/32 scope global bond0
    inet 192.168.2.20/32 scope global bond0