rlm_perl threaded support

Ответить
snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

rlm_perl threaded support

Сообщение snooppy »

Интересует поддержка Threaded Perl в abills.
Ситуация следующая, в момент одновременных подключений, 1 числа месяца или после аварий когда клиенты подключаются большим количеством в единицу времени не выдерживает радиус аккаунтинг. В лог пишет следующее

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

Error: Discarding duplicate request from client pptp2 port 35157 - ID: 205 due to unfinished request 7086426
И так постоянно, при этом возникает большое количество ZAP. После когда радиус не успевает обработать 3 раза (По конфигу) Alive пакетов сессии пропадают с билинга, но на NAS(е) остаются, в дальнейшем происходит плохая ситуация.
Сервер на Gentoo, при вводе в консоли perl -V | grep USE_ITHREADS, тишина. Если я соберу перл с поддержкой USE_ITHREADS то производительность радиус возрастёт? И какие еще есть выходы из данной ситуации? Alive (sec.): при увеличении не поможет. Стоит 300.

~AsmodeuS~
Site Admin
Сообщения: 5746
Зарегистрирован: Пт янв 28, 2005 3:11 pm
Контактная информация:

Re: rlm_perl threaded support

Сообщение ~AsmodeuS~ »

пересобрать перл с потоками

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: rlm_perl threaded support

Сообщение snooppy »

~AsmodeuS~ писал(а):пересобрать перл с потоками
Спасибо. Это я и хотел услышать.
В дальнейшем я смогу использовать в modules/perl?

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

max_clones =32 # Максимально возможное количество процессов.
start_clones = 32 # Кколичество первоначально запущенных процессов.
# Динамическая регулировка количества процессов.
min_spare_clones =0
max_spare_clones = 32

cleanup_delay = 5
max_request_per_clone = 0

snooppy
Сообщения: 37
Зарегистрирован: Пн апр 29, 2013 7:20 am

Re: rlm_perl threaded support

Сообщение snooppy »

Пересобрал perl с поддержкой ithreads

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

billing ~ # perl -V | grep USE_I
                        USE_64_BIT_INTUSE_ITHREADS USE_LARGE_FILES
После пришлось пересобрать freeradius2.

Результат прежний.

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

Tue May 21 03:34:20 2013 : Error: Discarding duplicate request from client pptp3 port 55203 - ID: 72 due to unfinished request 183
Tue May 21 03:37:24 2013 : Error: Discarding duplicate request from client pptp1 port 33220 - ID: 29 due to unfinished request 1901
Tue May 21 03:37:35 2013 : Error: Discarding duplicate request from client pptp3 port 35831 - ID: 95 due to unfinished request 2014
Tue May 21 03:38:08 2013 : Error: Discarding duplicate request from client pptp1 port 54736 - ID: 96 due to unfinished request 2244
Tue May 21 03:42:00 2013 : Error: Discarding duplicate request from client pptp1 port 58810 - ID: 64 due to unfinished request 4809
Tue May 21 03:46:22 2013 : Error: Discarding duplicate request from client pptp2 port 42214 - ID: 218 due to unfinished request 781
billing ~ # cat /etc/raddb/radiusd.conf

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

prefix = /usr
exec_prefix = ${prefix}
sysconfdir = /etc
localstatedir = /var/lib
sbindir = ${exec_prefix}/sbin
logdir = /var/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct
name = radiusd
confdir = ${raddbdir}
run_dir =/var/run/radiusd
db_dir = ${raddbdir}
libdir = /usr/lib64/freeradius
pidfile = ${run_dir}/${name}.pid
user = radiusd
group = radiusd
max_request_time = 30
cleanup_delay = 5
max_requests = 3840000
#debug_level = 1

listen {
	type = auth
	ipaddr = *
	port = 0
}

listen {
	ipaddr = *
	port = 0
	type = acct
}

hostname_lookups = no
allow_core_dumps = no
regular_expressions	= yes
extended_expressions	= yes
log {
	destination = files
	file = ${logdir}/radius.log
	syslog_facility = daemon
	stripped_names = no
	auth = no
	auth_badpass = no
	auth_goodpass = no
}

checkrad = ${sbindir}/checkrad

security {
	max_attributes = 200
	reject_delay = 1
	status_server = yes
}

proxy_requests  = no
$INCLUDE clients.conf

thread pool {
	start_servers = 32
	max_servers = 32
	min_spare_servers = 3
	max_spare_servers = 10
	max_requests_per_server = 0
}

modules {
	$INCLUDE ${confdir}/modules/
}

instantiate {
	exec
	expiration
	logintime
}

$INCLUDE policy.conf
$INCLUDE sites-enabled/default
billing ~ # cat /etc/raddb/modules/perl

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

	perl {
		module = /usr/abills/libexec/rlm_perl.pl
		func_authorize = authorize
		func_accounting = accounting
		func_authenticate = authenticate
		func_preacct = preacct
		func_checksimul = checksimul
		func_xlat = xlat
                max_clones = 32
                start_clones = 32
                min_spare_clones = 0
                max_spare_clones = 32
                cleanup_delay = 5
                max_request_per_clone = 0
	}
Вопрос: Как сделать радиус производительнее, хотя бы 500 acct ответов в секунду? Может mysql не справляется?

mike62
Сообщения: 4
Зарегистрирован: Вт июн 05, 2012 10:57 am

Re: rlm_perl threaded support

Сообщение mike62 »

Когда радиус пишет ошибки discarding посмотрите, не висят ли какие-то запросы в БД?

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

mysql> SHOW PROCESSLIST;

Ответить