Биллинг версии 5.0, ОС Linux Ubuntu 9.0, установлены последние апдейты. вер. 5.0 сборка 241 от 12.10.2010 12:44:02 dialup вер. 5.0 сборка 243 от 10.08.2010 13:32:48 ipn вер. 5.0 сборка 260 от 24.11.2010 10:47:43 npay вер. 5.0 сборка 227 от 08.10.2010 19:03:15
NAS Cisco 7206VXR NPE-G1, PPPoE абоненты, в онлайне около 100 абонентов. Сервер биллинга DELL PE 2950, 2x CPU 4xCORE 2Ghz, 12Gbyte RAM, процессоры загружены на 5-10% в пиках.
При падении транспортной сети до NASа, и ее восстановлении, абоненты начинают автоматом производить переконнект, и радиус перестает авторизовать абонентов, у них в виндовсе появляется ошибка 718 - удаленный сервер не отвечает. На циске видно, что радиус не отвечает. Причем, если у абонента неправильный пароль, или не хватает баланса, его отпинывает нормально, в логах модуля Диалап появляется соответствующая ошибка.
Результаты команды статуса радиуса в момент проблем: (немного могу ошибаться с цифрами, вставил на память, но в общем картина верная)
root@BGBill:/usr/local/BGRadiusDialup# ./radius_status.sh version 5.0 build 298 from 09.12.2010 18:59:44 18.12.2010 15:24:25 113 77 53 12 Request accounts per minute start: 1; stop: 2; update: 78 Request auths per minute accept: 53; reject: 0 Netfow packets per minute: 496 Ignore per minute auth: 53; update: 0 Antispam ban count: 0; used per minute: 0 Started: 17.12.2010 17:23:16 Uptime: 0 d 22:01:09 Memory total: 17 825 792; max: 1 431 699 456; free: 1 992 584 Trees in cache: 17 Connections pool to Master status Idle: 10; Active: 313; maxActive: 500; maxIdle: 40 root@BGBill:/usr/local/BGRadiusDialup#
Параметр Active: 313; после обрыва сети равен нулю, потом растет до цифры 313-318 и стоит на месте.
Настройки radius.properties: db.maxIdle=40 db.maxActive=500 auth.thread.count=110 acct.thread.count=110 auth.thread.must.be.free.count=10 acct.thread.must.be.free.count=10 То есть тут все корректно, согласно рекомендациям документации и разработчиков.
Параметр ulimit в ОС настроен корректно. 8192 открытых файлов, ошибок на нехватку сокетов нет.
Но, при вводе команды netstat -n видно большое количество строк с CLOSE_WAIT, они обусловлены работой скрипта, который выполняет след функции: По событию авторизации абонента он берет его IP адрес и по SSH сессии загоняет его в RouterOS, тем самым открывая этому IP адресу доступ во внешку. При отключении абонента по событию Таймер он заносит его IP адрес в блок лист, закрывая этому адресу доступ во внешний мир. Сделано это для ликвидации паразитного трафика с внешних сетей в то время, когда абонент не находится в онлайне.
До последнего момента вся схема работала нормально. При этом кол-во абонентов в онлайне не превышало 60-70. Как только их кол-во приблизось к 100 и больше, начались такие проблемы.
Ребут радиуса не лечит проблему. Ребут всего сервера не помогает. Ребут NASа тоже НЕ помогает. Проходит определенное время, около 30 минут, проблема рассасывается, за 10 секунд все абоненты авторизовываются.
Если радиус обрывает сессии на границе месяца, то этой проблемы НЕ наблюдается, все происходит корректно.
Пробовали остановить работу этого скрипта, дергали пару раз сеть, не помогло.
Не знаем, куда рыть. Спасибо заранее за оказанную поддержку. Если что надо выложить, сделаем.
|