nas_event_daemon

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

Для чего нужен nas_event_daemon

Демон отправки событий nas_event_daemon забирает из стека(таблица базы "events_stack") команды для отправки и вызывает функции session скрипта, передавая в него параметры абонента и NAS

Описание работы

nas_event_daemon работает следующим образом:

  1. В настройке оборудования можно указать количество потоков, это по сути сколько учетных записей будет обрабатываться одновременно
  2. Форк берет первые 1000 событий по учетной записи, при этом в первую очередь обрабатывается user_info
  3. Если скрипт отправки события возвращает код ошибки 143 или 254 значит событие откладывается на 0.017 умноженное на номер попытки, всего может быть 10 попыток, т.е. обязательно обратите внимание на дату события и счетчик попыток
  4. После форка всех потоков демон просто ждет: usleep 50000 (время указано в микросекундах, что равно 0.05 секунды)
  5. И снова форкает пока не закончатся события в стеке

Можно настроить количество потоков чтобы ускорить процесс но надо помнить несколько вещей:

  • Если на каждую учетку очень много событий и отклик у оборудования долгий то вы просто наспамите демонов, которые скорее всего еще и транзакций навешают друг на друга т.к. один не успеет завершиться за 50000 милисекунд
  • Если на учетку по 1 событию и учеток очень много, то увеличение потоков не очень поможет.

Если увеличили потоки обязательно проверьте что они успевают обрабатывать:

ps aux |grep nas

Не должно со временем расти.

  • При управлении оборудованием по CoA средствами radiclient не должно возникать проблем с параллельной отправкой команд
  • При управлении оборудованием по ssh или telnet могут возникать проблемы: ssh может работать недостаточно быстро, telnet часто имеет ограничение на одновременное количество сессий

Настройка

Переходим на вкладку "ОБОРУДОВАНИЕ", выбираем нужный NAS.
Дополнительно > "Количество потоков для отправки команд на оборудование".
Указываем необходимое количество форков, нажимаем сохранить.
Будут автоматически запускаться новые форки nas_event_daemon. Количество процессов не должно превышать "количество форков" + 1 процесс "родитель".

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

Контролируем обработку команд с помощью ps aux. Например для микротика:

ps aux |grep send_mikrotik_cmd
root     27122  2.0  0.0  748333  8230 ?        SN   15:47   0:00 /usr/bin/python2.7 /usr/local/bin/send_mikrotik_cmd -s 10.0.0.1 carbon carbon /ip firewall address-list remove numbers=192.168.1.10_crb_blocked

Процессы не должны обрабатываться не более 50 секунд. Если Вы наблюдаете эту ситуацию изменении количества форков не окажет положительного влияния. Необходимо решать проблему с обработкой команд со стороны оборудования.

Отладка

Узнать количество команд в стеке с группировкой по типу команды можно выполнив скрипт event_count.sh:

chroot /app/asr_billing/ event_count.sh

Вывод будет приблизительно следующий:

# compact stack
TOTAL

       COUNT
           0

# main stack

       COUNT EVENT_TYPE
          52 b_negbal
           4 b_sys
          44 u_b_negbal
         207 user_accept
          75 user_add
          16 user_del
          50 user_drop
          73 user_edit
           1 user_rate_set_cancel
         168 user_redirect
          89 user_redirect_cancel
         122 usluga_activated
          28 usluga_add
           3 usluga_deactivated
           4 usluga_del
           1 usluga_disabled
          28 usluga_recalc

TOTAL

       COUNT
         965

Скрипт смотрит два стека:

  1. compact stack
  2. main stack

После сгруппированного списка по каждому стеку можно увидеть суммарное количество команд.

Структура таблиц:

  1. compact stack (таблица базы данных EVENTS_STACK_COMPACT) - изначально команды для отправки на оборудование добавляются в compact stack, его наполняют различные подсистемы (radiusd, sync_nasd) базовыми данными по событию которое нужно отправить на оборудование и обработчик абонентов переносит их в main stack дополняя нужными данными:
    • ABONENT_ID - ID абонента
    • USER_ID - ID учетной записи
    • CMD - Команда для выполнения (как в примере выше, названия команд в основном и компактном стеке одинаковы)
    • USER_IP - IP абонента
    • NAS_IP - IP NAS/BRAS
    • USLUGA_ID - ID услуги (указывается при изменении статусов услуг абонента в событиях usluga_add, usluga_activated и т.д.)
    • ACCT_SESSION_ID - Acct-Session-ID (уникальный ID сессии, используется при авторизации по RADIUS)
  2. main stack (таблица базы данных EVENTS_STACK) - этот стек формируется из compact stack, к нему добавляются расширенные данные для передачи в скрипт управления оборудованием, после чего они обрабатываются демоном nas_event_daemon и удаляются из стека
    • ABONENT_ID - ID абонента
    • USER_ID - ID учетной записи
    • EVENT_TYPEКоманда для выполнения (то же что CMD в compact stack)
    • NAS_TYPE - ID типа NAS или OSS схемы
    • EVENT_DATE - дата добавления события в main stack
    • PARAMS - набор переменных, передаваемый в скрипт событий
    • OWNER_SCRIPT - подсистема [воркера] добавившая событие в стек
    • OWNER_FUNCTION - функция этой под системы в которой вызвано добавление события в стек
    • NAS_ID - ID NAS/BRAS
    • TRY_COUNT - количество выполненных попыток отправки команд
Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.