Пример использования IP SLA + Embedded Event Manager

Cisco
Имеется два коммутатора, ближний и удаленный. Между ними два канала (Q-in-Q туннель на оборудовании провайдера), основной и резервный. Задача — при падении основного канала переключиться на резервный. Актуально, если нет возможности использовать STP, BGP и т.п.
Протестировано на двух коммутаторах МЕ3400 (IOS 12.2(44)EY)

Пример конфигурации:


Создаем тестовый interface vlan на основном канале. Switch1 — удаленный, Switch2 — ближний.


Switch1:
interface Vlan221
ip address 192.168.221.1 255.255.255.252

 
Switch2:
interface Vlan221
ip address 192.168.221.2 255.255.255.252

Пускаем vlan 221 в основном канале. Проверяем что ip-адрес 192.168.221.1 пингуется с адреса 192.168.221.2
Дальше настраиваем ip sla на ближнем коммутаторе.

ip sla logging traps
ip sla 10
icmp-echo 192.168.221.1 source-ip 192.168.221.2
frequency 5
timeout 1000
ip sla schedule 10 life forever start-time now
ip sla reaction-configuration 10 react timeout threshold-type immediate action-type trapAndTrigger


Этот кусок конфига включает пинг на удаленный коммутатор раз в 5 сек. с таймаутом 1000 мс. Так как у меня в IOS нет icmp-jitter (в нем можно задать допустимое количество потерь в канале), я не могу задать более глубокие настройки критерия обмена icmp-пакетами, а от потери пакетов никто не застрахован, поэтому имеет смысл сделать track и задать в нем условия когда считать канал рабочим, а когда нет.

track 10 rtr 10 reachability
delay down 20 up 40


Таким образом через 20 сек. после потери пингов track будет в состоянии down и через 40 сек. после появления пингов в состоянии up. После изменения состояния Track в логах должно появиться сообщения типа:

Track: 10 Change #4 rtr 10, reachability Up->Down
Track: 10 Up change delayed for 40 secs
Track: 10 Up change delay expired
Track: 10 Change #5 rtr 10, reachability Down->Up
Track: 10 Down change delayed for 20 secs
Track: 10 Down change delay expired

Если сообщение в логах появляться не будут, можно включить
debug track


После этого настраиваем Embedded Event Manager на появление сообщений в логах.

event manager applet CHANNEL_DOWN
event syslog pattern "rtr 10, reachability Up->Down"
action 1.0 cli command "enable"
action 2.0 cli command "configure terminal"
action 3.0 cli command "interface Gig0/1"
action 4.0 cli command "shutdown"
action 5.0 syslog msg "EEM shutdown interface Gig0/1"
action 6.0 cli command " interface Gig0/2"
action 7.0 cli command " no shutdown"
action 8.0 syslog msg "EEM enable interface Gig0/2"


Создаем апплет «CHANNEL_DOWN», ищем в логах что наш Track ушел в Down и говорим циске что нужно сделать (а именно выключить основной канал, включить резервный и написать об этом в логах :)) Тут хочется сделать небольшую ремарку, гораздо удобнее было бы использовать команду
event track 10 state down
, но не во всех версиях IOS это команда есть.
При желании можно добавить чтобы при восстановлении основного канала все переключалось обратно, ну или (при условии что резервный и основной каналы одинаковы по стоимости и пропускной способности) оставалось все на своем месте до падения резервного. :))
А вообще функционал у EEM большой, можно делать многие вещи, начиная от отправки письма администратору до выполнения TCL-скриптов.

6 комментариев

avatar
про отправку письма интересно, надо бы реализовать