Поиск по этому блогу

12.02.2014

По CPU еще раз

Обратил внимание, что заметка про снижение нагрузки на CPU довольно актуальна. Однако, приведенные в ней рекомендации направлены скорее на защиту control-plane. Поделюсь опытом из практики. Большинство старых софтовых маршрутизаторов типа Cisco 7206, 28x, 38x, ложатся от большого количества передаваемого трафика. Особенно критично количество килопакетов в секунду.
  • Посмотреть количество pps на интерфейсах. Если существенный перекос в in и out, то определить источник и устранить. Вообще, помимо загрузки интерфейсов в bps, добавьте счетчики pps в мониторинг;
  • Если CPU грузит SNMP, то смотрите кто и что опрашивает. Возможно, стоит ограничить доступ системы мониторинга к данным на маршрутизаторе;
  • Если CPU загибается от ARP, то проверить логи на коммутаторах на предмет flapping'а маков. Попробовать порешать проблему средствами arp-inspection насколько это возможно.
  • Если на маршрутизаторе много разных политик, то их параметры следует настраивать по рекомендациям. Например, полисер на 1мбит/c правильнее будет записать как 1000000 бит/c, но лучше так: police 1024000 192000 384000, где CAR=1024000 бит кратно 8000 бит, Normal Burst (Nb) = CAR*(1/8)*1,5 = 192000 байт, Extended Burst (Eb) = 2*Nb =  384000
  • Оптимизировать ACL и отключить логи в правилах, если такие имеются.

Автоснапшот недоснапшота

Ранее писал про особенности коммутаторов EX-серии и их работы с файловой системой. Позитивно воспринял появление функционала auto-snapshot, но, как оказалось, есть опреденная тонкость. Во время создания снапшота (request system snapshot slice alternate) не производится проверка корректности выполнения операции. Проверка (show system snapshot media internal) не покажет ничего необычного. Если операция создания снапшота была прервана, то при очередном сбое коммутатор загрузится с раздела, где нехватает какой-то части ПО и начнет делать снапшот на когда-то рабочий раздел. По завершении операции все Minor alarm'ы связанные с тем, что "Host Boot from backup root" будут подчищены и никакой аварийной индикации на коммутаторах не будет.
При отключении от коммутатора во время создания снапшота и рекомендуется проверить логи (show log messages) на предмет некорректного завершения операции, когда snapshot завершися с каким-то кодом выхода. При выполнении команды с консоли, когда в конфигурации подобное, отключаться - к дороге.
ex> show configuration system ports 
console log-out-on-disconnect;
Это не относится к 9200 серии, где операция выполняется в бэкграунде, если можно так сказать.
ex9200> request system snapshot slice alternate 
Verifying compatibility of destination media partitions...
Running newfs (3GB) on disk1 media / partition ...
Running newfs (400MB) on disk1 media /config partition ...
Copying '/dev/ad0s1a' to '/dev/ad1s1a' .. (this may take a few minutes)
Copying '/dev/ad0s1e' to '/dev/ad1s1e' .. (this may take a few minutes)
The following filesystems were archived: / /config

{master}
ex9200>
Как восстановить. Надо флешку с Junos, чтобы восстановить ОС. На коммутатор можно попасть только с консоли. Конфигурация целая, но ничего сделать нельзя. Commit не работает, например. Хоть пароли вообще не проверяются и root'ом можно зайти. Далее копипаст с монтированием флешки и установкой ОС:
clear
mount_msdosfs /dev/da1s1 /mnt
cp /mnt/jinstall-ex-2200-12.3R3.4-domestic-signed.tgz /var/tmp/
umount /mnt
cli
request system software add no-copy no-validate reboot /var/tmp/jinstall-ex-2200-12.3R3.4-domestic-signed.tgz
После обновления:
configure 
delete system ports
commit and-quit
request system configuration rescue save
request system snapshot slice alternate
Тут можно было вставить картинку с Шоном Бином и надписью "Нельзя просто так взять и сделать снапшот в Junos".
p.s. О возможном варианте установки с флешки:
request system software add no-copy no-validate reboot /mnt/jinstall-ex-2200-12.3R3.4-domestic-signed.tgz
Это связано с удалением дистрибутива с носителя во время установки. Почему-то ex2200 этим грешат. Если флешка подмонтирована в read-only, то установить с нее ничего не получится.

Regex для snmp

В коммутаторах EX-серии по snmp запросу ifName (1.3.6.1.2.1.31.1.1.1.1) получаем ответы в том числе с юнитами, в мониторинге которых смысла нет. Есть механизм фильтации, который позволяет использовать регулярные выражения для исключения конкретных интерфейсов, попадающих под шаблон.
ex> show configuration snmp filter-interfaces 
interfaces {
lsi;
bme;
dsc;
ipip;
mtun;
pimd;
pime;
tap;
lt;
"^ge-[0-9]+/[0-9]+/[0-9]+.0$";
"^xe-[0-9]+/[0-9]+/[0-9]+.0$";
"^ae[0-9]+.0$";
}
В итоге:
$snmpwalk -c bublic -v 2c 999.999.99.1 1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.6 = STRING: lo0
IF-MIB::ifName.8 = STRING: gre
IF-MIB::ifName.21 = STRING: lo0.16384
IF-MIB::ifName.33 = STRING: me0
IF-MIB::ifName.34 = STRING: me0.0
IF-MIB::ifName.35 = STRING: vme
IF-MIB::ifName.49 = STRING: vcp-0
IF-MIB::ifName.50 = STRING: vcp-0.32768
IF-MIB::ifName.51 = STRING: vcp-1
IF-MIB::ifName.52 = STRING: vcp-1.32768
IF-MIB::ifName.501 = STRING: vlan
IF-MIB::ifName.502 = STRING: ge-0/0/0
IF-MIB::ifName.504 = STRING: ge-0/0/1
IF-MIB::ifName.506 = STRING: ge-0/0/2
IF-MIB::ifName.508 = STRING: ge-0/0/3
IF-MIB::ifName.510 = STRING: ge-0/0/4
IF-MIB::ifName.512 = STRING: ge-0/0/5
IF-MIB::ifName.514 = STRING: ge-0/0/6
IF-MIB::ifName.516 = STRING: ge-0/0/7
IF-MIB::ifName.518 = STRING: ge-0/0/8
IF-MIB::ifName.520 = STRING: ge-0/0/9
IF-MIB::ifName.522 = STRING: ge-0/0/10
IF-MIB::ifName.524 = STRING: ge-0/0/11
IF-MIB::ifName.526 = STRING: ge-0/0/12
IF-MIB::ifName.528 = STRING: ge-0/0/13
IF-MIB::ifName.530 = STRING: ge-0/0/14
IF-MIB::ifName.532 = STRING: ge-0/0/15
IF-MIB::ifName.534 = STRING: ge-0/0/16
IF-MIB::ifName.536 = STRING: ge-0/0/17
IF-MIB::ifName.538 = STRING: ge-0/0/18
IF-MIB::ifName.540 = STRING: ge-0/0/19
IF-MIB::ifName.542 = STRING: ge-0/0/20
IF-MIB::ifName.544 = STRING: ge-0/0/21
IF-MIB::ifName.546 = STRING: ge-0/0/22
IF-MIB::ifName.548 = STRING: ge-0/0/23
IF-MIB::ifName.555 = STRING: ae0
IF-MIB::ifName.556 = STRING: ae1
IF-MIB::ifName.557 = STRING: ae2
IF-MIB::ifName.558 = STRING: ae3
IF-MIB::ifName.559 = STRING: ge-0/1/0
Интерфейсы вида
IF-MIB::ifName.503 = STRING: ge-0/0/0.0
были исключены.