Jump to content
Калькуляторы

Quagga Zebra zebra 100% cpu

Добрый день, коллеги. Может кто сталкивался с такой проблемой. Есть сервер с accel-ppp , ipoe и ip unnumbered. Крутится quagga в качестве BGP внутри , для обмена между бордером и брасами.

Таких два сервера , одинаковые по железу, только на одном карта X520 (82599) на другом i350. Проблемный x520. CPU zebra взлетает под 100% и load average до 3.00 .

 

8к маршрутов /32

 

CPU"Intel® Xeon® CPU E3-1240 v3 @ 3.40GHz"

 

eth0 Инет

eth1- Клиенты

eth2- Клиенты

zebra.conf

 

 

!
! Zebra configuration saved from vty
!   2014/10/13 14:48:44
!
hostname ipoe4-bgp
password pass
enable password pass
!
interface eth0
ipv6 nd suppress-ra
!
interface eth1
ipv6 nd suppress-ra
!
interface eth2
ipv6 nd suppress-ra
!
interface lo
!
!
!
line vty
!

 

bgpd.conf

 

!
! Zebra configuration saved from vty
!   2016/07/13 12:43:21
!
hostname IPoE4_BGP
password pass
enable password pass
log file /var/log/quagga/bgpd.log
log stdout
!
router bgp 64704
bgp router-id 172.31.0.4
redistribute kernel
redistribute connected
neighbor 172.31.0.2 remote-as 64702
neighbor 172.31.0.3 remote-as 64703
neighbor 172.31.0.5 remote-as 64705
neighbor 172.31.0.6 remote-as 64706
neighbor 172.31.0.29 remote-as 64729
neighbor 172.31.0.30 remote-as 64700
!
line vty
!

 

top

top - 14:48:48 up 14:08,  1 user,  load average: 2.38, 2.15, 2.00
Tasks: 251 total,   4 running, 247 sleeping,   0 stopped,   0 zombie
%Cpu0  : 15.2 us,  6.9 sy,  0.0 ni, 77.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  : 38.1 us,  3.7 sy,  0.0 ni, 56.5 id,  0.0 wa,  0.0 hi,  1.7 si,  0.0 st
%Cpu2  : 22.5 us,  5.5 sy,  0.0 ni, 71.3 id,  0.0 wa,  0.0 hi,  0.7 si,  0.0 st
%Cpu3  : 15.1 us,  4.7 sy,  0.0 ni, 78.9 id,  0.0 wa,  0.0 hi,  1.3 si,  0.0 st
KiB Mem:   8133340 total,  2026184 used,  6107156 free,    99680 buffers
KiB Swap:  8350716 total,        0 used,  8350716 free.   896360 cached Mem

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                            
25715 quagga    20   0   31436   8404    640 R  61.2  0.1  12:09.97 zebra                                                                                                                              
   1 root      20   0  104620  73804   1448 R  31.9  0.9 195:34.28 init                                                                                                                               
5232 root      20   0  817196  26392   1928 S   3.3  0.3  22:45.99 accel-pppd                                                                                                                         
 745 message+  20   0   39224   1280    900 S   1.0  0.0   3:45.29 dbus-daemon                                                                                                                        
 437 root      20   0   24060   5248    632 S   0.7  0.1   4:18.17 upstart-udev-br                                                                                                                    
   7 root      20   0       0      0      0 S   0.3  0.0   1:33.76 rcu_sched                            

post-88211-037200300 1468411494_thumb.png

Edited by roysbike

Share this post


Link to post
Share on other sites

Да, зебра следит за маршрутами/интерфейсами ядра всегда, даже если это не требуется, хз как это отключить. Чтобы минимизировать импакт от этого дела - просто запускайте кваггу через renice -20

Share this post


Link to post
Share on other sites

Да, зебра следит за маршрутами/интерфейсами ядра всегда, даже если это не требуется, хз как это отключить. Чтобы минимизировать импакт от этого дела - просто запускайте кваггу через renice -20

А маршрут он оне потеряет при этом? Самый прикол в том, что проблема только на одном брасе. Хотя конфиги одинаковые

Edited by roysbike

Share this post


Link to post
Share on other sites

А маршрут он оне потеряет при этом?

Если собирать с флагом "--enable-tcp-zebra" то ничего терять не должно (точнее стек ОС будет заботиться о том, чтобы сообщения между zebra и демонами протоколов не потерялись)

Share this post


Link to post
Share on other sites

Мне не понятно, почему на таком же сервере все в порядке.

Share this post


Link to post
Share on other sites

Я сталкивался с подобным когда пытался сделать бордер и брас в одном.

Зебра перебирает всю таблицу каждый раз при добавлении или удалении маршрута, в том числе и при подкл и откл пользовательских туннелей.

М.б. похожая ситуация? Все линки и маршруты не изменяются на этом сервере?

Edited by Hawk128

Share this post


Link to post
Share on other sites

Я сталкивался с подобным когда пытался сделать бордер и брас в одном.

Зебра перебирает всю таблицу каждый раз при добавлении или удалении маршрута, в том числе и при подкл и откл пользовательских туннелей.

М.б. похожая ситуация? Все линки и маршруты не изменяются на этом сервере?

Скорее всего похожа. Линки меняются, так как там 8к интерфейсов и эти два браса в одной сети. Кто раньше поднял ipoe сессию тот и держит ее, а второй только интерфейс поднял вот и прыгает. На втором брасе остановил accel-ppp и все ок стало.

Edited by roysbike

Share this post


Link to post
Share on other sites

Были постоянные проблемы с квагой. И не только из сканом интерфейсов.

Перешел на bird с импортом из ядра и без скана интерфейсов.

Share this post


Link to post
Share on other sites

Были постоянные проблемы с квагой. И не только из сканом интерфейсов.

Перешел на bird с импортом из ядра и без скана интерфейсов.

У вас BGP? Не работал с bird, можете показать ваш конфиг?

Share this post


Link to post
Share on other sites

У вас BGP? Не работал с bird, можете показать ваш конфиг?

 

Только bgp.

 

Конфиг довольно простой и хорошо структурированный. Доки из офф сайта хватает, чтоб сделать все что нужно.

Импорт из ядра "protocol kernel".

 

Пример работы bgp.

 

 

filter as_route_export {
   if net ~ [ x.x.x.0/22+, 100.64.0.0/16{16,19} ] then {
       accept;
   }
   else reject;
}

filter as_route_import {
   if net ~ [ 0.0.0.0/0 ] then {
       accept;
   }
   else reject;
}

protocol bgp up_ibgp {
   local as 65001;
   description "juniper xe-0/0/2.10";
   neighbor x.x.x.1 as 65001;
   source address x.x.x.2;
   next hop self;
   export filter as_route_export;
   import filter as_route_import;
}

 

 

Share this post


Link to post
Share on other sites

У вас BGP? Не работал с bird, можете показать ваш конфиг?

 

Только bgp.

 

Конфиг довольно простой и хорошо структурированный. Доки из офф сайта хватает, чтоб сделать все что нужно.

Импорт из ядра "protocol kernel".

 

Пример работы bgp.

 

 

filter as_route_export {
   if net ~ [ x.x.x.0/22+, 100.64.0.0/16{16,19} ] then {
       accept;
   }
   else reject;
}

filter as_route_import {
   if net ~ [ 0.0.0.0/0 ] then {
       accept;
   }
   else reject;
}

protocol bgp up_ibgp {
   local as 65001;
   description "juniper xe-0/0/2.10";
   neighbor x.x.x.1 as 65001;
   source address x.x.x.2;
   next hop self;
   export filter as_route_export;
   import filter as_route_import;
}

 

 

Скажите пожалуйста а как вы в бирде смотрите маршруты получаемые по bgp от соседей? (аналог команды цыски show ip bgp neighbors 1.1.1.1 received-routes)?

Share this post


Link to post
Share on other sites

Скажите пожалуйста а как вы в бирде смотрите маршруты получаемые по bgp от соседей? (аналог команды цыски show ip bgp neighbors 1.1.1.1 received-routes)?

Some common Cisco commands translated to BIRD commands:
show ip route -- show route [table XXX]
show ip route bgp -- show route [table XXX] protocol <protocol_name> (show route proto ospf2 )
show ip route 1.2.0.0 longer- -- show route where net ~ 1.2.0.0/16
show ip bgp 1.2.0.0 -- show route where net ~ 1.2.0.0/16 all
show ip bgp sum -- show protocols
show ip bgp neighbors 1.2.3.4 -- show protocols all <protocol_name> (show protocols all ospf2)
show ip bgp neighbors 1.2.3.4 advertised-routes -- show route export <protocol_name>
clear ip bgp 1.2.3.4 -- reload <protocol_name> [in/out]
show ip route summary -- show route [table XXX] count

Share this post


Link to post
Share on other sites

по вашему это эквивалент?

show ip bgp neighbors 1.2.3.4 advertised-routes -- show route export <protocol_name>

Share this post


Link to post
Share on other sites

по вашему это эквивалент?

show ip bgp neighbors 1.2.3.4 advertised-routes -- show route export <protocol_name>

А по вашему нет? Выдает ту-же самую информацию.

Edited by SABRE

Share this post


Link to post
Share on other sites
show route export <protocol_name>

А где вы тут видите адрес нейбора?

 

и еще вопрос, а как быть с коммандой:

show ip bgp neighbors 1.2.3.4 received-routes

?

Edited by catalist

Share this post


Link to post
Share on other sites

А где вы тут видите адрес нейбора?

all добавьте и получите всю информацию о префиксе.

 

 

и еще вопрос, а как быть с коммандой:

show ip bgp neighbors 1.2.3.4 received-routes

 

show route protocol <NAME> (primary или filtered - по вкусу)

Share this post


Link to post
Share on other sites

А где вы тут видите адрес нейбора?

в bird-e нет такого, как адрес нейбора

там есть имена - protocol <proto> <name>

с именами работать проще, уж поверьте.

 

как я выше привел конфиг, и при этом все логично

show route export up_ibgp

show route protocol up_ibgp

 

Документации для настраивать и рулить птицой в нете предостаточно.

Если Вам не нравится bird - сразу бы сказали.

Можете вбить квагу в отдельный namespace. Поможет до первых серйозных факапов.

Share this post


Link to post
Share on other sites

Подниму тему. 

Есть 2 PPPoE сервера, современное железо и очень древний софт. В случайное время, примерно раз в месяц они ребутятся без видимых причин и каких-либо логов, ядро вероятно дырявое(2.6.31).

Между серверами и бордером поднята маршрутизация на RIP2.

 

Так вот, после очередного ребута на соседний сервер практически мгновенно переподключается до 2к клиентов и zebra в этот момент теряет часть маршрутов. Точнее перестает видеть часть PPP-интерфейсов.

Т.е. подключилось 2000, а маршрутов на бордер улетело 1800. И эта ситуация остается замороженной, помогает или переподключение сессии клиента, или банальный рестарт зебры.

 

cat /proc/net/pppoe говорит что сессий 1000, ip route show показывает 1000 маршрутов, а show route summary в консоли зебры говорит что маршрутов 900, и на бордер улетают эти 900.

 

Пока было по ~1000 онлайн-сессий на сервер проблема не вылезала, сейчас их стало 1.5-2к - вылезает на каждом сервере и при каждом ребуте.

Кваггу обновил с дистрибутивной 0.99.17 до 0.99.24.1 которая без нареканий работает на моих IPOE-серверах, ничего не изменилось.

 

Обновлять кваггу дальше, сейчас уже вроде 1.2 актуальная версия или может крутилку какую-то не заметил в конфиге? 

hostname nas4.xxx
password xxx
enable password xxx
service password-encryption
! log file /var/log/quagga/zebra.log
!
interface bond0.2
multicast
!
line vty
exec-timeout 30 0

 

Понятно что нужно чинить сами сервера, но пока не вылезали грабли с маршрутами эти обрывы раз в месяц совершенно не напрягали.

Share this post


Link to post
Share on other sites

Нашел в расылках похожие жалобы, добавил  параметр --nl-bufsize netlink-buffer-size.

Поглядим.

Share this post


Link to post
Share on other sites
24 минуты назад, kayot сказал:

Нашел в расылках похожие жалобы, добавил  параметр --nl-bufsize netlink-buffer-size.

Поглядим.

Да, очень похоже что вы правы. Банально не успевало из нетлинк сокета события выгребать до того, как их буфер переполнялся.

Share this post


Link to post
Share on other sites

Есть другой вопрос по bgpd из quagga.

 

Мне нужно, чтобы демон bgpd биндился только на определённые адреса (IPv6), а не на :::179.

При старте bgpd параметрами можно задать только порт, но не адреса.

В самОм конфиге для каждого соседа задан нужный update-source.

Тем не менее - bgpd биндится на :::179.

 

Можно ли как-то заставить bgpd не биндиться на :::179, а только на конкретные IP?

Share this post


Link to post
Share on other sites
4 часа назад, IVB сказал:

Есть другой вопрос по bgpd из quagga.

 

Мне нужно, чтобы демон bgpd биндился только на определённые адреса (IPv6), а не на :::179.

При старте bgpd параметрами можно задать только порт, но не адреса.

В самОм конфиге для каждого соседа задан нужный update-source.

Тем не менее - bgpd биндится на :::179.

 

Можно ли как-то заставить bgpd не биндиться на :::179, а только на конкретные IP?

fIrewall  Не поможет ?

Share this post


Link to post
Share on other sites

Не, файрвол не поможет.

Т.к. на другие адреса должен биндиться bird.

(вот такой я извращенец)

Share this post


Link to post
Share on other sites
2 часа назад, IVB сказал:

Т.к. на другие адреса должен биндиться bird.

Задайте quagga один порт, bird другой, и через DNAT перенаправьте 179 порты с нужных интерфейсов к ним.

 

Share this post


Link to post
Share on other sites
2 hours ago, [anp/hsw] said:

Задайте quagga один порт, bird другой, и через DNAT перенаправьте 179 порты с нужных интерфейсов к ним.

 

В моём случае DNAT не нужен.

quagga "общается" с соседями на стандартном порту.

bird будет общаться только с нашей quagga, поэтому достаточно настроить bird на нестандартный порт, и в настройках соседа-bird на quagga указать этот же порт.

 

Вот только не взлетает всё равно такая конструкция...

(но только это уже отдельная тема, здесь продолжать нет смысла)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now