Каждый Radius-сервер описывается FSM (конечным автоматом).
Radius-сервер может быть в одном из шести состояний:
Основные состояния — Alive и Dead, остальные состояния переходные. Radius-сервер считается доступным, если он находится в состояниях Alive или Alive-ping-sent. В остальных состояниях Radius-сервер считается недоступным и отправка запросов на него невозможна.
Ping — это запрос Status-Server или, если Radius-сервер не поддерживает Status-Server (опция radius_status_server
), Access-Request с User-Name и Password равным опциям radius_ping_user_name
и radius_ping_user_password
соответственно.
Раз в 10 секунд запускается задача watchdog, которая проверяет, надо ли посылать пинг, получен ли ответ на пинг, и в соответствии с этим переводит сервер в то или иное состояние или оставляет состояние неизменным.
При старте fastPCRF все Radius-сервера находятся в состоянии Initial. FastPCRF посылает к ним ping и переходит в состояние Dead-ping-sent ожидания ответа на пинг.
В состоянии Alive сервер пингуется только если от него не поступало никаких ответов в течение последних radius_keepalive
секунд. То есть если сервер отвечает на запросы и происходит непрерывный обмен запрос-ответ, — пинги к нему не шлются. При отправке пинга сервер переходит в состояние Alive-ping-sent (ожидание ответа на пинг).
В состоянии Dead сервер пингуется раз в radius_dead_timeout
секунд: посылается пинг и сервер переходит в состояние Dead-ping-sent. То есть если radius_dead_timeout=3600
(1 час), то Radius-сервер может перейти в состояние Alive не раньше чем через час после перехода в состояние Dead.
В состояниях DeadDisabled или Alive watchdog оповещает fastPCRF, что такой-то сервер стал недоступен или доступен соответственно.
Важно! Резервирование Radius-серверов реализовано по схеме Master-Slaves: только один Radius-сервер считается рабочим (master), остальные — резервные (в каком бы состоянии они не находились). Radius-сервера задаются списком (каждый Radius-сервер — в отдельной опции radius_server
), самым предпочтительным считается сервер, заданный в первой (по порядку в fastpcrf.conf
) опции radius_server
, затем менее предпочтительный, затем еще менее и т.д. Если сервер с номером N > 1 является master’ом, — это значит, что все сервера перед ним (1..N-1) недоступны (Dead). Если какой-либо серверов 1..N-1 становится живым (Alive) — он немедленно становится master’ом и все запросы идут на него. Ответы от прежнего master’а принимаются.
Если становится недоступным текущий master, — ищется самый первый сервер в состоянии Alive и он становится master’ом.
Radius-серверам авторизации не шлется никаких сообщений, когда они получают или теряют статус мастера. А accounting серверам — шлется: если accounting-сервер теряет статус мастера, ему посылается Accounting-Off; если accounting-сервер обретает статус мастера, ему посылается Accounting-On. В Accounting-On/Off посылаются следующие атрибуты:
radius_add_all_nas_ids=1
, все известные;