Проблема с отдельными нодами Netgraph

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-01 9:12:42

Здравствуйте.

Не знаю куда копать и как разобраться, прошу помощи советом)

Есть роутер(сервер доступа):
FreeBSD *.ru 8.2-STABLE FreeBSD 8.2-STABLE #0: Mon Jun 6 10:30:53 MSD 2011 root@*.ru:/usr/obj/usr/src/sys/ROUTER amd64

Используется шейпер на основе ipfw+ng_car, экспорт netflow (netgraph) и PF NAT.

У каждого пользователя в сети свой серый IP. Пользователей порядка 1500 человек.

Инициализация netflow.

Код: Выделить всё

$grphctl mkpeer ipfw: netflow 50001 iface0
$grphctl name ipfw:50001 netflow >
$grphctl connect ipfw: netflow: 50000 out0 >
$grphctl msg netflow: setdlt { iface=0 dlt=12 } >
$grphctl msg netflow: settimeouts { inactive=20 active=40 }
$grphctl mkpeer netflow: ksocket export inet/dgram/udp
$grphctl name netflow:export netflow_socket
$grphctl msg netflow_socket: connect inet/10.10.10.2:9996
Для каждого пользователя создана нода по схеме как на рисунке (схема в посте ниже). Общие скрипты генерации и работы системы выкладывать не буду, для простоты рассмотрим на одном пользователе.

Коммент к рисунку, расписанный на конкретном пользователе.

473 - уникальный идентификатор пользователя для входа.
20473 - уникальный идентификатор пользователя + 20000 тысяч (уникальность сохраняется) для выхода

Создаём ноду польователя:

Код: Выделить всё

$grphctl connect ipfw: netflow: 473 iface1 > /dev/null 2>&1
$grphctl connect netflow: ipfw: iface0 20473 > /dev/null 2>&1
$grphctl msg netflow: setdlt { iface=1 dlt=12 }
$grphctl msg netflow: setdlt { iface=0 dlt=12 }
$grphctl mkpeer netflow: car out1 upper > /dev/null 2>&1
$grphctl name netflow:out1 user473 > /dev/null 2>&1
$grphctl connect netflow: user473: out0 lower > /dev/null 2>&1
$grphctl msg $node_name "setconf { upstream={ cbs=$cbs ebs=$ebs cir=$speed greenAction=1 yellowAction=1 redAction=2 mode=3 } downstream={ cbs=$cbs ebs=$ebs cir=$speed greenAction=1 yellowAction=1 redAction=2 mode=3 } }"  > /dev/null 2>&1
Нода создана, со скоростью для шейпа $speed.

Добавляем в таблицы ipfw IP абонента входящий и исходящий трафик.

Код: Выделить всё

/sbin/ipfw table 10 add 192.168.101.45 473
/sbin/ipfw table 20 add 192.168.101.45 20473
Правила для шейпа в ipfw:

Код: Выделить всё

01000 1806746144  642481912434 netgraph tablearg ip from table(20) to any in via em0
01001 2016396596 2072145968352 netgraph tablearg ip from any to table(10) out via em0
В таблицах всё нормально, IP добавились.

Код: Выделить всё

ipfw table 10 list | grep 101.45
192.168.101.45/32 473
ipfw table 20 list | grep 101.45
192.168.101.45/32 20473
Система в такой конфигурации нормально работает, не падает, не вылетает, не дропает. Обслуживает 1500 пользоваетелей реализуя 100% качество сервиса.

Периодически пользователь вдруг не может выйти в инет, из за того что "не видит" сервер. "Не видит" выражается в полном отстутсвии пинга до сервера и соответственно нет прохождения трафика через него.

То есть с абонента пинг в сторону сервера - превышен интервал.
Пинг с сервера до абонента - превышен интервал.
Хотя tcpdump показывает что на интерфейсе и echo request и echo reply ходят.

Код: Выделить всё

/usr/sbin/tcpdump -i em0 -n -nn -ttt 'ip proto \icmp'
00:00:00.751567 IP 192.168.101.45 > 10.10.*.*: ICMP echo request, id 897, seq 1, length 64
00:00:00.000036 IP 10.10.*.* > 192.168.101.45: ICMP echo reply, id 897, seq 1, length 64
После того как с помощью ngctl shutdown <Имя ноды>, затем пересоздание ноды по выше указанному алгоритму - и пинг чудесным образом появляется и инет начинает работать.

А теперь вопрос: почему это может возникать и как надо лечить?
Вложения
netflow схема.jpg
Реализация netflow+shaper

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-01 9:20:52

На схему вкралась ошибка вместо 20743 нужно 20473.

selb609
проходил мимо

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение selb609 » 2011-11-07 11:15:32

архитектура I386 ? перейти на х64

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-07 15:10:00

FreeBSD *.ru 8.2-STABLE FreeBSD 8.2-STABLE #0: Mon Jun 6 10:30:53 MSD 2011 root@*.ru:/usr/obj/usr/src/sys/ROUTER amd64
Архитектура х64.

selb609
проходил мимо

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение selb609 » 2011-11-07 17:43:45

Тогда грустнее, у меня при смене платформы перестало.
Посмотрите по
vmstat -z
может пора повысить net.graph.maxdgram и/или net.graph.recvspace ?
Больше на ум ничего не приходит.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-08 10:33:47

это тоже пробовал. результата не дало. но спасибо за внимание)

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-15 8:33:10

Код: Выделить всё

ngctl msg <NODE_NAME>: "getstats"
Rec'd response "getstats" (1) from "[12211]:":
Args:	{ upstream={ passed=3241459 droped=14142 green=3126677 yellow=114708 red=14142 } downstream={ passed=3427812 droped=211341 green=921019 yellow=2506789 red=211341 } }
Когда нода умирает растут счётчики dropped и red. То есть весь трафик дропается. Сброс счётчиков не помогает. Помогает только shutdown и пересоздание. После этих манипуляций начинают расти счётчики passed, green, yellow - то есть трафик начинает ходить. Возникает подобная ситуация только для тех компов на которых работают torrent-клиенты. Есть мысли?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35480
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение Alex Keda » 2011-11-17 20:54:03

да... чё-то там про новый UDP на котором эта херь работает.
--
зарезать нахрен и всё
Убей их всех! Бог потом рассортирует...

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-22 9:31:45

зарезал. теперь буду наблюдать - есть изменения или нет.

Аватара пользователя
hishnik
рядовой
Сообщения: 36
Зарегистрирован: 2009-02-28 4:25:45

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение hishnik » 2011-11-22 20:27:47

а зачем так сложно, можно и одним PF обойтись.
Проще и быстрее...
Вообще я и сам netgraph люблю - отличнаю штука.
Пошукал багрепорты - много их в 8.Х на netgraph, жаль. Возможно там собака зарыта.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2011-11-28 15:37:16

Решил в качестве эксперимента сменить тип шейпирования с Cisco shape (mode 3) на Rate limit (mode 2) - не помогло.
Причем, было подтверждено, что ноды "умирают" точно не от обычного трафика, а именно от torrent-трафика, в ряде случаев фигурировал торрент-клиент mediaget...
Кто-то может подсказать, есть-ли возможность управлять какими-нибудь буферами нод? Может быть в них дело? Пока проблему решаем тупым пересозданием нод по выявлении факта "умершей" ноды.

Аватара пользователя
hishnik
рядовой
Сообщения: 36
Зарегистрирован: 2009-02-28 4:25:45

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение hishnik » 2011-12-01 14:35:04

Как временный workaround можно набить скриптик, чтоб мониторил и перезапускал мёртвых, когда надо.
Но по факту - надо найти суть проблемы, в общем - дебужить netgraph.
Интересует, победили ли проблему, и если ДА, то КАК?

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-19 9:33:00

Нет, проблему не победили, информации в Нэте по-прежнему нет. Отследить что происходит с нодами перед "смертью" вообще никак не получается, умирают совершенно случайно и непредсказуемо. Радует только одно - не часто, я бы даже сказал редко, но сей факт все-равно неприемлем. Сейчас думаем по поводу скрипта, где все ноды где-нибудь глубокой ночью будут по-порядку пересоздаваться одна за другой.
Есть надежда, что в FreeBSD 9x этой проблемы не будет :unknown:

Аватара пользователя
hishnik
рядовой
Сообщения: 36
Зарегистрирован: 2009-02-28 4:25:45

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение hishnik » 2012-01-19 15:30:08

Наверное скажу глупость, но что не сделаешь ради торжества справедливости.
Была у меня сетка по подъезду одно время - клиентов пускал через mpd соответственно, а шейпинг делал на PF - очень порадовал. Вообще мой провайдер (Корбина aka bill-line :) отрубает само VPN соединение, если я сам не ограничиваю p2p трафик. Конечно если по уму, то они сами должны это делать, но не делают. Как-то на RootConf один openbsd'шник сказал что PF и netgraph не дружат, так вот - это неправда. Дружат прекрасно, просто надо делать одно соединение = один сетевой интерфейс ngX. Насчет пересоздавать ночью - не лучшая идея. Лучше было бы в асинхронном режиме сделать тестирующую ноду, которая будет мониторить зависшие узлы, и при обнаружении пересоздавать только их.

Аватара пользователя
hishnik
рядовой
Сообщения: 36
Зарегистрирован: 2009-02-28 4:25:45

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение hishnik » 2012-01-19 15:47:18

Еще дам ссылку, авось поможет, там где-то в районе 3-й страницы есть обсуждение параметров sysctl для netgraph.
http://subnets.ru/forum/viewtopic.php?f=6&t=216 ...поиграйтесь с ними.
http://www.freebsdonline.com/content/view/524/515/

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-20 9:05:25

Спасибо за ссылки! Кое-какие значения пришлось увеличить :smile:
Посмотрим на поведение.

Кстати, ради эксперимента, переделали схему, убрав ноду netflow, таким образом упростив схему и соединив пользовательские ноды непосредственно с ipfw. Идея была в том, что может виноват именно "посредник" (netflow), оказалось нет, спустя 6-8 часов работы сдохли сразу 6 нод, не одномоментно конечно, но все же :( Причем одна из них сдохла так, как-будто и не создавалась вовсе...

По поводу создания "ноды в асинхронном режиме, которая будет мониторить зависшие узлы", можно по-подробнее пожалуйста?

Аватара пользователя
hishnik
рядовой
Сообщения: 36
Зарегистрирован: 2009-02-28 4:25:45

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение hishnik » 2012-01-20 17:37:04

Я конечно не делал такого, но идея в следующем: создаётся узел мониторинга, который (например через ng_tee) подключается к входу и выходу узла и по "ngctl msg" сравнивает параметры входа и выхода пользовательской ноды, ну и по результату: либо пересоздаёт её либо переходит к следующей. Желательно чтобы нода могла и свой тестовый пакет формировать, чтобы активно тестировать узел, даже если нет пользовательского трафика. Конечно вариант трудозатратный, но с другой стороны шаблоны узлов есть в исходниках, не думаю что там особо сложный код будет.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-23 10:06:13

Да действительно, выглядит красиво, но разбираться и переписывать исходники - это жесть :smile:
При осмысливании такого подхода вопросов становится только больше, как снежный ком :(
Кстати, удалось накопать информацию о том, что нам, оказывается, неслыханно повезло - у людей вообще Фря падает в корку и сервер уходит в ребут :smile:
Ладно, в любом случае тему не бросаю, о любых результатах буду отписываться, вдруг кому-то да и поможет :smile:

анонимный
проходил мимо

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение анонимный » 2012-01-23 12:39:54

Просто интересно посмотреть на ссылку где у них фря в корку падает...

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-27 13:36:08

Дошло до того, что ноды сыпались по 10 штук в день. Потом после некоторого шаманства ноды перестали сыпаться. Прошло двое суток пока спокойно.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-30 7:58:27

4 дня. Полёт нормальный. Видимо (не хотелось бы загадывать) но проблема побеждена. Но ещё в режиме наблюдения.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-01-31 10:06:12

Проблема решена. Можно закрывать.

Всё было просто. Опция NETGRAPH_CAR - отсутствовала (странно!) в ядре. Модуль подгружался динамически - был виден через kldstat (ng_car.ko). После добавления опции в ядро шейпер стал вести себя адекватно.

Вывод: внимательнее пишем конфиги ядра) не забываем про детали.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-02-01 9:14:28

Рано сказал про закрытие. Сегодня утром одна нода все-же сдохла.

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

Но встраивание опции NETGRAPH_CAR в ядро реально улучшило ситуацию.

vofka-morkofka
рядовой
Сообщения: 16
Зарегистрирован: 2011-11-01 7:50:47

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение vofka-morkofka » 2012-02-17 8:03:39

Все, теперь точно разобрался с моей проблемой!
Дело оказалось в настройках PF.

Выставил вот эти значения в pf.conf:

Код: Выделить всё

set limit { frags 16000000 states 16000000 src-nodes 16000000 tables 160000 table-entries 16000000 }
и ноды перестали умирать. :-D Нехватало видимо тех значений, что были раньше. :no:

Аватара пользователя
Daywalker
ст. сержант
Сообщения: 326
Зарегистрирован: 2007-03-11 22:28:45
Откуда: г. Котельники, МО
Контактная информация:

Re: Проблема с отдельными нодами Netgraph

Непрочитанное сообщение Daywalker » 2012-02-17 9:03:42

А что было раньше? В смысле какие значения стояли?
http://blog.volobuev.su - Блог о системном и сетевом администрировании.