forum.bitel.ru
http://forum.bitel.ru/

Проблемы с отложенным обсчетом update
http://forum.bitel.ru/viewtopic.php?f=5&t=5054
Страница 1 из 1

Автор:  Cromeshnic [ 01 фев 2011, 08:12 ]
Заголовок сообщения:  Проблемы с отложенным обсчетом update

Задействовали вот такую схему:
http://bgbilling.ru/v5.1/doc/ch12s09s04 ... abase_work

Указываем в конфиге тарифа:
session_detail.delayed.update=1
log_session.delayed.update=1

Тогда апдейты по сессиям dialup на этих тарифах не вызывают каждый раз тарификации и обновления таблиц биллинга.
Удобно для безлимитчиков, разгружает сервер радиуса. Данные заносятся только по stop-пакету. Правда есть косметическое неудобство: для активных сессий время окончания сессии во всех логах пишется по первому пришедшему апдейту, что вводит многих в заблуждение.

Но вчера столкнулись с гораздо большей проблемой:
при перезагрузке радиус-сервера текущие активные сессии сами восстанавливаются, при этом время последнего апдейта берется из поля session_stop таблицы log_session, где оно у нас не обновляется до стопа. В результате при следующем проходе чекера зависших соединений такие сессии сбрасываются.

Например:

Код:
01-31/16:08:22 INFO [radiusListener-p-4-t-276] connections - [ xxx; ppvasya; 68839 ] DialUpNASConnection update connection..
01-31/16:08:22 INFO [radiusListener-p-4-t-276] connections - [ xxx; ppvasya; 68839 ] Taking zone default from response on calculate sid=15
01-31/16:08:22 INFO [radiusListener-p-4-t-276] connections - [ xxx; ppvasya; 68839 ] Taking zone default from response on calculate sid=15
 ^ - апдейт приходит, но не обсчитывается, т.к. безлимитчик
 
01-31/16:30:35 INFO [Thread-261] connections - [ xxx; ppvasya; 68839 ] Set status SUSPENDED on UpdateSuspendedSetter, time after last update: 1333
 ^ - сервак подвис, забив все коннекшены (из-за другой проблемы), апдейт в 16:23 был, но не обработался, коннект помечается подвисшим, т.к. время с последнего апдейта =1333 сек (22 мин)
 
 -- в 16:35 перегружаем радиус --
 
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=15
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=9
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=7
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=10
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=8
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=140
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Taking zone default from response on calculate sid=141
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] DialUpNASConnection startConnection mode=1
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] Zone on start default
01-31/16:36:55 INFO [pool-3-thread-1] connections - [ xxx; ppvasya; 15762 ] IP address register on collector
01-31/16:36:55 INFO [pool-3-thread-1] connections - nas-1 Session restored for login: ppbaimos; contract: xxx; ipaddr: x.x.x.x; count: 1516
 ^ - сессия восстановлена после ребута радиуса, счетчик last update time для неё берется из базы (stop_time там = времени первого апдейта = start_time + 15 мин)
01-31/16:37:17 INFO [Thread-84] connections - [ xxx; ppvasya; 15762 ] Set status SUSPENDED on UpdateSuspendedSetter, time after last update: 10541
 ^ - сессия помечается подвисшей, т.к. якобы с апдейтов не было уже 10541 сек (почти 3 часа), хотя на самом деле они были
 
01-31/16:38:15 INFO [Thread-64] connections - [ xxx; ppvasya; 15762 ] Removing as zombi..
01-31/16:38:15 INFO [Thread-64] connections - [ xxx; ppvasya; 15762 ] Dropping connection
01-31/16:38:15 INFO [Thread-64] connections - [ xxx; ppvasya; 15762 ] DialUpNASConnection stoppingConnection
01-31/16:38:15 INFO [Thread-64] connections - [ xxx; ppvasya; 15762 ] DialUpNASConnection has stop Packet => false
01-31/16:38:15 INFO [Thread-64] connections - [ xxx; ppvasya; 15762 ] IP address unregistred from collector
 ^ - соединение сбрасывается в биллинге, но остаётся на NAS-е.


Т.е. это даже не баг, а логическая нестыковка delayed.update и ребута радиуса.
Что можно сделать с этим? Может как-то писать время стопа сессий? Скажем, периодическим проcтавлять в базу session_stop для активных сессий?

Автор:  Cromeshnic [ 01 фев 2011, 08:25 ]
Заголовок сообщения:  Re: Проблемы с отложенным обсчетом update

Наверное нужно отключить log_session.delayed.update :)

Автор:  Cromeshnic [ 07 фев 2011, 08:12 ]
Заголовок сообщения:  Re: Проблемы с отложенным обсчетом update

И всё же: нельзя ли при остановке сервера "сбрасывать" накопленные в памяти данные по сессиям в базу?

В частности, записывать актуальное время стопа в log_session для активных, чтобы потом корректно их восстановить?

Ну либо через ./radius.sh сделать команду для такого?

Автор:  Администратор [ 25 фев 2011, 11:21 ]
Заголовок сообщения:  Re: Проблемы с отложенным обсчетом update

Проще отключить log_session.delayed.update, заодно и время будет показывать в мониторе нормально.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/